ユーザーが有効にしたロール、そのロールに含まれるサブロール、および各ロールの権限を確認できます。
ユーザーに付与されたロールと権限の確認
注意
ユーザーは常に直接付与された権限を使用できますが、ロールを通じて間接的に取得した権限を使用できるとは限りません。ユーザーは現在のセッションで有効化されているロールの権限のみを使用できます。
ユーザー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
上記のクエリ結果について:
1行目は、
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を参照してください。