ユーザーの権限には、直接付与された権限と、ロールを付与した後にそのロールを通じて間接的に取得する権限が含まれます。ほとんどの操作に必要な権限は、直接付与されたものであっても、ロールを通じて間接的に持つものであっても、条件を満たすことができます。
権限の間接付与
ユーザーまたは他のユーザーにロールを付与することで、そのロールに含まれる権限が間接的に付与されます。
注意
ユーザーは常に直接付与された権限を使用できますが、ロールを通じて間接的に取得した権限を使用できるとは限りません。ユーザーは現在のセッションで有効化されているロールの権限のみを使用できます。ロールの有効化の詳細な手順については、ロールの有効化を参照してください。
前提条件
他のユーザーまたはロールにロールを付与する際、現在のユーザーが付与されるロールを所有していること、およびADMIN OPTION権限を持っていることが必要です。現在のユーザーが持つ権限に関する操作の詳細については、ユーザー権限の確認を参照してください。
背景
現在、ユーザーtest1が存在し、すでにemployeeロールが付与されているとします。employeeロールに含まれる権限を確認するステートメントは次のとおりです:
obclient [oceanbase]> SHOW GRANTS FOR employee;
結果は次のとおりです:
+--------------------------------------------------+
| Grants for employee@% |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'employee' |
| GRANT UPDATE, SELECT ON `dbtest`.* TO 'employee' |
+--------------------------------------------------+
2 rows in set
現在のユーザーにdeveloperロールがあります。developerロールに含まれる権限を確認するステートメントは次のとおりです:
obclient [oceanbase]> SHOW GRANTS FOR developer;
結果は次のとおりです:
+------------------------------------------+
| Grants for developer@% |
+------------------------------------------+
| GRANT ALTER SYSTEM ON *.* TO 'developer' |
+------------------------------------------+
1 row in set
操作例
現在、ロール developer 内のすべての操作権限をユーザー test1 に付与する必要があります。次の方法で間接的な権限付与を実現できます。
ユーザーにロールを付与する
現在のユーザーがロール
developerをユーザーtest1に付与します。obclient [oceanbase]> GRANT developer TO test1;ユーザーが後でそのロールを再付与できるようにしたい場合は、
WITH ADMIN OPTION句を追加できます。obclient [oceanbase]> GRANT developer TO test1 WITH ADMIN OPTION;SHOW GRANTS ... USINGステートメントを使用して、ユーザーがdeveloperから取得した権限を確認します。obclient [oceanbase]> SHOW GRANTS FOR test1 USING developer;結果は次のとおりです:
+-----------------------------------------------------+ | Grants for test1@% | +-----------------------------------------------------+ | GRANT ALTER SYSTEM ON *.* TO 'test1' | | GRANT `developer`@`%`,`employee`@`%` TO `test1`@`%` | +-----------------------------------------------------+ 2 rows in set
ユーザーのロールにロールを付与する
ロール
developerをロールemployeeに付与します。obclient [oceanbase]> GRANT developer TO employee;SHOW GRANTS ... USINGステートメントを使用して、ユーザーtest1がemployeeから取得した権限を確認します。obclient [oceanbase]> SHOW GRANTS FOR test1 USING employee;結果は次のとおりです:
+-----------------------------------------------+ | Grants for test1@% | +-----------------------------------------------+ | GRANT ALTER SYSTEM ON *.* TO 'test1' | | GRANT UPDATE, SELECT ON `dbtest`.* TO 'test1' | | GRANT `employee`@`%` TO `test1`@`%` | +-----------------------------------------------+ 3 rows in setクエリ結果から、ユーザー
test1がemployeeロールからALTER SYSTEM権限を取得したことがわかります。次に、employeeに付与されたロールや権限を確認します。obclient [(none)]> SHOW GRANTS FOR employee;結果は次のとおりで、
ALTER SYSTEM権限がdeveloperロールから取得されたことがわかります。+--------------------------------------------------+ | Grants for employee@% | +--------------------------------------------------+ | GRANT USAGE ON *.* TO 'employee' | | GRANT UPDATE, SELECT ON `dbtest`.* TO 'employee' | | GRANT `developer`@`%` TO `employee`@`%` | +--------------------------------------------------+ 3 rows in set
関連ドキュメント
ロールに関するその他の操作については、ロール管理を参照してください。