REVOKE
目的
-
ユーザーおよびロールからのシステム権限の取消し
-
ユーザー、ロール、およびプログラム・ユニットからのロールの取消し。
-
ユーザーまたはロールからの特定のオブジェクトに対するオブジェクト権限の取消し
Oracle Automatic Storage Managementのノート
AS
SYSASM
として認証されたユーザーは、この文を使用して、現行のノードのOracle ASMパスワード・ファイル内のユーザーからシステム権限SYSASM
、SYSOPER
およびSYSDBA
を取り消すことができます。
エディション化可能なオブジェクトのノート:
エディション化可能なオブジェクトからオブジェクト権限を取り消すREVOKE
操作を実行すると、オブジェクトが現行のエディションで実体化されます。エディションおよびエディション化可能なオブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。
前提条件
システム権限を取り消すには、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
を指定する場合は、現在のコンテナがルートである必要があります。
構文
revoke_object_privileges::=
revoke_roles_from_programs::=
program_unit::=
セマンティクス
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
はセマンティクスを明確にするためのものであり、指定は任意です。)
オブジェクトに権限が付与されていない場合、処理は行われず、エラーも戻りません。
オブジェクト権限の取消しの制限事項
取り消す権限のリストに権限を指定できるのは1回のみです。FROM
句にユーザー、ロールまたはPUBLIC
を指定できるのは1回のみです。
関連項目:
「ユーザーからのオブジェクト権限の取消し: 例」、「PUBLICからのすべてのオブジェクト権限の取消し: 例」および「ユーザーからのすべてのオブジェクト権限の取消し: 例」を参照してください。
この句は、REFERENCES
権限またはALL
[PRIVILEGES
]を取り消すときにのみ適用されます。取消し側でREFERENCES
権限(ALL
[PRIVILEGES
]を付与して明示的または暗黙的に付与された権限)を使用して定義した参照整合性制約を削除します。
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
はスキーマ名で修飾できません。
関連項目:
「CREATE DIRECTORY」および「ユーザーからのディレクトリに対するオブジェクト権限の取消し: 例」を参照してください。
ON EDITION
USE
オブジェクト権限を取り消すエディションの名前を指定します。edition_name
はスキーマ名で修飾できません。
ON MINING MODEL
権限を取り消すマイニング・モデルの名前を指定します。mining_model_name
をschema
で修飾しなかった場合、そのマイニング・モデルは自分のスキーマ内にあるとみなされます。
ON JAVA SOURCE | RESOURCE
権限を取り消すJavaソースまたはリソース・スキーマ・オブジェクトの名前を指定します。object
をschema
で修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあるとみなされます。
ON SQL TRANSLATION PROFILE
権限を取り消すSQL翻訳プロファイルの名前を指定します。profile
をschema
で修飾しなかった場合、そのプロファイルは自分のスキーマ内にあるとみなされます。
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
に対するDELETE
、INSERT
、READ
、SELECT
および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;
ユーザーからの順序に対するオブジェクト権限の取消し: 例
次の文を使用すると、スキーマhr
のdepartments_seq
順序に対するSELECT
権限をユーザーoe
に付与できます。
GRANT SELECT ON hr.departments_seq TO oe;
次の文は、oe
からdepartments_seq
に対するSELECT
権限を取り消します。
REVOKE SELECT ON hr.departments_seq FROM oe;
ただし、ユーザーhr
がdepartments
に対するSELECT
権限をsh
に付与している場合、sh
は、hr
からの権限付与によってdepartments
を使用できます。
CASCADE CONSTRAINTSによるオブジェクト権限の取消し: 例
次の文を使用すると、スキーマhr
のemployees
表に対する権限REFERENCES
およびUPDATE
をoe
に付与できます。
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
句を指定した次の文を発行することによって、oe
のhr.employees
に対するREFERENCES
権限を取り消すことができます。
REVOKE REFERENCES ON hr.employees FROM oe CASCADE CONSTRAINTS;
oe
のhr.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
のオブジェクト権限も暗黙的に取り消されます。