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