アクセス権限を取り消します。
構文
REVOKE { { SELECT | INSERT | UPDATE | DELETE | REFERENCES }
[,...] | ALL [ PRIVILEGES ] }
ON tablename
FROM { username | groupname | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE { SELECT | ALL [ PRIVILEGES ] }
ON sequencename
FROM { username | groupname | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTION progname
( [ [ argmode ] [ argname ] argtype ] [, ...] )
FROM { username | groupname | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
ON PROCEDURE progname
[ ( [ [ argmode ] [ argname ] argtype ] [, ...] ) ]
FROM { username | groupname | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
ON PACKAGE packagename
FROM { username | groupname | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE role [, ...] FROM { username | groupname | PUBLIC }
[, ...]
[ CASCADE | RESTRICT ]
REVOKE { CONNECT | RESOURCE | DBA } [, ...]
FROM { username | groupname } [, ...]
REVOKE CREATE [ PUBLIC ] DATABASE LINK
FROM { username | groupname }
REVOKE DROP PUBLIC DATABASE LINK
FROM { username | groupname }
REVOKE EXEMPT ACCESS POLICY
FROM { username | groupname }
説明
REVOKE
コマンドを使用して、1 つ以上のロールに付与されている権限を取り消すことができます。 PUBLIC
キーワードは、暗黙的に定義されたすべてのロールグループを指します。
権限タイプの詳細については、GRANT
コマンドの説明をご参照ください。
ロールは、直接付与された権限、そのロールがメンバーである別のロールに付与された権限、および PUBLIC
に付与された権限を持つことにご注意ください。 たとえば、PUBLIC
から SELECT
権限を取り消した場合、すべてのロールがオブジェクトに対する SELECT
権限を失ったことを示すわけではありません。 SELECT 権限が直接付与されたロール、およびそのメンバーのロールは、引き続き SELECT 権限を持ちます。
付与オプションとともに、権限が付与されている場合、権限と付与オプションの両方が取り消されます。
付与オプションのある権限を持つユーザーが、その権限を他のユーザーに付与する場合、他のユーザーが保持する権限は依存権限と呼ばれます。 最初のユーザーから権限または付与オプションを取り消す必要があり、また依存権限が存在する場合は、CASCADE
を指定すると、依存権限も取り消すことができます。 指定しないと、取り消し操作は失敗します。 この再帰的な取り消しは、REVOKE
コマンドを実行するユーザーに繋がる一連のユーザーによって付与された権限にのみ影響します。 影響を受けるユーザーに、他のユーザーからも権限が付与されている場合は、その権限が保持される可能性があります。
CASCADE
オプションは、 Oracle データベースとは互換性がありません。 デフォルトでは、Oracle は依存権限をカスケードします。 ただし、Oracle と互換性のある
PolarDB データベースでは、明示的な CASCADE
キーワードが必要です。 指定しないと、REVOKE
コマンドは失敗します。
ロールのメンバーシップを取り消す場合は、ADMIN OPTION
の代わりに GRANT OPTION
を使用します。これらの動作は似ています。
注記
ユーザーは、自身が付与した権限のみを取り消すことができます。 たとえば、ユーザー A が、ユーザー B に付与オプションとともに権限を付与し、ユーザー B がユーザー
C に権限を付与した場合、ユーザー A は ユーザー C の権限を直接取り消すことはできません。代わりに、ユーザー A はユーザー C の付与オプションを取り消し、CASCADE
オプションを使用することで、ユーザー C の権限が取り消されます。別の例として、ユーザー A とユーザー B の両者が同じ権限をユーザー C に付与した場合、ユーザー
A は自分が与えた権限を取り消すことはできますが、ユーザー B によって付与された権限を取り消すことはできません。そのため、ユーザー A による権限の取り消し後も、ユーザー
C はユーザー B によって付与された権限を保持します。
他のユーザーに属するオブジェクトに対する権限を持たない、所有者ではないユーザーが REVOKE
コマンドを実行して、オブジェクトに対する権限を取り消そうとした場合、そのコマンドは失敗します。 取り消すことができる権限がある場合は、コマンドは続行されますが、ユーザーが付与オプションを持つ権限のみ取り消すことができます。
付与オプションを持たない場合、REVOKE ALL PRIVILEGES
文を実行すると、警告メッセージが発行されます。 他の SQL 文でも、コマンドで指定した権限に対する付与オプションがない場合、警告メッセージが発行されます。 このメカニズムはオブジェクト所有者にも適用されます。
ただし、所有者はすべての付与オプションを保持しているため、オブジェクト所有者に対しては警告メッセージは発行されません。
オブジェクト所有者に加え、オブジェクトを所有するロールのメンバー、またはオブジェクトに対して WITH GRANT OPTION
権限を保持するロールのメンバーも、REVOKE
を実行できます。 この場合、コマンドの結果は、オブジェクトを所有するロール、または WITH GRANT OPTION
権限を持つロールで実行した場合と同じになります。 たとえば、t1 テーブルが u1 ロールがメンバーである g1 ロールによって所有されている場合、u1 は g1
によって付与された t1 に対する権限を取り消すことができます。 u1 ロールと、g1 ロールの他のメンバーによって付与された両方の権限が取り消されます。
REVOKE
コマンドを実行するロールが、複数のロールチェーンを介して付与された権限を保持する場合、権限が取り消されるロールチェーンを特定することはできません。 このような場合は、SET ROLE
を使用して、REVOKE
コマンドを実行するロールを設定します。 そうしなければ、意図しない権限が取り消されるか、まったく取り消されないことになります。
ALTER ROLE
コマンドは、 パブリックまたはプライベートデータベースリンクの作成に必要なシステム権限を取り消す構文、またはきめ細かなアクセス制御ポリシー (DBMS_RLS)
の免除もサポートしています。 ALTER ROLE
コマンドは、それぞれの REVOKE
コマンドと機能的に同等で、Oracle データベースと互換性があります。
例
PUBLIC グループから emp テーブルに対する INSERT 権限を取り消します。
REVOKE INSERT ON emp FROM PUBLIC;
mary という名前のユーザーから salesemp ビューに対するすべての権限を取り消します。
REVOKE ALL PRIVILEGES ON salesemp FROM mary;
コマンドを実行するユーザーによって付与されたすべての権限が取り消されることにご注意ください。
joe という名前のユーザーから admins ロールのメンバーシップを取り消します。
REVOKE admins FROM joe;
ユーザー joe から CONNECT
権限を取り消します。
REVOKE CONNECT FROM joe;
ユーザー joe から CREATE DATABASE LINK
権限を取り消します。
REVOKE CREATE DATABASE LINK FROM joe;
ユーザー joe から EXEMPT ACCESS POLICY
権限を取り消します。
REVOKE EXEMPT ACCESS POLICY FROM joe;