ユーザーの権限には、直接付与された権限と、ロールを付与された後、そのロールを通じて間接的に取得した権限が含まれます。ほとんどの操作に必要な権限は、直接付与されたものであれ、ロールを通じて間接的に持っているものであれ、条件を満たすことができます。
ロールを付与されることで間接的に権限を取得する
ユーザーまたは他のユーザーのロールにロールを付与すると、そのロールを付与されたユーザーは、そのロールに含まれる権限を間接的に取得します。
注意
ユーザーは常に直接付与された権限を使用できますが、ロールを通じて間接的に取得した権限を使用できるとは限りません。ユーザーは、現在のセッションでアクティブなロールの権限のみを使用できます。ロールのアクティブ化の詳細な操作については、ロールのアクティブ化を参照してください。
前提条件
他のユーザーまたはロールにロールを付与する際、現在のユーザーは付与対象のロールを所有しており、かつ 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
関連ドキュメント
ロールに関するその他の操作については、ロール管理を参照してください。