日本語PDF

REVOKE

目的

REVOKE文を使用すると、次の操作を実行できます。

  • ユーザーおよびロールからのシステム権限の取消し

  • ユーザー、ロール、およびプログラム・ユニットからのロールの取消し。

  • ユーザーまたはロールからの特定のオブジェクトに対するオブジェクト権限の取消し

Oracle Automatic Storage Managementのノート

AS SYSASMとして認証されたユーザーは、この文を使用して、現行のノードのOracle ASMパスワード・ファイル内のユーザーからシステム権限SYSASMSYSOPERおよびSYSDBAを取り消すことができます。

エディション化可能なオブジェクトのノート:

エディション化可能なオブジェクトからオブジェクト権限を取り消すREVOKE操作を実行すると、オブジェクトが現行のエディションで実体化されます。エディションおよびエディション化可能なオブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

関連項目:

  • システム権限およびロールの付与については、「GRANT」を参照してください。

  • それぞれのオブジェクト型に対するオブジェクト権限の詳細は、表18-2を参照してください。

前提条件

システム権限を取り消すには、Admin Option付きの権限が必要です。なお、GRANT ANY PRIVILEGEシステム権限を持っている場合は、権限を自由に取り消すことができます。

ユーザーのロールまたは別のロールを取り消すには、ADMIN OPTIONを使用してロールを直接付与するか、または付与するロールが自分で作成したロールである必要があります。なお、GRANT ANY ROLEシステム権限を持っている場合は、ロールを自由に取り消すことができます。

プログラム・ユニットのロールを取り消すには、ユーザーSYSまたはプログラム・ユニットのスキーマ所有者である必要があります。

オブジェクト権限を取り消すには、次のいずれかの条件が満たされている必要があります。

  • 以前にそのユーザーまたはロールにそのオブジェクト権限を付与した。

  • GRANT ANY OBJECT PRIVILEGEシステム権限を保有している。この場合は、オブジェクト所有者によって付与されたか、この所有者にかわってGRANT ANY OBJECT PRIVILEGEを持つユーザーによって付与されたあらゆるオブジェクト権限を取り消すことができます。ただし、With Grant Optionによって付与されたオブジェクト権限を取り消すことはできません。

REVOKE文によって取り消すことができる権限およびロールは、GRANT文によって直接付与されているものにかぎられます。この句では、次の権限を取り消すことはできません。

  • 取消し側に付与されていない権限またはロール

  • オペレーティング・システムを介して付与されているロールまたはオブジェクト権限

  • ロールを介して取消し側に付与されている権限またはロール

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。

構文

revokee_clause::=

on_object_clause::=

revoke_roles_from_programs::=

セマンティクス

revoke_system_privileges

システム権限を取り消すには、次の句を使用します。

system_privilege

取り消すシステム権限を指定します。システム権限のリストは、表18-1を参照してください。

ユーザーのシステム権限を取り消す場合、ユーザーの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、このユーザーはその権限を使用できなくなります。

ロールのシステム権限を取り消す場合、ロールの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、そのロールが使用可能となっている場合でも、この権限は使用できません。また、そのロールが付与されている他のユーザーは、ロールを使用可能にしても、その権限を使用できなくなります。

PUBLICのシステム権限を取り消す場合、PUBLICを介して権限を付与されている各ユーザーの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、ユーザーは権限を使用できなくなります。ただし、直接またはロールを介して権限が付与されているユーザーからは、権限を取り消すことはできません。

Oracle Databaseには、すべてのシステム権限を一度に指定できるショートカットがあります。ALL PRIVILEGESを指定すると、表18-1に示すすべてのシステム権限を取り消すことができます。

システム権限の取消しの制限事項

取り消す権限のリストにシステム権限を指定できるのは1回のみです。

role

取り消すロールを指定します。

ユーザーからロールを取り消すと、ユーザーによるロールの使用が禁止されます。そのロールが使用可能となっている場合に、ロールの権限ドメインの権限が使用可能な場合はその権限を使用できます。ただし、ユーザーが後からロールを使用可能にできません。

他のロールからロールを取り消すと、取消し側ロールの権限ドメインから、取り消されたロールの権限ドメインが削除されます。取り消されたロールの権限を付与され、そのロールの権限が使用可能になっているユーザーは、そのロールの権限が使用可能な間は、取り消されたロールの権限ドメインの権限を引き続き使用できます。ただし、取り消された権限を付与されていても、ロールの取消し操作の後でそれを使用可能にしたユーザーは、取り消されたロールの権限ドメインの権限を使用できません。

PUBLICのロールを取り消すと、PUBLICを介してロールが付与されているすべてのユーザーに対して、そのロールが使用禁止にされます。そのロールを使用可能としているユーザーは、権限ドメインの権限が使用可能であるかぎり、権限ドメインでその権限を引き続き使用できます。ただし、ユーザーが後からロールを使用可能にすることはできません。直接またはロールを介して権限が付与されているユーザーからは、ロールを取り消すことはできません。

システム・ロールの取消しの制限事項

取り消すロールのリストにシステム・ロールを指定できるのは1回のみです。事前定義されているロールの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

revokee_clause

revokee_clauseを使用すると、システム権限、ロールまたはオブジェクト権限を取り消すユーザーまたはロールを指定できます。

PUBLIC

PUBLICを指定すると、すべてのユーザーから権限またはロールを取り消すことができます。

revoke_object_privileges

オブジェクト権限を取り消すには、次の句を使用します。

object_privilege

取り消すオブジェクト権限を指定します。表18-2に、適用するオブジェクトのタイプによってカテゴリ分けされたオブジェクト権限を示します。

ノート:

操作は権限によって許可されます。権限を取り消すと、取り消されたユーザーは、その操作を実行できなくなります。ただし、複数のユーザーが、同じ権限を同一ユーザー、ロールまたはPUBLICに対して付与している場合があります。権限受領者の権限ドメインの権限を取り消す場合、すべての権限付与者が権限を取り消す必要があります。権限を取り消さない権限付与者が1人でもいれば、権限受領者は引き続きその権限を使用できます。

ユーザーのオブジェクト権限を取り消すと、ユーザーの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、このユーザーはその権限を使用できなくなります。

  • ユーザーがその権限を他のユーザーまたはロールに付与している場合、他のユーザーまたはロールの権限も取り消されます。

  • 権限を使用するSQL文を記述したプロシージャ、ファンクションまたはパッケージが定義されているスキーマを持つユーザーのオブジェクト権限を取り消すと、それらのプロシージャ、ファンクションまたはパッケージは実行できなくなります。

  • そのユーザーのスキーマにオブジェクトのビューが含まれる場合、ビューは無効になります。

  • 参照整合性制約の定義権限を使用したユーザーのREFERENCESオブジェクト権限を取り消す場合、CASCADE CONSTRAINTS句も指定する必要があります。

ロールのオブジェクト権限を取り消すと、ロールの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、そのロールが使用可能となっている場合でも、この権限は使用できません。ロールが付与されている他のユーザーは、ロールを使用可能にした場合でも、権限を使用できなくなります。

PUBLICのオブジェクト権限を取り消すと、PUBLICを介して権限を付与されている各ユーザーの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、それらのすべてのユーザーは、その権限を使用できなくなります。ただし、直接またはロールを介して権限が付与されているユーザーからは、権限を取り消すことはできません。

ALL [PRIVILEGES]

ALLを指定すると、ユーザーまたはロールに付与されているすべてのオブジェクト権限を取り消すことができます。(キーワードPRIVILEGESはセマンティクスを明確にするためのものであり、指定は任意です。)

オブジェクトに権限が付与されていない場合、処理は行われず、エラーも戻りません。

オブジェクト権限の取消しの制限事項

取り消す権限のリストに権限を指定できるのは1回のみです。FROM句にユーザー、ロールまたはPUBLICを指定できるのは1回のみです。

CASCADE CONSTRAINTS

この句は、REFERENCES権限またはALL [PRIVILEGES]を取り消すときにのみ適用されます。取消し側でREFERENCES権限(ALL [PRIVILEGES]を付与して明示的または暗黙的に付与された権限)を使用して定義した参照整合性制約を削除します。

FORCE

FORCEを指定すると、表または型に依存するユーザー定義型オブジェクトで、EXECUTEオブジェクト権限を取り消すことができます。表に依存するユーザー定義型オブジェクトでは、FORCEを使用してEXECUTEオブジェクト権限を取り消します。

FORCEを指定した場合、すべての権限が取り消され、すべての依存オブジェクトにINVALIDのマークが付けられ、依存表のデータにはアクセスできなくなります。また、すべての依存ファンクション索引にUNUSABLEのマークが付けられます。必要な型の権限を再付与した場合、表に対して再度妥当性チェックが行われます。

関連項目:

型依存性およびユーザー定義オブジェクト権限の詳細は、『Oracle Database概要』を参照してください。

on_object_clause

on_object_clauseを指定すると、権限を取り消すオブジェクトを識別できます。

object

オブジェクト権限を取り消すオブジェクトを指定します。取り消すことができるオブジェクトは次のとおりです。

  • 表、ビュー、順序、プロシージャ、ストアド・ファンクション、パッケージまたはマテリアライズド・ビュー

  • 表、ビュー、順序、プロシージャ、ストアド・ファンクション、パッケージ、マテリアライズド・ビューまたはユーザー定義型に対するシノニム

  • ライブラリ、索引タイプまたはユーザー定義演算子

オブジェクトをschemaで修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあるとみなされます。

システム権限のGrant Optionの有無にかかわらず、READまたはSELECTオブジェクト権限をマテリアライズド・ビューまたは表を含むマテリアライズド・ビューから取り消すと、そのマテリアライズド・ビューは無効になります。

システム権限のGRANT OPTIONの有無にかかわらず、マテリアライズド・ビューのマスター表のいずれかにおけるREADまたはSELECTオブジェクト権限を取り消すと、そのマテリアライズド・ビューとそれに含まれる表の両方またはマテリアライズド・ビューが無効になります。

ON USER

権限を取り消すデータベース・ユーザーを指定します。

ON DIRECTORY

権限を取り消すディレクトリ・オブジェクトの名前を指定します。directory_nameはスキーマ名で修飾できません。

ON EDITION

USEオブジェクト権限を取り消すエディションの名前を指定します。edition_nameはスキーマ名で修飾できません。

ON MINING MODEL

権限を取り消すマイニング・モデルの名前を指定します。mining_model_nameschemaで修飾しなかった場合、そのマイニング・モデルは自分のスキーマ内にあるとみなされます。

ON JAVA SOURCE | RESOURCE

権限を取り消すJavaソースまたはリソース・スキーマ・オブジェクトの名前を指定します。objectschemaで修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあるとみなされます。

ON SQL TRANSLATION PROFILE

権限を取り消すSQL翻訳プロファイルの名前を指定します。profileschemaで修飾しなかった場合、そのプロファイルは自分のスキーマ内にあるとみなされます。

revoke_roles_from_programs

この句を使用して、コードに基づくアクセス制御ロール(CBAC)をプログラム・ユニットから取り消すことができます。

role

取り消すロールを指定します。

ALL

ALLを指定すると、プログラム・ユニットに付与されたすべてのロールを取り消すことができます。

program_unit

ロールを取り消すプログラム・ユニットを指定します。PL/SQLファンクション、プロシージャ、またはパッケージを指定できます。schemaを指定しない場合、ファンクション、プロシージャ、またはパッケージは独自のスキーマにあると見なされます。

関連項目:

CBACロールのプログラム・ユニットからの取消しの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

CONTAINER句

現在のコンテナがプラガブル・データベース(PDB)である場合:

  • CONTAINER = CURRENTを指定すると、ローカル・ユーザー、共通ユーザー、ローカル・ロールまたは共通ロールにローカルに付与されているシステム権限、オブジェクト権限またはロールを取り消すことができます。現在のPDBでのみ、その権限またはロールがそのユーザーまたはロールから取り消されます。この句は、CONTAINER = ALLで付与された権限を取り消しません。

現在のコンテナがルートである場合:

  • CONTAINER = CURRENTを指定すると、共通ユーザーまたは共通ロールにローカルに付与されているシステム権限、オブジェクト権限またはロールを取り消すことができます。ルートのユーザーまたはロールからのみ、権限またはロールが取り消されます。この句は、CONTAINER = ALLで付与された権限を取り消しません。

  • CONTAINER = ALLを指定すると、共通ユーザーまたは共通ロールに共通に付与されているシステム権限、共通オブジェクトに対するオブジェクト権限またはロールを取り消すことができます。CDB全体で、その権限またはロールがそのユーザーまたはロールから取り消されます。この句では、CONTAINER = ALLで付与された権限のみを、指定した共通ユーザーまたは共通ロールから取り消すことができます。CONTAINER = CURRENTで付与された権限は、この句では取り消されません。ただし、取消し対象の共通に付与されている権限に依存する、ローカルに付与されている権限も取り消されます。

この句を省略すると、CONTAINER = CURRENTがデフォルトになります。

ユーザーからのシステム権限の取消し: 例

次の文は、ユーザーhrおよびoeからDROP ANY TABLEシステム権限を取り消します。

REVOKE DROP ANY TABLE 
    FROM hr, oe; 

この結果、hrおよびoeは他のユーザーのスキーマに定義されている表を削除できなくなります。

ユーザーからのロールの取消し: 例

次の文は、ユーザーshからロールdw_managerを取り消します。

REVOKE dw_manager 
    FROM sh; 

この結果、shユーザーはdw_managerロールを使用可能にできなくなります。

ロールからのシステム権限の取消し: 例

次の文は、dw_managerロールからCREATE TABLESPACEシステム権限を取り消します。

REVOKE CREATE TABLESPACE 
   FROM dw_manager; 

ロールdw_managerを使用可能にしても、ユーザーは表領域を作成できません。

ロールからのロールの取消し: 例

次の文は、ロールdw_managerからロールdw_userを取り消します。

REVOKE dw_user
  FROM dw_manager; 

この結果、dw_userロールの権限はdw_managerに付与されなくなります。

ユーザーからのオブジェクト権限の取消し: 例

次の文を使用すると、表ordersに対するDELETEINSERTREADSELECTおよびUPDATE権限をユーザーhrに付与できます。

GRANT ALL 
   ON orders TO hr; 

次の文は、ユーザーhrから表ordersに対するDELETE権限を取り消します。

REVOKE DELETE 
   ON orders FROM hr; 

ユーザーからのすべてのオブジェクト権限の取消し: 例

次の文は、hrに付与したordersに対する残りの権限を取り消します。

REVOKE ALL 
   ON orders FROM hr; 

PUBLICからのオブジェクト権限の取消し: 例

ロールPUBLICに権限を付与すると、ビューemp_details_viewに対するSELECTおよびUPDATE権限をすべてのユーザーに付与できます。

GRANT SELECT, UPDATE 
    ON emp_details_view TO public; 

次の文は、すべてのユーザーからemp_details_viewに対するUPDATE権限を取り消します。

REVOKE UPDATE 
    ON emp_details_view FROM public;

ユーザーは、emp_details_viewビューへの問合せはできますが、更新はできなくなります。ただし、emp_details_viewに対するUPDATE権限も任意のユーザーに直接またはロールを介して付与している場合は、これらのユーザーはその権限を保持します。

ユーザーからのユーザーに対するオブジェクト権限の取消し: 例

次の文を使用すると、ユーザーshに対するINHERIT PRIVILEGES権限をユーザーhrに付与できます。

GRANT INHERIT PRIVILEGES ON USER sh TO hr;

ユーザーshに対するINHERIT PRIVILEGES権限をユーザーhrから取り消すには、次の文を発行します。

REVOKE INHERIT PRIVILEGES ON USER sh FROM hr;

ユーザーからの順序に対するオブジェクト権限の取消し: 例

次の文を使用すると、スキーマhrdepartments_seq順序に対するSELECT権限をユーザーoeに付与できます。

GRANT SELECT 
    ON hr.departments_seq TO oe; 

次の文は、oeからdepartments_seqに対するSELECT権限を取り消します。

REVOKE SELECT 
    ON hr.departments_seq FROM oe; 

ただし、ユーザーhrdepartmentsに対するSELECT権限をshに付与している場合、shは、hrからの権限付与によってdepartmentsを使用できます。

CASCADE CONSTRAINTSによるオブジェクト権限の取消し: 例

次の文を使用すると、スキーマhremployees表に対する権限REFERENCESおよびUPDATEoeに付与できます。

GRANT REFERENCES, UPDATE 
    ON hr.employees TO oe; 

ユーザーoeは、REFERENCES権限を使用して、hrスキーマ内のemployees表を参照するdependent表の制約を定義できます。

CREATE TABLE dependent 
(dependno   NUMBER, 
 dependname VARCHAR2(10), 
 employee   NUMBER                   
    CONSTRAINT in_emp REFERENCES hr.employees(employee_id) ); 

CASCADE CONSTRAINTS句を指定した次の文を発行することによって、oehr.employeesに対するREFERENCES権限を取り消すことができます。

REVOKE REFERENCES 
    ON hr.employees 
    FROM oe 
    CASCADE CONSTRAINTS; 

oehr.employeesに対するREFERENCES権限を取り消した場合、oeは制約を定義する権限が必要になるため、in_emp制約が自動的に削除されます。

ただし、oeが他のユーザーからhr.employeesに対するREFERENCES権限を付与されている場合は、その制約は削除されません。他のユーザーから権限付与されたため、oeは制約に対して必要な権限を保持しています。

ユーザーからのディレクトリに対するオブジェクト権限の取消し: 例

次の文を発行することによって、hrからディレクトリbfile_dirに対するREADオブジェクト権限を取り消すことができます。

REVOKE READ ON DIRECTORY bfile_dir FROM hr;

GRANT ANY OBJECT PRIVILEGEを使用する操作の取消し: 例

データベース管理者が、GRANT ANY OBJECT PRIVILEGEをユーザーshに付与したとします。ユーザーhrが、employees表に対するUPDATE権限をユーザーoeに付与します。

CONNECT hr
GRANT UPDATE ON employees TO oe WITH GRANT OPTION;

これによって、オブジェクト権限を別のユーザーに付与する権限がユーザーoeに付与されます。

CONNECT oe
GRANT UPDATE ON hr.employees TO pm;

oeにはhrによって権限が与えられたため、GRANT ANY OBJECT PRIVILEGEが付与されているユーザーshは、ユーザーhrにかわってユーザーoeのUPDATE権限を取り消すことができます。

CONNECT sh
REVOKE UPDATE ON hr.employees FROM oe;

pmに権限を付与したのがオブジェクトの所有者(hr)、ユーザーshまたはGRANT ANY OBJECT PRIVILEGEを持つ他のユーザーではなく、ユーザーoeであったため、ユーザーshは、ユーザーpmのUPDATE権限を明示的に取り消すことはできません。ただし、前述の文は、連鎖的な取消しを行い、取り消された権限に依存するすべての権限を取り消します。そのため、pmのオブジェクト権限も暗黙的に取り消されます。