用途
ユーザーおよびロールからのシステム権限の取消し
ユーザーおよびロールからのロールの取消し
ユーザーまたはロールからの特定のオブジェクトに対するオブジェクト権限の取消し
Oracle Automatic Storage Managementの注意事項: AS
SYSASM
と認証されたユーザーは、この文を使用すると、システム権限SYSASM
、SYSOPER
およびSYSDBA
を、現行ノードのOracle ASMパスワード・ファイルのユーザーから取り消すことができます。
エディション化可能なオブジェクトの注意事項:
エディション化可能なオブジェクトからオブジェクト権限を取り消すREVOKE
操作を実行すると、オブジェクトが現行のエディションで実体化されます。エディションおよびエディション化可能なオブジェクトの詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。
前提条件
システム権限を取り消すには、Admin
Option
付きの権限が必要です。なお、GRANT
ANY
PRIVILEGE
システム権限を持っている場合は、権限を自由に取り消すことができます。
ロールを取り消すには、ADMIN
OPTION
付きのロールが必要です。なお、GRANT
ANY
ROLE
システム権限を持っている場合は、ロールを自由に取り消すことができます。
オブジェクト権限を取り消すには、次のいずれかの条件が満たされている必要があります。
以前にそのユーザーまたはロールにそのオブジェクト権限を付与した。
GRANT
ANY
OBJECT
PRIVILEGE
システム権限を保有している。この場合は、オブジェクト所有者によって付与されたか、この所有者にかわってGRANT
ANY
OBJECT
PRIVILEGE
を持つユーザーによって付与されたあらゆるオブジェクト権限を取り消すことができます。ただし、With
Grant
Option
によって付与されたオブジェクト権限を取り消すことはできません。
REVOKE
文によって取り消すことができる権限およびロールは、GRANT
文によって直接付与されているものにかぎられます。この句では、次の権限を取り消すことはできません。
取消し側に付与されていない権限またはロール
オペレーティング・システムを介して付与されているロールまたはオブジェクト権限
ロールを介して取消し側に付与されている権限またはロール
構文
revoke::=
(revoke_system_privileges::=、revoke_object_privileges::=を参照)
(grantee_clause ::=を参照)
(on_object_clause ::=、grantee_clause ::=を参照)
セマンティクス
revoke_system_privileges
システム権限を取り消すには、次の句を使用します。
system_privilege
取り消すシステム権限を指定します。システム権限のリストは、表18-1を参照してください。
ユーザーのシステム権限を取り消す場合、ユーザーの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、このユーザーはその権限を使用できなくなります。
ロールのシステム権限を取り消す場合、ロールの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、そのロールが使用可能となっている場合でも、この権限は使用できません。また、そのロールが付与されている他のユーザーは、ロールを使用可能にしても、その権限を使用できなくなります。
PUBLICのシステム権限
を取り消す場合、PUBLIC
を介して権限を付与されている各ユーザーの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、ユーザーは権限を使用できなくなります。ただし、直接またはロールを介して権限が付与されているユーザーからは、権限を取り消すことはできません。
Oracle Databaseには、すべてのシステム権限を一度に指定できるショートカットがあります。ALL
PRIVILEGES
を指定すると、表18-1に示すすべてのシステム権限を取り消すことができます。
システム権限の取消しの制限事項: 取り消す権限のリストに権限を指定できるのは1回のみです。
role
取り消すロールを指定します。
ユーザーからロールを取り消すと、ユーザーによるロールの使用が禁止されます。そのロールが使用可能となっている場合に、ロールの権限ドメインの権限が使用可能な場合はその権限を使用できます。ただし、ユーザーが後からロールを使用可能にできません。
他のロールからロールを取り消すと、取消し側ロールの権限ドメインから、取り消されたロールの権限ドメインが削除されます。取り消されたロールの権限を付与され、そのロールの権限が使用可能になっているユーザーは、そのロールの権限が使用可能な間は、取り消されたロールの権限ドメインの権限を引き続き使用できます。ただし、取り消された権限を付与されていても、ロールの取消し操作の後でそれを使用可能にしたユーザーは、取り消されたロールの権限ドメインの権限を使用できません。
PUBLIC
のロールを取り消すと、PUBLIC
を介してロールが付与されているすべてのユーザーに対して、そのロールが使用禁止にされます。そのロールを使用可能としているユーザーは、権限ドメインの権限が使用可能であるかぎり、権限ドメインでその権限を引き続き使用できます。ただし、ユーザーが後からロールを使用可能にすることはできません。直接またはロールを介して権限が付与されているユーザーからは、ロールを取り消すことはできません。
システム・ロールの取消しの制限事項: 取り消すロールのリストにシステム・ロールを指定できるのは1回のみです。事前定義されているロールの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
grantee_clause
FROM
grantee_clause
を指定すると、システム権限、ロールまたはオブジェクト権限が取り消されるユーザーまたはロールを識別できます。
PUBLIC PUBLIC
を指定すると、すべてのユーザーから権限またはロールを取り消すことができます。
revoke_object_privileges
オブジェクト権限を取り消すには、次の句を使用します。
object_privilege
取り消すオブジェクト権限を指定します。表18-2に示すどのオブジェクト権限でも指定できます。
注意: 操作は権限によって許可されます。権限を取り消すと、取り消されたユーザーは、その操作を実行できなくなります。ただし、複数のユーザーが、同じ権限を同一ユーザー、ロールまたはPUBLIC に対して付与している場合があります。権限受領者の権限ドメインの権限を取り消す場合、すべての権限付与者が権限を取り消す必要があります。権限を取り消さない権限付与者が1人でもいれば、権限受領者は引き続きその権限を使用できます。 |
ユーザーのオブジェクト権限を取り消すと、ユーザーの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、このユーザーはその権限を使用できなくなります。
ユーザーがその権限を他のユーザーまたはロールに付与している場合、他のユーザーまたはロールの権限も取り消されます。
権限を使用するSQL文を記述したプロシージャ、ファンクションまたはパッケージが定義されているスキーマを持つユーザーのオブジェクト権限を取り消すと、それらのプロシージャ、ファンクションまたはパッケージは実行できなくなります。
そのユーザーのスキーマにオブジェクトのビューが含まれる場合、ビューは無効になります。
参照整合性制約の定義権限を使用したユーザーのREFERENCES
オブジェクト権限を取り消す場合、CASCADE
CONSTRAINTS
句も指定する必要があります。
ロールのオブジェクト権限を取り消すと、ロールの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、そのロールが使用可能となっている場合でも、この権限は使用できません。ロールが付与されている他のユーザーは、ロールを使用可能にした場合でも、権限を使用できなくなります。
PUBLICのオブジェクト権限
を取り消すと、PUBLIC
を介して権限を付与されている各ユーザーの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、それらのすべてのユーザーは、その権限を使用できなくなります。ただし、直接またはロールを介して権限が付与されているユーザーからは、権限を取り消すことはできません。
ALL
を指定すると、ユーザーまたはロールに付与されているすべてのオブジェクト権限を取り消すことができます。(キーワードPRIVILEGES
はセマンティクスを明確にするためのものであり、指定は任意です。)
オブジェクトに権限が付与されていない場合、処理は行われず、エラーも戻りません。
オブジェクト権限の取消しの制限事項: 取り消す権限のリストに権限を指定できるのは1回のみです。FROM
句にユーザー、ロールまたはPUBLIC
を指定できるのは1回のみです。
この句は、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
の有無にかかわらず、SELECT
オブジェクト権限をマテリアライズド・ビューまたは表を含むマテリアライズド・ビューから取り消すと、そのマテリアライズド・ビューは無効になります。
システム権限のGRANT
OPTION
の有無にかかわらず、マテリアライズド・ビューのマスター表のいずれかにおけるSELECT
オブジェクト権限を取り消すと、そのマテリアライズド・ビューとそれに含まれる表の両方またはマテリアライズド・ビューが無効になります。
DIRECTORY directory_name 権限を取り消すディレクトリ・オブジェクトを指定します。directory_name
はschema
で修飾できません。このオブジェクトはディレクトリである必要があります。
EDITION USE
オブジェクト権限を取り消すエディションの名前を指定します。edition_name
はschema
で修飾できません。
JAVA SOURCE | RESOURCE JAVA
句を使用すると、権限を取り消すJavaソースまたはリソース・スキーマ・オブジェクトを指定できます。
例
ユーザーからシステム権限を取り消す例: 次の文は、ユーザー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
、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
権限も任意のユーザーに直接またはロールを介して付与している場合は、これらのユーザーはその権限を保持します。
ユーザーから順序のオブジェクト権限を取り消す例: 次の文は、ユーザーoe
にスキーマhr
内のdepartments_seq
順序に対するSELECT
権限を付与します。
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でオブジェクト権限を取り消す例: 次の文は、oe
に、スキーマhr
内のemployees
表に対するREFERENCES
権限およびUPDATE
権限を付与します。
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を使用する操作を取り消す例: データベース管理者によってユーザーsh
にGRANT
ANY
OBJECT
PRIVILEGE
が付与されているとします。ユーザー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
のオブジェクト権限も暗黙的に取り消されます。