説明
このステートメントは、ユーザーまたはロールに以前付与された権限を取り消すか、ユーザーまたはロール内のロールを取り消すために使用します。
使用上の制限と注意事項
- 権限の取り消し操作は連鎖しません。例えば、ユーザー
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;