説明
このステートメントは、以前ユーザーまたはロールに付与された権限、またはユーザーまたはロール内のロールを取り消すために使用します。
使用上の制限と注意事項
- 権限の取り消し操作は連鎖しません。例えば、ユーザー
user1がuser2に特定の権限を付与した場合、user1の権限を取り消しても、user2の対応する権限は同時に取り消されません。 - 権限を取り消すユーザーまたはロールは存在していなければならず、存在しない場合はエラーが発生します。
- システム変数
mandatory_rolesに含まれるロールは取り消せません。 REVOKEステートメントの実行は、現在ログインしているユーザーに対して即時に有効になります。
権限要件
特定の権限レベルの権限を取り消す場合:ユーザーは取り消す権限を持っている必要があります(例えば、
user1がuser2のテーブルt1に対するSELECT権限を取り消す場合、user1はテーブルt1に対するSELECT権限を持っている必要があります)、さらにGRANT OPTION権限も持っている必要があります。すべての権限と付与オプションを取り消す場合:
ALL PRIVILEGESとGRANT OPTION権限を取り消す場合、現在のユーザーはグローバルなGRANT OPTION権限、または権限テーブルに対するUPDATEおよびDELETE権限を持っている必要があります。ユーザーまたはロール内のロールの権限を取り消す場合:ロールを取り消す場合、現在のユーザーは取り消すロールを持っている必要があり、さらに
ADMIN OPTION権限も持っている必要があります。
OceanBaseデータベースの権限の詳細については、MySQLモードの権限分類を参照してください。
構文
ユーザーまたはロールの対象権限を取り消す
revoke_stmt1:
REVOKE grant_privileges ON priv_level FROM user_or_role_list;
revoke_stmt2:
REVOKE ALL [PRIVILEGES], GRANT OPTION FROM user_or_role_list;
revoke_stmt3:
REVOKE [IF EXISTS] role_name_list FROM user_or_role_list [IGNORE UNKNOWN USER];
grant_privileges:
priv_type_list
| ALL [PRIVILEGES]
priv_type_list:
priv_type[(column_name_list)] [, priv_type[(column_name_list)] ...]
column_name_list:
column_name [, column_name ...]
priv_level:
*.*
| db_name.*
| db_name.table_name
| CATALOG external_catalog_name
| LOCATION location_name
user_or_role_list:
user_or_role [, user_or_role ...]
user_or_role:
user_name | role_name
role_name_list:
role_name [, role_name ...]
パラメータの説明
パラメータ |
説明 |
|---|---|
| revoke_stmt1 | ユーザーまたはロールから特定の権限レベルの権限を取り消すSQLステートメント。 |
| revoke_stmt2 | ユーザーまたはロールからすべての権限と付与オプションを取り消すSQLステートメント。 |
| revoke_stmt3 | ユーザーまたはロールからロールを取り消すSQLステートメント。 |
| grant_privileges | 取り消す権限タイプを指定します。特定の権限タイプのリスト、またはすべての権限(GRANT OPTION を除く)を指定できます。 |
| priv_type_list | 具体の権限タイプのリストを表します。複数の権限を同時に取り消す場合、権限間は半角カンマ(,)で区切ります。 |
| priv_type | 具体の権限タイプを表します。具体的な権限タイプの詳細については、MySQLモードの権限分類を参照してください。注意:PROXYパラメータは現在のバージョンでは構文のみ記録され、機能は有効になりません。 |
| column_name_list | オプションです。テーブル内の列レベルの権限を取り消すリストです。指定しない場合、テーブルまたはオブジェクト全体の権限を取り消します。 |
| ALL [PRIVILEGES] | GRANT OPTION を除くすべての権限を表します。 |
| priv_level | 権限を付与するレベルを指定します。権限レベルの具体的な取り得る値については、後述の priv_level を参照してください。 |
| user_or_role_list | 権限を取り消すユーザーまたはロールのリストを指定します。複数のユーザーまたはロールの権限を同時に取り消す場合、ユーザー名とロール名は半角カンマ(,)で区切ります。 |
| user_name | ユーザー名を表します。 |
| role_name | ロール名を表します。 |
| IF EXISTS | オプションです。取り消す対象のロールが存在しない場合、IF EXISTS オプションを使用すると、システムはエラーメッセージではなく警告を発します。 |
| role_name_list | 権限を取り消すロールのリストを指定します。複数のロールの権限を同時に取り消す場合、ロール名は半角カンマ(,)で区切ります。 |
| IGNORE UNKNOWN USER | オプションです。被権限者(ユーザーまたはロール)が存在しない場合、IGNORE UNKNOWN USER オプションを使用すると、システムはエラーメッセージではなく警告を発します。 |
| proxy | 現在のバージョンではこのキーワードの構文のみ記録され、機能は有効ではありません。 |
priv_level
*.*:すべてのデータベース内のすべてのテーブルを表します。例:
ユーザー
user001およびuser002からグローバルなSELECTおよびINSERT権限を取り消します。REVOKE SELECT, INSERT ON *.* FROM user001, user002;db_name.*:指定したデータベース内のすべてのテーブルを表します。db_nameは指定したデータベースのデータベース名を表します。例:
ユーザー
user003からtestデータベース内のすべてのテーブルへの挿入権限を取り消します。REVOKE INSERT ON test.* FROM user003;db_name.table_name:特定のデータベース内の特定のテーブルを表します。例:
ユーザー
user003からtestデータベース内のtbl2テーブルに対するSELECT権限を取り消します。REVOKE SELECT ON test.tbl2 FROM user003;CATALOG external_catalog_name:Catalog内のディレクトリを表します。例:
ユーザー
user004から Catalogのオブジェクトtest_odps_catalogに対するUSE CATALOG権限を取り消します。REVOKE USE CATALOG ON CATALOG test_odps_catalog FROM user004;LOCATION location_name:Locationオブジェクトを表します。説明
OceanBaseデータベースV4.4.x系では、
REVOKEステートメントはV4.4.1バージョンからLOCATIONパラメータおよび対応するREADとWRITE権限をサポートしています。例:
ユーザー
user005から、Locationのオブジェクトtest_location_localに対するREAD権限を取り消します。REVOKE READ ON LOCATION test_location_local FROM user005;
例
例1:オブジェクト権限の取り消し
test_user001 ユーザーの SELECT 権限を取り消すことで、ALL PRIVILEGES がどのような権限を付与したかを確認します。
ユーザー
test_user001にALL PRIVILEGES権限を付与します。GRANT ALL PRIVILEGES ON *.* TO test_user001;ユーザー
test_user001が持つ権限を確認します。SHOW GRANTS FOR test_user001;実行結果は次のとおりです:
+-----------------------------------------------+ | Grants for test_user001@% | +-----------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'test_user001' | +-----------------------------------------------+ 1 row in setユーザー
test_user001のSELECT権限を取り消します。REVOKE SELECT ON *.* FROM test_user001;再度ユーザー
test_user001が持つ権限を確認します。SHOW GRANTS FOR test_user001;実行結果は次のとおりです:
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for test_user001@% | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT ALTER, CREATE, CREATE USER, DELETE, DROP, INSERT, UPDATE, INDEX, CREATE VIEW, SHOW VIEW, SHOW DATABASES, SUPER, PROCESS, CREATE_SYNONYM, REFERENCES, FILE, ALTER TENANT, ALTER SYSTEM, CREATE RESOURCE POOL, CREATE RESOURCE UNIT, REPLICATION SLAVE, REPLICATION CLIENT, DROP DATABASE LINK, CREATE DATABASE LINK, EXECUTE, ALTER ROUTINE, CREATE ROUTINE, CREATE TABLESPACE, SHUTDOWN, RELOAD, CREATE ROLE, DROP ROLE, TRIGGER ON *.* TO 'test_user001' | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set
例2:ユーザーのすべての権限の取り消し
ユーザー test_user002 のすべての権限を取り消します。
REVOKE ALL PRIVILEGES, GRANT OPTION FROM test_user002;
例3:ユーザーまたはロール内のロールの取り消し
ロール
role002内のロールrole001を取り消します。REVOKE role001 FROM role002;ユーザー
user001内のロールrole001を取り消します。REVOKE role001 FROM user001;