アクセス権限を取り消します。

構文

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 コマンドを実行するロールを設定します。 そうしなければ、意図しない権限が取り消されるか、まったく取り消されないことになります。

Oracle と互換性のある PolarDB データベースの 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;