説明
このステートメントは、指定されたユーザーまたはロールに対応する権限を付与するか、ロールをユーザーまたはロールに付与するために使用します。
使用上の制限と注意事項
ループ状の 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 認証プラグインのみをサポートしています。 |
| 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:権限の対象がカタログであることを示します。LOCATION:権限の対象がロケーションであることを示します。ユーザーにロケーションオブジェクトに対する権限を付与できるものは以下のとおりです:READ:ロケーションオブジェクトに対する読み取り権限を示します。WRITE:ロケーションオブジェクトに対する書き込み権限を示します。
説明
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にカタログオブジェクトtest_odps_catalogに対するSELECTおよびUSE CATALOG権限を付与します。GRANT SELECT, USE CATALOG ON CATALOG test_odps_catalog TO user004 WITH GRANT OPTION;user005にロケーションオブジェクト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を参照してください。 - ロールへの権限の追加
- ロールのユーザーまたは別のロールへの付与
- ロールの有効化
- 間接的な権限付与