ユーザーが有効なロール、各ロールに含まれるロール、および各ロールに含まれる権限を確認できます。
ユーザーに付与されたロールと権限の確認
注意
ユーザーは常に直接付与された権限を使用できますが、ロールを通じて間接的に取得した権限を使用できるとは限りません。ユーザーは、現在のセッションで有効化されているロールの権限のみを使用できます。
ユーザー test1 に付与されたロールと権限を確認するステートメントは次のとおりです:
obclient [oceanbase]> SHOW GRANTS FOR test1;
クエリ結果は次のとおりです:
+-------------------------------------------------+
| Grants for test1@% |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO 'test1' |
| GRANT `employee`@`%`,`role1`@`%` TO `test1`@`%` |
+-------------------------------------------------+
2 rows in set
ユーザーに付与されたロールについて、そのロールが含む権限をさらに表示したい場合は、USING 句を追加して、そのロールが含む権限を指定して表示することができます。
obclient [oceanbase]> SHOW GRANTS FOR test1 USING role1;
結果は次のとおりです:
+-------------------------------------------------+
| Grants for test1@% |
+-------------------------------------------------+
| GRANT ALTER SYSTEM ON *.* TO 'test1' |
| GRANT UPDATE, SELECT ON `dbtest`.* TO 'test1' |
| GRANT `employee`@`%`,`role1`@`%` TO `test1`@`%` |
+-------------------------------------------------+
3 rows in set
ロールに付与されたロールまたは権限の確認
ロール role1 に付与されたロールまたは権限を確認します。
obclient [oceanbase]> SHOW GRANTS FOR role1;
クエリ結果は次のとおりです:
+-------------------------------------------------------+
| Grants for role1@% |
+-------------------------------------------------------+
| GRANT ALTER SYSTEM ON *.* TO 'role1' |
| GRANT SELECT ON `dbtest`.* TO 'role1' |
| GRANT SELECT ON `test1`.`tbl1` TO 'role1' |
| GRANT `employee`@`%` TO `role1`@`%` WITH ADMIN OPTION |
+-------------------------------------------------------+
4 rows in set
ユーザーのログイン時にデフォルトで有効になるロールを確認する
グローバル変数 activate_all_roles_on_login によりログイン時にユーザーが付与されたすべてのロールを自動的に有効にする設定が有効になっている場合、または SET DEFAULT ROLE ステートメントや ALTER USER ステートメントでログイン時にデフォルトで有効にするロールを設定した後は、mysql.default_roles ビューを照会して、ユーザーのログイン時のデフォルトで有効になるロールが正しく設定されているかどうかを確認できます。
obclient [oceanbase]> SELECT * FROM mysql.default_roles;
結果は次のとおりです:
+------+-------+-------------------+-------------------+
| HOST | USER | DEFAULT_ROLE_HOST | DEFAULT_ROLE_USER |
+------+-------+-------------------+-------------------+
| % | test1 | % | role1 |
| % | test1 | % | employee |
+------+-------+-------------------+-------------------+
2 rows in set
ビュー mysql.default_roles の各フィールドの詳細については、mysql.default_rolesを参照してください。
現在のセッションで有効なロールを確認する
現在のユーザーが現在のセッションで有効なロールを確認するステートメントは次のとおりです:
obclient [oceanbase]> SELECT current_role();
クエリ結果は次のとおりです:
+--------------------------------+
| current_role() |
+--------------------------------+
| `developer`@`%`,`employee`@`%` |
+--------------------------------+
1 row in set
クエリ結果が NONE の場合、現在のユーザーに有効なロールがないことを意味します。ユーザーが使用できるのは、自身が所有しているロールの権限のみです。
ロールとユーザー間の権限付与関係を確認する
obclient [oceanbase]> SELECT * FROM mysql.role_edges;
クエリ結果は次のとおりです:
+-----------+-----------+---------+---------+-------------------+
| FROM_HOST | FROM_USER | TO_HOST | TO_USER | WITH_ADMIN_OPTION |
+-----------+-----------+---------+---------+-------------------+
| % | employee | % | test2 | Y |
| % | employee | % | role1 | Y |
| % | developer | % | test1 | N |
+-----------+-----------+---------+---------+-------------------+
3 rows in set
上記のクエリ結果について:
最初の行は、
employeeロールが自身のすべての権限をtest2ユーザーに付与し、同時にtest2ユーザーがこのロールを他のユーザーまたはロールに再付与することを許可していることを示しています。2番目の行は、
employeeロールが自身のすべての権限をrole1ロールに付与し、同時にrole1ロールがこのロールを他のユーザーまたはロールに再付与することを許可していることを示しています。3番目の行は、
developerロールが自身のすべての権限をtest1ユーザーに付与し、かつtest1ユーザーはこのロールを他のユーザーまたはロールに再付与できないことを示しています。
ビュー mysql.role_edges の各フィールドの詳細については、mysql.role_edgesを参照してください。
現在アクティブなロールのテーブルレベル権限を確認する
現在のセッションでユーザーに付与されているアクティブなロールのテーブルレベル権限情報、およびこれらのロールが他のロールに付与したテーブルレベル権限情報を確認するステートメントは次のとおりです:
obclient [information_schema]> SELECT * FROM information_schema.role_table_grants;
クエリ結果は次のとおりです:
+---------+--------------+-----------+--------------+---------------+--------------+------------+--------------------+--------------+
| GRANTOR | GRANTOR_HOST | GRANTEE | GRANTEE_HOST | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | PRIVILEGE_TYPE | IS_GRANTABLE |
+---------+--------------+-----------+--------------+---------------+--------------+------------+--------------------+--------------+
| root | % | developer | % | def | test | tbl2 | Drop,Update,Select | NO |
+---------+--------------+-----------+--------------+---------------+--------------+------------+--------------------+--------------+
1 row in set
クエリ結果は、root ユーザーが test.tbl2 テーブルの Drop、Update、Select 権限を developer ロールに付与したことを示しています。
ビュー role_table_grants の各フィールドの詳細については、information_schema.role_table_grantsを参照してください。
現在アクティブなロールの列権限を確認する
現在のセッションでユーザーに付与されているアクティブなロールの列権限情報、およびこれらのロールが他のロールに付与した列権限情報を確認するステートメントは以下のとおりです:
obclient [information_schema]> SELECT * FROM information_schema.role_column_grants;
クエリ結果は次のとおりです:
+---------+--------------+----------+--------------+---------------+--------------+------------+-------------+----------------+--------------+
| GRANTOR | GRANTOR_HOST | GRANTEE | GRANTEE_HOST | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | PRIVILEGE_TYPE | IS_GRANTABLE |
+---------+--------------+----------+--------------+---------------+--------------+------------+-------------+----------------+--------------+
| NULL | NULL | employee | % | def | test | tbl1 | c1 | Select,Insert | NO |
| NULL | NULL | employee | % | def | test | tbl1 | c2 | Insert | NO |
+---------+--------------+----------+--------------+---------------+--------------+------------+-------------+----------------+--------------+
2 rows in set
上記のクエリ結果では:
- 最初の行は、
employeeロールがテーブルtest.tbl1の列c1に対してSelect、Insert権限を持っていることを示しています。 - 2番目の行は、
employeeロールがテーブルtest.tbl1の列c2に対してInsert権限を持っていることを示しています。
ビュー role_column_grants の各フィールドの詳細については、information_schema.role_column_grantsを参照してください。
現在アクティブなロールのルーチン権限を確認する
現在のセッションでユーザーに付与されているアクティブなロールのルーチン権限情報、およびそれらのロールが他のロールに付与したルーチン権限情報を確認するステートメントは次のとおりです:
obclient [information_schema]> SELECT * FROM information_schema.role_routine_grants;
上記のクエリ結果は次のとおりです:
+---------+--------------+-----------+--------------+------------------+-----------------+---------------+-----------------+----------------+--------------+-----------------------+--------------+
| GRANTOR | GRANTOR_HOST | GRANTEE | GRANTEE_HOST | SPECIFIC_CATALOG | SPECIFIC_SCHEMA | SPECIFIC_NAME | ROUTINE_CATALOG | ROUTINE_SCHEMA | ROUTINE_NAME | PRIVILEGE_TYPE | IS_GRANTABLE |
+---------+--------------+-----------+--------------+------------------+-----------------+---------------+-----------------+----------------+--------------+-----------------------+--------------+
| root | % | developer | % | def | test | add_numbers | def | test | add_numbers | Execute,Alter Routine | NO |
+---------+--------------+-----------+--------------+------------------+-----------------+---------------+-----------------+----------------+--------------+-----------------------+--------------+
1 row in set
クエリ結果は、root ユーザーがルーチン test.add_numbers の Execute、Alter Routine などの権限をロール developer に付与したことを示しています。
ビュー role_routine_grants の各フィールドの詳細については、information_schema.role_routine_grantsを参照してください。