説明
このステートメントは、指定されたユーザーまたはロールに対応する権限を付与する、またはロールをユーザーまたはロールに付与するために使用されます。
制限事項と注意点
ループ状のGRANT操作はサポートされていません。例えば、ロールAがロールBに権限を付与し、ロールBがロールCに権限を付与した場合、ロールCがロールAに権限を付与しようとするとエラーが発生します。
権限要件
オブジェクト権限をユーザーに付与するための権限要件
GRANTステートメントを実行する際、現在のユーザーは付与される権限を持っていなければなりません。例えば、ユーザーuser1がユーザーuser2にテーブルtbl1のSELECT権限を付与したい場合、ユーザーuser1はテーブルtbl1のSELECT権限を持っている必要があります。GRANTステートメントを実行する際、現在のユーザーはGRANT OPTION権限を持っていなければなりません。OceanBaseデータベースの権限の詳細については、MySQLモードの権限分類を参照してください。
説明
ユーザーに権限を付与した後、そのユーザーはOceanBaseデータベースに再接続する必要があり、権限が有効になります。
ロールをユーザーまたは他のロールに付与するための権限要件
- 現在のユーザーが
SUPER権限を持っている場合、すべてのロールをGRANTできます。 - ロールを他のユーザーまたはロールに付与する際、現在のユーザーは付与されるロールを持ち、かつ
ADMIN OPTION権限を持っている必要があります。現在のユーザーが持つ権限の確認方法については、ユーザー権限の確認を参照してください。
構文
オブジェクト権限をユーザーまたはロールに付与する
GRANT priv_type[(column_name_list)] [, priv_type[(column_name_list)] ...]
ON [object_type] priv_level
TO {user [, user...]}
[WITH GRANT OPTION];
column_name_list:
column_name [, column_name ...]
object_type:
TABLE
| FUNCTION
| PROCEDURE
| CATALOG
user:
user_or_role
| user_name IDENTIFIED [WITH auth_plugin] BY password
| user_name IDENTIFIED [WITH auth_plugin] BY PASSWORD password
user_or_role:
user_name | role_name
ロールをユーザーまたはロールに付与する
GRANT role_name [, role_name ...]
TO user_or_role [, user_or_role ...]
[WITH ADMIN OPTION];
user_or_role:
user_name | role_name
パラメータの説明
| パラメータ | 説明 |
|---|---|
| priv_type | 付与する権限のタイプを指定します。複数の権限を付与する場合は、英語のカンマ(,)で区切ります。具体的な権限タイプとその説明については、MySQLモードの権限分類を参照してください。注意:PROXYパラメータは現在のバージョンではこのキーワード構文のみを記録し、機能は有効ではありません。 |
| column_name_list | オプション。列レベルの権限を付与する対象のリストです。付与される権限は、リストに記載された列にのみ適用されます。指定しない場合、権限はテーブル全体またはオブジェクト全体に適用されます。詳細については、直接権限付与を参照してください。 |
| object_type | オプション。権限が適用される対象のタイプ(つまり権限の対象となるオブジェクトのタイプ)を示します。詳細については、下記のobject_typeを参照してください。 |
| priv_level | 権限を付与するレベルを指定します。以下の形式を使用します:
|
| user | 権限を付与するユーザーを指定します。1人または複数のユーザーを指定でき、複数のユーザー間は英語のカンマ(,)で区切ります。ユーザーが存在しない場合、このステートメントはユーザーを直接作成します。 |
| auth_plugin | ユーザー認証方式を指定します。現在、mysql_native_password 認証プラグインのみサポートされています。 |
| BY password | 権限を付与するユーザーにパスワードを指定します。ここでのパスワードは平文であり、mysql.user テーブルに保存された後、サーバー側で暗号化されます。パスワードに特殊文字 ~!@#%^&*_-+=`|(){}[]:;',.?/ が含まれている場合は、英語の引用符('' または "")で囲む必要があります。 |
| BY PASSWORD password | 権限を付与するユーザーにパスワードを指定します。ここでのパスワードは暗号文であり、直接 mysql.user テーブルに保存されます。 |
| WITH GRANT OPTION | 権限の再付与を許可するかどうか、および権限の取り消し時のカスケードを許可するかどうかを指定します。 |
| role_name | ロールの名前を指定します。 |
| WITH ADMIN OPTION | ロールの権限の再付与を許可するかどうか、および権限の取り消し時のカスケードを許可するかどうかを指定します。 |
object_type
注意
object_type 句を使用する際は、指定されたオブジェクトが実際に対応するタイプであることを確認する必要があります。そうでない場合、構文エラーが発生します。
TABLE:権限が適用されるオブジェクトのタイプがテーブルであることを示します。FUNCTION:権限が適用されるオブジェクトのタイプが関数であることを示します。PROCEDURE:権限が適用されるオブジェクトのタイプがストアドプロシージャであることを示します。CATALOG:権限が適用されるオブジェクトのタイプがカタログであることを示します。説明
OceanBaseデータベースV4.3.5では、権限が適用されるオブジェクトのタイプは、V4.3.5 BP2バージョンから
CATALOGが導入されました。
例:
user001にtestデータベース内のすべてのオブジェクトに対するSELECT権限を付与します。指定されたオブジェクトが指定されたタイプではないため、エラーが報告されます。GRANT SELECT ON TABLE test.* TO user001;実行結果は次のとおりです:
ERROR 1144 (42000): Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be useduser001にtestデータベース内のテーブルtbl1に対するSELECT権限を付与します。GRANT SELECT ON TABLE test.tbl1 TO user001;user002にtestデータベース内の関数calculate_salaryの実行権限を付与します。GRANT EXECUTE ON FUNCTION test.calculate_salary TO user002;user003にtestデータベース内のストアドプロシージャpro_generate_dataの実行権限を付与します。GRANT EXECUTE ON PROCEDURE test.pro_generate_data TO user003;user004にカタログのオブジェクトtest_odps_catalogに対するSELECTおよびUSE CATALOG権限を付与します。GRANT SELECT, USE CATALOG ON CATALOG test_odps_catalog TO user004 WITH GRANT OPTION;
例
例1:オブジェクトに権限を付与する
既存のユーザー
user1にデータベースdb1のCREATE VIEW権限を付与し、他のユーザーに同じ権限を再付与できるように設定します。GRANT CREATE VIEW ON db1.* TO user1 WITH GRANT OPTION;既存のユーザー
user1にデータベースdb1のCREATE権限を付与し、user1のパスワードを変更します。GRANT CREATE ON db1.* TO user1 IDENTIFIED by '********';実行後に
mysql.userテーブルのuser1ユーザーのパスワードを確認すると、最新に設定されたパスワードに更新されていることがわかります。存在しないユーザー
user2にデータベースdb1のCREATE権限を付与し、user2にパスワードを設定します。GRANT CREATE ON db1.* TO user2 IDENTIFIED by '********';既存のユーザー
user001にデータベースtest内のテーブルtbl1の列col1に対するSELECT権限を付与します。GRANT SELECT(col1) ON test.tbl1 TO user001;ユーザー
user005にグローバルレベルのCREATE CATALOGおよびUSE CATALOG権限を付与します。GRANT CREATE CATALOG, USE CATALOG ON *.* TO user004 WITH GRANT OPTION;
例2:ロールをユーザーまたは別のロールに付与する
ロール
role001の権限をロールrole002に付与し、再付与を許可します。GRANT role001 TO role002 WITH ADMIN OPTION;ロール
role001の権限をユーザーuser001に付与し、再付与を許可します。GRANT role001 TO user001 WITH ADMIN OPTION;
関連ドキュメント
- ユーザーに権限を付与する操作については、権限の付与を参照してください。
- ユーザー権限を確認する操作については、ユーザー権限の確認を参照してください。
mysql.userテーブルから作成されたユーザー情報を確認できます。mysql.userテーブルの詳細については、mysql.userを参照してください。- ロールに権限の追加
- ロールのユーザーまたはロールへの付与
- ロールの有効化
- 間接的な権限付与