説明
このステートメントは、指定されたユーザーまたはロールに対して権限を付与するか、ロールをユーザーまたは別のロールに付与するために使用します。
使用制限と注意事項
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];
priv_type:
READ
| WRITE
column_name_list:
column_name [, column_name ...]
object_type:
TABLE
| FUNCTION
| PROCEDURE
| CATALOG
| LOCATION
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 と caching_sha2_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:権限の適用対象がCatalogであることを示します。LOCATION:権限の適用対象がLocationであることを示します。ユーザーにLocationオブジェクトに対する権限を付与できるものは以下のとおりです:READ:Locationオブジェクトの読み取り権限を示します。WRITE:Locationオブジェクトの書き込み権限を示します。
説明
OceanBaseデータベースV4.4.x系では、
GRANTステートメントはV4.4.1バージョンからLOCATIONパラメータおよび対応するREADとWRITE権限をサポートしています。
例:
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に Catalogオブジェクトtest_odps_catalogに対するSELECTおよびUSE CATALOG権限を付与します。GRANT SELECT, USE CATALOG ON CATALOG test_odps_catalog TO user004 WITH GRANT OPTION;user005に Locationオブジェクトtest_location_localの読み取り権限を付与します。GRANT READ ON LOCATION test_location_local TO user005 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を参照してください。 - ロールへの権限の追加
- ロールのユーザーまたは別のロールへの付与
- ロールの有効化
- 間接的な権限付与