用途
GRANT
文を使用すると、次の権限またはロールを付与できます。
ユーザーおよびロールに対するロール。付与されたロールは、ユーザー定義(ローカルまたは外部)または事前定義済のいずれかです。事前定義されているロールのリストは、『Oracle Databaseセキュリティ・ガイド』を参照してください。
ユーザーおよびロールに対するシステム権限。表18-1に、システム権限のリストを、操作対象のデータベース・オブジェクト別に示します。
ユーザー、ロールおよびPUBLIC
に対する、特定のオブジェクトに対するオブジェクト権限。表18-2に、オブジェクト権限のリストを、操作対象のデータベース・オブジェクト別に示します。
注意: グローバル・ロール(IDENTIFIED GLOBALLY で作成)は、エンタープライズ・ロールを介して付与します。GRANT 文を使用して付与することはできません。 |
データベース・ユーザーの認可の注意事項: データベース・ユーザーを認可する方法は、データベースやGRANT
文を介して行う以外にもあります。
多くのOracle Database権限は、提供されるPL/SQLパッケージおよびJavaパッケージを介して付与されます。これらの権限の詳細は、該当するパッケージのドキュメントを参照してください。
オペレーティング・システムによっては、Oracle Databaseユーザーに対して、初期化パラメータOS_ROLES
でロールを付与できます。オペレーティング・システム機能を使用してユーザーにロールを付与する場合、GRANT
文でユーザーにロールを付与することはできなくなります。ただし、GRANT
文を使用して、ユーザーにシステム権限を付与したり、その他のロールにシステム権限およびロールを付与することはできます。
Oracle Automatic Storage Managementの注意事項: AS
SYSASM
と認証されたユーザーは、この文を使用すると、システム権限SYSASM
、SYSOPER
およびSYSDBA
を現行ノードのOracle ASMパスワード・ファイルのユーザーに付与できます。
エディション化可能なオブジェクトの注意事項:
エディション化可能なオブジェクトにオブジェクト権限を付与するGRANT
操作を実行すると、オブジェクトが現行のエディションで実体化されます。エディションおよびエディション化可能なオブジェクトの詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。
関連項目:
|
前提条件
システム権限を付与にするには、次のいずれかの条件が満たされている必要があります。
GRANT
ANY
PRIVILEGE
システム権限が付与されている必要があります。この場合、ロールがユーザーのセッションで有効になっていないかぎり、システム権限をロールに付与しても、ロールが付与されているユーザーに権限は付与されません。
ADMIN
OPTION
付きのシステム権限が付与されている必要があります。この場合、ロールがユーザーのセッションで有効になっているかどうかに関係なく、システム権限をロールに付与すると、ロールが付与されているユーザーに権限が付与されます。
ロールを付与する場合は、ADMIN
OPTION
付きのロールが付与されているか、GRANT
ANY
ROLE
システム権限が付与されているか、または付与するロールが自分で作成したロールである必要があります。
オブジェクト権限を付与する場合は、オブジェクトの所有者であるか、オブジェクトの所有者からGRANT
OPTION
付きのオブジェクト権限が付与されている必要があります。または、GRANT
ANY
OBJECT
PRIVILEGE
システム権限が付与されている必要があります。GRANT
ANY
OBJECT
PRIVILEGE
を持っている場合は、オブジェクトの所有者が付与可能なオブジェクト権限と同じオブジェクト権限のみを付与できます。その場合、DBA_TAB_PRIVS
ビューのGRANTOR
列には、GRANT
文を発行したユーザーではなく、オブジェクトの所有者が表示されます。
構文
grant::=
(grant_system_privileges::=、grant_object_privileges::=を参照)
(grantee_clause ::=を参照)
(on_object_clause ::=、grantee_clause ::=を参照)
セマンティクス
grant_system_privileges
システム権限を付与するには、次の句を使用します。
system_privilege
付与するシステム権限を指定します。表18-1に、システム権限のリストを、操作対象のデータベース・オブジェクト別に示します。
ユーザーに権限を付与する場合、ユーザーの権限ドメインに権限が登録されます。このユーザーはその権限をすぐに使用できます。ANY
権限は、信頼できるユーザーにのみ付与することをお薦めします。
ロールに権限を付与する場合、ロールの権限ドメインに権限が登録されます。ロールが付与されているまたは使用可能となっているユーザーは、その権限をすぐに使用できます。なお、ロールが付与されている他のユーザーも、そのロールを使用可能にしてその権限を使用できます。
PUBLIC
に権限を付与する場合、各ユーザーの権限ドメインに権限が登録されます。すべてのユーザーは、その権限によって許可される操作をすぐに実行できます。システム権限をPUBLIC
に付与しないことをお薦めします。
Oracle Databaseには、ALL
PRIVILEGES
というショートカットも用意されており、このショートカットを使用すると、SELECT
ANY
DICTIONARY
、ALTER
DATABASE
LINK
およびALTER
PUBLIC
DATABASE
LINK
権限を除き、表18-1に示すすべてのシステム権限を付与できます。
付与するロールを指定します。Oracle Databaseの事前定義ロールまたはユーザー定義ロールを付与できます。
ユーザーにロールを付与する場合、そのユーザーが、付与されたロールを使用できます。ユーザーはそのロールをすぐに使用可能にし、ロールの権限ドメインに登録されている権限を使用できます。
保護アプリケーション・ロールは、ユーザーに直接付与する必要はありません。ユーザーが適切なセキュリティ・ポリシーを渡すことを前提として、関連付けられたPL/SQLパッケージでこの処理を行うことができます。詳細は、「USING
package」
の「CREATE ROLEセマンティクス」および『Oracle Databaseセキュリティ・ガイド』を参照してください。
他のロールにロールを付与する場合、権限受領者のロールの権限ドメインに、権限付与者のロールの権限ドメインが登録されます。権限受領者のロールを付与されているユーザーは、それを使用可能にした場合、付与されたロールの権限ドメイン内の権限を使用できます。
PUBLIC
にロールを付与する場合、すべてのユーザーがロールを使用できます。すべてのユーザーはそのロールをすぐに使用可能にし、ロールの権限ドメインに登録されている権限を使用できます。
関連項目:
|
IDENTIFIED BY句
この句は、オブジェクト権限ではなくシステム権限を割り当てる場合にのみ有効です。IDENTIFIED
BY
句を使用すると、既存ユーザーの新しいパスワードを指定したり、または存在しないユーザーを作成できます。この句は、権限受領者がロールまたはPUBLIC
の場合は無効です。grantee_clause
に指定したユーザーが存在しない場合、この句で指定したパスワードおよび権限とロール付きでユーザーが作成されます。
WITH
ADMIN
OPTION
を指定すると、権限受領者は次のことができます。
ロールがGLOBAL
ロールでない場合、権限またはロールを他のユーザーまたはロールに付与できます。
権限またはロールを他のユーザーまたは他のロールから取り消すことができます。
権限またはロールへのアクセスに必要な認可を変更するため、その権限またはロールを変更できます。
権限またはロールを削除します。
たとえば、WITH
ADMIN
OPTION
を指定せずにユーザーにロールまたはシステム権限を付与し、後でWITH
ADMIN
OPTION
を指定してその権限およびロールを付与した場合、そのユーザーはその権限またはロールに関してADMIN
OPTION
を持つことになります。
システム権限またはロールのADMIN
OPTION
をユーザーから取り消す場合、そのユーザーの権限またはロールを完全に取り消し、その次にADMIN
OPTION
を指定せずに権限またはロールをユーザーに付与します。
grantee_clause
TO
grantee_clause
を使用すると、システム権限、ロールまたはオブジェクト権限が付与されているユーザーまたはロールを識別できます。
権限受領者の制限事項: 各ユーザー、ロールまたはPUBLIC
はそれぞれ、TO
grantee_clause
に1回のみ指定可能です。
PUBLIC
PUBLIC
を指定すると、すべてのユーザーに権限を付与できます。システム権限をPUBLIC
に付与しないことをお薦めします。
システム権限およびロールの付与の制限事項: 権限およびロールには、次の制限事項があります。
付与する権限およびロールのリストに、権限またはロールを指定できるのは1回のみです。
ロールに対してそのロールと同じロールは付与できません。
ロールIDENTIFIED
GLOBALLY
は、どのようなユーザーまたはロールに対しても付与できません。
ロールIDENTIFIED
EXTERNALLY
は、グローバル・ユーザーまたはグローバル・ロールに対して付与できません。
ロールは交互に付与できません。たとえば、ロールbanker
をロールteller
に付与した場合、逆にteller
をbanker
に付与することはできません。
IDENTIFIED
BY
ロール、IDENTIFIED
USING
ロールおよびIDENTIFIED
EXTERNALLY
ロールの別のロールへの付与はできません。
grant_object_privileges
オブジェクト権限を付与するには、次の句を使用します。
object_privilege
付与するオブジェクト権限を指定します。表18-2に、オブジェクト権限のリストを、付与されるオブジェクトのタイプ別に示します。ユーザーまたはロールのいずれかのオブジェクト権限をエディション化可能なオブジェクトに付与すると、オブジェクトは付与したエディションで実体化されます。エディション化可能なオブジェクト型およびエディションの詳細は、「CREATE EDITION」を参照してください。
オブジェクト権限の制限事項: 付与する権限のリストに権限を指定できるのは1回のみです。
ALL
を指定すると、GRANT
OPTION
付きで付与されているオブジェクト権限に対するすべての権限を付与できます。オブジェクトが定義されているスキーマを所有しているユーザーは、自動的にGRANT
OPTION
付きのオブジェクトに対するすべての権限を持っています。キーワードPRIVILEGES
はセマンティクスを明確にするためのものであり、指定は任意です。
権限を付与する表またはビューの列を指定します。INSERT
、REFERENCES
またはUPDATE
の各権限を付与する場合にのみ、列を指定できます。列を指定しない場合、権限受領者には表またはビューのすべての列に対して指定した権限が付与されます。
既存の列オブジェクトに対して付与された権限については、データ・ディクショナリ・ビューUSER_COL_PRIVS
、ALL_COL_PRIVS
またはDBA_COL_PRIVS
を問い合せます。
on_object_clause
on_object_clause
を指定すると、権限が付与されているオブジェクトを識別できます。ディレクトリ・スキーマ・オブジェクト、エディション、データ・マイニング・モデル、Javaソースおよびリソース・スキーマ・オブジェクトは、異なるネームスペースに格納されるため、別々に識別されます。
object
の所有者でもなく、object
WITH
GRANT
OPTION
でobject_privilege
が付与されてもいないが、GRANT
ANY
OBJECT
PRIVILEGE
システム権限が付与されているためこの権限付与を行える場合、この権限付与を行うと、オブジェクト所有者の役割を果たすことになります。*_TAB_PRIVS
データ・ディクショナリ・ビューには、この権限付与がobject
の所有者によって行われたことが反映されます。
関連項目:
|
WITH
GRANT
OPTION
を指定すると、権限受領者による、他のユーザーまたはロールに対するオブジェクト権限の付与を許可できます。
たとえば、WITH
GRANT
OPTION
を指定せずにユーザーにオブジェクト権限を付与し、後でWITH
GRANT
OPTION
を指定してその権限を付与した場合、そのユーザーはその権限に関してGRANT
OPTION
を持つことになります。
オブジェクト権限のGRANT
OPTION
をユーザーから取り消す場合、そのユーザーの権限を完全に取り消し、その次にGRANT
OPTION
を指定せずに権限をユーザーに付与する必要があります。
With Grant Optionの付与の制限事項: WITH
GRANT
OPTION
は、ユーザーまたはPUBLIC
に権限を付与する場合にのみ指定できます。ロールに付与する場合は指定できません。
WITH
HIERARCHY
OPTION
を指定すると、この文の後に作成されるサブオブジェクトも含め、object
のすべてのサブオブジェクト(ビューを基に作成したサブビューなど)に対する指定したオブジェクト権限を付与できます。
この句は、SELECT
オブジェクト権限とあわせて指定する場合のみ意味があります。
object 権限を付与するスキーマ・オブジェクトを指定します。object
をschema
で修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあるとみなされます。オブジェクトには次のタイプがあります。
表、ビューまたはマテリアライズド・ビュー
順序
プロシージャ、ファンクションまたはパッケージ
ユーザー定義型
これらの項目のシノニム
ディレクトリ、ライブラリ、演算子または索引タイプ
Javaソース、クラスまたはリソース
パーティション表の単一パーティションに直接権限を付与することはできません。
DIRECTORY directory_name 権限を付与するディレクトリ・スキーマ・オブジェクトを指定します。directory_name
はスキーマ名で修飾できません。
JAVA SOURCE | RESOURCE JAVA
句を使用すると、権限を付与するJavaソースまたはリソース・スキーマ・オブジェクトを指定できます。
システム権限およびオブジェクト権限
表18-1 システム権限(操作対象のデータベース・オブジェクト別)
表18-2 オブジェクト権限(操作対象のデータベース・オブジェクト別)
オブジェクト権限名 | 許可される操作 |
---|---|
ディレクトリ権限 |
次のディレクトリ権限では、ディレクトリ・オブジェクトをポインタとして使用することにより、オペレーティング・システムのディレクトリに格納されている各ファイルにデータベースから安全にアクセスできるようになります。このディレクトリ・オブジェクトには、ファイルが格納されているオペレーティング・システムのディレクトリへのフルパス名が定義されています。これらのファイルは実際にはデータベース外に格納されているため、Oracle Databaseサーバーの各プロセスは、ファイル・システム・サーバーに対して適切なファイル・アクセス権も持っている必要があります。オペレーティング・システムに対するオブジェクト権限ではなく、ディレクトリ・データベース・オブジェクトに対するオブジェクト権限を個々のデータベース・ユーザーに付与することによって、データベースでファイル運用時のセキュリティが確保されます。 |
ディレクトリ内のファイルの読取り。 |
|
ディレクトリ内へのファイルの書込み。この権限は、外部表に接続する場合のみに役立ちます。これによって、権限受領者は、外部表のエージェントがディレクトリに書き込めるのがログ・ファイルなのか不良ファイルなのかを判断できます。 制限事項: この権限を持っていても、 |
|
ディレクトリ内に存在するプリプロセッサ・プログラムの実行。プリプロセッサ・プログラムは、 |
|
エディション権限 |
次のエディション権限は、エディションの使用を許可します。 |
|
エディションの使用。 |
索引タイプ権限 |
次の索引タイプ権限は、索引タイプの操作を許可します。 |
|
索引タイプの参照。 |
次のフラッシュバック・データ・アーカイブ権限では、フラッシュバック・データ・アーカイブに対する操作を許可します。 |
|
|
表の履歴追跡を使用可能または使用禁止にします。 |
ライブラリ権限 |
次のライブラリ権限は、ライブラリの操作を許可します。 |
特定のオブジェクトの使用と参照、およびそのメソッドの起動。 注意: この権限は非常に強力であるため、信頼できるユーザーにのみ付与してください。この権限を付与する前に、『Oracle Databaseセキュリティ・ガイド』を参照してください。 |
|
マテリアライズド・ビュー権限 |
次のマテリアライズド・ビュー権限は、マテリアライズド・ビューについての操作を許可します。 |
指定した表に対するREFRESH ON COMMITモードのマテリアライズド・ビューの作成。 |
|
指定した表で使用するクエリー・リライトに対するマテリアライズド・ビューの作成。 |
|
|
|
マイニング・モデル権限 |
次のマイニング・モデル権限では、マイニング・モデルに対する操作を許可します。これらの権限は、ユーザー自身のスキーマ内にあるモデルに対しては必要ありません。 |
該当する |
|
マイニング・モデルのスコアリングまたは表示。スコアリングの実行には、SQLファンクションの |
|
オブジェクト型権限 |
次のオブジェクト型権限は、データベース・オブジェクト型の操作を許可します。 |
オブジェクト型に定義されたすべてのパブリック変数、非パブリック変数、メソッドおよび型へのデバッガを介したアクセス。 型本体内の行または指示境界へのブレークポイントの設定、またはこれらの場所のいずれかでの停止。 |
|
特定のオブジェクトの使用と参照、およびそのメソッドの起動。 オブジェクト型に定義されたパブリック変数、型およびメソッドへのデバッガを介したアクセス。 |
|
型のサブタイプの作成。この型の直属のスーパータイプに |
|
OLAP権限 |
Oracle DatabaseをOLAPオプションで使用している場合は、次のオブジェクト権限が有効になります。 |
メンバーをOLAPキューブ・ディメンションに挿入するか、またはメジャーをメジャー・フォルダに挿入します。 |
|
OLAPキューブ・ディメンションまたはキューブの定義を変更します。 |
|
メンバーをOLAPキューブ・ディメンションから削除するか、またはメジャーをメジャー・フォルダから削除します。 |
|
OLAPキューブまたはキューブ・ディメンションを表示または問い合せます。 |
|
OLAPキューブのメジャー値またはキューブ・ディメンションの属性値を更新します。 |
|
演算子権限 |
次の演算子権限は、ユーザー定義演算子の操作を許可します。 |
演算子の参照。 |
|
プロシージャ、ファンクション、パッケージ権限 |
次のプロシージャ、ファンクションおよびパッケージ権限は、プロシージャ、ファンクションおよびパッケージの操作を許可します。これらの権限は、Javaソース、クラスおよびリソースにも適用されます。Oracle Databaseでは、これらはオブジェクト権限の付与のために生成されたプロシージャとして扱われます。 |
オブジェクトに定義されたすべてのパブリック変数、非パブリック変数、メソッドおよび型へのデバッガを介したアクセス。 プロシージャ、ファンクションまたはパッケージ内の行または指示境界へのブレークポイントの設定、またはこれらの場所のいずれかでの停止。この権限は、メソッドまたはパッケージの仕様部および本体の宣言にアクセスする権限を付与します。 |
|
|
プロシージャかファンクションの直接実行、パッケージの仕様部に宣言された任意のプログラム・オブジェクトへのアクセス、または現在無効であるかコンパイルされていないファンクションかプロシージャへのコール中の暗黙的なオブジェクトのコンパイル。この権限を持っていても、 プロシージャ、ファンクションまたはパッケージに定義されたパブリック変数、型およびメソッドへのデバッガを介したアクセス。この権限は、メソッドまたはパッケージの仕様部のみの宣言にアクセスする権限を付与します。 ジョブ・スケジューラ・オブジェクトは、 注意: プロシージャ、ファンクションまたはパッケージを間接的に実行する場合、ユーザーはこの権限を持つ必要はありません。 |
スケジューラ権限 |
ジョブ・スケジューラ・オブジェクトは、 |
|
ジョブ・クラス、プログラム、チェーンおよび資格証明に対する操作。 |
|
ジョブ、プログラム、チェーン、資格証明およびスケジュールに対する変更。 |
順序権限 |
次の順序権限は、順序の操作を許可します。 |
|
|
|
|
シノニム権限 |
シノニム権限は、対象となるオブジェクトに対して付与される権限と同じです。シノニムに権限を付与することは、基本オブジェクトに権限を付与することと同じです。同様に、基本オブジェクトに対して権限を付与することは、オブジェクトのすべてのシノニムに権限を付与することと同じです。あるユーザーにシノニムの権限を付与した場合、そのユーザーは、シノニム名または基本オブジェクト名をSQL文に指定して、その権限を使用できます。 |
表権限 |
次の表権限は、表の操作を許可します。次のいずれかのオブジェクト権限を持っている場合は、 注意: 外部表に有効なオブジェクト権限は、 |
|
|
デバッガを介した次のものへのアクセス。
|
|
注意: 表がリモート・データベースにある場合は、 |
|
|
|
注意: 表がリモート・データベースにある場合は、 |
|
表参照制約の作成。この権限はロールには付与できません。 |
|
|
|
注意: 表がリモート・データベースにある場合は、 |
|
ビュー権限 |
次のビュー権限は、ビューの操作を許可します。次のいずれかのオブジェクト権限を持っている場合は、 ビューの権限を付与する場合、そのビューのすべての実表に関して |
デバッガを介した次のものへのアクセス。
|
|
|
|
|
|
このオブジェクト権限の動作は、権限がON |
|
ビューへの外部キー制約の定義。 |
|
参照: ビューに対するこのオブジェクト権限の付与の詳細は、「object_privilege」を参照してください。 |
|
ビューのサブビューの作成。このビューの直属のスーパービューに |
|
|
例
ユーザーに対してシステム権限を付与する例: 次の文は、サンプル・ユーザーhr
にCREATE
SESSION
システム権限を付与し、hr
がOracle Databaseにログインできるようにします。
GRANT CREATE SESSION TO hr;
ロールに対してシステム権限を付与する例: 次の文は、データ・ウェアハウス管理者ロール(「ロールの作成例:」で作成)に、適切なシステム権限を付与します。
GRANT CREATE ANY MATERIALIZED VIEW , ALTER ANY MATERIALIZED VIEW , DROP ANY MATERIALIZED VIEW , QUERY REWRITE , GLOBAL QUERY REWRITE TO dw_manager WITH ADMIN OPTION;
dw_manager
の権限ドメインには、マテリアライズド・ビューに関連するシステム権限が含まれます。
Admin Option付きロールを付与する例: 次の文は、サンプル・ユーザーsh
にADMIN
OPTION
付きのdw_manager
ロールを付与します。
GRANT dw_manager TO sh WITH ADMIN OPTION;
dw_manager
ロールによって、sh
は次の操作を実行できます。
ロールを使用可能にして、CREATE
MATERIALIZED
VIEW
システム権限を含むそのロールの権限ドメインに登録されている権限の使用
他のユーザーに対するそのロールの付与および取消し
ロールの削除
ロールに対してオブジェクト権限を付与する例: 次の文は、データ・ウェアハウス・ユーザー・ロール(「ロールの作成例:」
で作成)に、SELECTオブジェクト権限を付与します。
GRANT SELECT ON sh.sales TO warehouse_user;
ロールに対してロールを付与する例 次の文は、dw_manager
ロールにwarehouse_user
ロールを付与します。どちらのロールも、「ロールの作成例」で作成されたものです。
GRANT warehouse_user TO dw_manager;
dw_manager
ロールには、warehouse_user
ロールのドメインにあるすべての権限が含まれます。
ディレクトリへのオブジェクト権限を付与する例: 次の文は、ユーザーhr
にディレクトリbfile_dir
に対するREAD
権限をGRANT
OPTION
付きで付与します。
GRANT READ ON DIRECTORY bfile_dir TO hr WITH GRANT OPTION;
ユーザーに対して表へのオブジェクト権限を付与する例: 次の文は、ユーザーhr
に対して、oe.bonuses
表(「表へのマージ例:」で作成)についてのすべての権限をGRANT
OPTION
付きで付与します。
GRANT ALL ON bonuses TO hr WITH GRANT OPTION;
この結果、hr
ユーザーは次の操作を実行できます。
bonuses
表に対するすべての権限の使用
他のユーザーまたはロールに対する、bonuses
表についての権限の付与
ビューへのオブジェクト権限を付与する例: 次の文は、ビューemp_view
(「ビューの作成例:」
で作成)についてのSELECT
権限およびUPDATE権限をすべてのユーザーに付与します。
GRANT SELECT, UPDATE ON emp_view TO PUBLIC;
この結果、すべてのユーザーが、従業員の詳細についてのビューを問合せおよび更新できるようになります。
別のスキーマの順序に対してオブジェクト権限を付与する例: 次の文は、ユーザーhr
に対して、スキーマoe
内のcustomers_seq
順序のSELECT
権限を付与します。
GRANT SELECT ON oe.customers_seq TO hr;
ユーザーhr
は、次の文を指定して、順序の次の値を作成できるようになります。
SELECT oe.customers_seq.NEXTVAL FROM DUAL;
別々の列に複数のオブジェクト権限を付与する例: 次の文は、ユーザーoe
に、スキーマhr
にあるemployees
表のemployee_id
列に対するREFERENCES
権限、およびemployee_id
、salary
、commission_pct
列に対するUPDATE
権限を付与します。
GRANT REFERENCES (employee_id), UPDATE (employee_id, salary, commission_pct) ON hr.employees TO oe;
この結果、ユーザーoe
は、employee_id
列、salary
列およびcommission_pct
列の値を更新できるようになります。ユーザーoe
は、employee_id
列を参照する参照整合性制約を定義することもできます。ただし、GRANT
文にはこれらの列のみが指定されているため、ユーザーoe
はemployees
表の他の列を操作できません。
たとえば、oe
は制約付きの表を作成できます。
CREATE TABLE dependent (dependno NUMBER, dependname VARCHAR2(10), employee NUMBER CONSTRAINT in_emp REFERENCES hr.employees(employee_id) );
スキーマhr
内のemployees
表の従業員に対応するdependent
表の依存性が、制約in_emp
によって保証されます。