7.1 オブジェクト型およびそれらのメソッドの権限

オブジェクト型に対する権限は、システム・レベルおよびスキーマ・オブジェクト・レベルで存在します。

内容は次のとおりです。

7.1.1 オブジェクト型のシステム権限

Oracleデータベースでは、オブジェクト型に次のシステム権限を定義します。

  • CREATE TYPE: 自分のスキーマにオブジェクト型を作成できます。

  • CREATE ANY TYPE: 任意のスキーマにオブジェクト型を作成できます。

  • ALTER ANY TYPE: 任意のスキーマ内のオブジェクト型を変更できます。

  • DROP ANY TYPE: 任意のスキーマ内のオブジェクト型を削除できます。

  • EXECUTE ANY TYPE: 任意のスキーマ内のオブジェクト型を使用および参照できます。

  • UNDER ANY TYPE: 任意のNOT FINALオブジェクト型の下にサブタイプを作成できます。

  • UNDER ANY VIEW: 任意のオブジェクト・ビューの下にサブビューを作成できます。

次のロールが有用です。

  • RESOURCEロールには、CREATE TYPEシステム権限が含まれています。

  • DBAロールには、前述のすべての権限が含まれます。

7.1.2 スキーマ・オブジェクト権限

オブジェクト型には、2つのスキーマ・オブジェクト権限が適用されます。

  • EXECUTE権限があると、その型を次のように使用できます。

    • 表の定義

    • リレーショナル表の列の定義

    • オブジェクト型の変数またはパラメータの宣言

    EXECUTEは、コンストラクタなどの型のメソッドを起動します。

    メソッド実行および対応する権限は、ストアドPL/SQLプロシージャのものと同じです。

  • UNDERは、権限が与えられた型またはビューの下にサブタイプまたはサブビューを作成します。

    直系のスーパータイプまたはスーパービューについてUNDER権限をWITH GRANT OPTION付きで持っている権限付与者のみ、サブタイプまたはサブビューに対するUNDER権限を付与できます。

WITH HIERARCHY OPTION句は、オブジェクトのすべてのサブタイプについて指定されたオブジェクト権限を付与します。このオプションが意味を持つのは、オブジェクト・ビュー階層内のオブジェクト・ビューにSELECTオブジェクト権限が付与されている場合のみです。この場合、権限が付与されているビューのサブビューすべてに、権限が適用されます。

7.1.3 新しい型または表で使用される型

次の場合は、前述の項で説明した権限の他に、特定の権限が必要です。

  • 別のユーザーが作成した型を使用する型または表を作成する場合

  • 新しく作成した型または表の使用権限を別のユーザーに付与する場合

EXECUTE ANY TYPEシステム権限、または新しい型または表を定義するために使用される型に対するEXECUTEオブジェクト権限が必要です。ロールを介してではなく、これらの権限を明示的に付与しておく必要があります。

新しい型または表へのアクセス権限を他のユーザーに付与するには、GRANTオプションを含む適切なEXECUTEオブジェクト権限、またはオプションWITH ADMIN OPTIONを含むEXECUTE ANY TYPEシステム権限が必要です。ロールを介してではなく、これらの権限を明示的に付与しておく必要があります。

7.1.4 例: オブジェクト型の権限

この項では、ユーザーまたはスキーマを作成して、権限を付与する例をいくつか示します。

例7-1では、3つのユーザーまたはスキーマUSER1USER2およびUSER3を作成し、CREATE SESSIONおよび RESOURCEロールを付与します。この章の後続の例でこれらのスキーマを使用する場合があります。

この例では、複数のパスワードを作成および使用する必要があります。例を実行する場合、最初にSQLコードに対してこれらの変更を行います。

注意:

単純化するため、この例では、デプロイされたシステムで通常使用されるパスワード管理技術を実行していません。本番環境では、Oracle Databaseのパスワード管理ガイドラインに従い、サンプル・アカウントを無効にしてください。

関連項目:

パスワード管理ガイドラインおよび他のセキュリティに関する推奨事項は、Oracle Databaseセキュリティ・ガイドを参照してください。

例7-1 ユーザー・スキーマの作成

-- Requires passwords
CONNECT SYSTEM
-- Enter password
CREATE USER user1 PROFILE default 
   IDENTIFIED BY password DEFAULT TABLESPACE example ACCOUNT UNLOCK;
GRANT CREATE SESSION TO user1;
GRANT RESOURCE TO user1;
GRANT CREATE SYNONYM TO user1;
GRANT CREATE PUBLIC SYNONYM TO user1;
GRANT DROP PUBLIC SYNONYM TO user1;
CREATE USER user2 PROFILE default 
   IDENTIFIED BY password DEFAULT TABLESPACE example ACCOUNT UNLOCK;
GRANT CREATE SESSION TO user2;
GRANT RESOURCE TO user2;
CREATE USER user3  PROFILE default 
   IDENTIFIED BY password DEFAULT TABLESPACE example ACCOUNT UNLOCK;
GRANT CREATE SESSION TO user3;
GRANT RESOURCE TO user3;

例7-2ではパスワードの入力が必要で、USER1は、USER1スキーマのCREATEおよびGRANTデータ定義言語(DDL)文を実行します。

例7-2 オブジェクト型の権限の付与

CREATE TYPE type1 AS OBJECT ( attr1 NUMBER );
/
CREATE TYPE type2 AS OBJECT ( attr2 NUMBER );
/
GRANT EXECUTE ON type1 TO user2;
GRANT EXECUTE ON type2 TO user2 WITH GRANT OPTION;

例7-3では、USER2は、USER2スキーマのCREATE DDL文を実行します。

例7-3 USER2スキーマのDDL文の実行

-- Requires Ex. 7-1, 7-2 and password input
CONNECT user2
-- Enter password
CREATE TABLE tab1 OF user1.type1;
CREATE TYPE type3 AS OBJECT ( attr3 user1.type2 );
/
CREATE TABLE tab2 (col1 user1.type2 );

例7-4では、例7-2の最後の行でUSER2に対してUSER1TYPE2GRANTオプションを使用したEXECUTE権限が付与され、例7-3attr3 user1.type2を使用してオブジェクトとしてtype3が作成されたため、最初の2つの文が正常に実行されます。

ただし、USER2USER1.TYPE1GRANTオプションを使用したEXECUTE権限が付与されていないため、例7-4の最後の付与は失敗します。

例7-4 USER3への付与の実行

-- Requires Ex. 7-1, 7-2, and 7-3
GRANT EXECUTE ON type3 TO user3;
GRANT SELECT ON tab2 TO user3;

-- Privileges on Object Types
GRANT SELECT ON tab1 TO user3 -- incorrect statement;

例7-5で、USER3には、次の処理を実行するために必要な権限があります。

例7-5 表および型の作成

-- Requires Ex. 7-1, 7-2, 7-3, and 7-4
CONNECT user3
-- Enter password
CREATE TYPE type4 AS OBJECT (attr4 user2.type3);
/
CREATE TABLE tab3 OF type4;

7.1.5 オブジェクト、型および表のアクセス権限

オブジェクト型はEXECUTE権限のみを使用します。

しかし、オブジェクト表はリレーショナル表と同じ次のすべての権限を使用します。

  • READまたはSELECT: 表から1つのオブジェクトおよびその属性にアクセスできます。

  • UPDATE: 表内のオブジェクトの属性を変更できます。

  • INSERT: 表に新しいオブジェクトを追加できます。

  • DELETE: 表からオブジェクトを削除できます。

同様の表権限および列権限が、オブジェクト型の表列の使用を規制します。

オブジェクト表の列を選択するには、オブジェクト表の型に対する権限は必要ありません。ただし、全体を選択するには必要です。

次の例7-6で作成されるスキーマと問合せを考えてみます。

例7-6 型へのアクセスのSELECT権限

-- Requires Ex. 7-1, 7-2, 7-3, 7-4, and 7-5
CREATE TYPE emp_type AS OBJECT (
  eno     NUMBER,
  ename   VARCHAR2(36));
/
CREATE TABLE emp OF emp_type; // an object table
GRANT SELECT on emp TO user1;
SELECT VALUE(e) FROM emp e;
SELECT eno, ename FROM emp;

どちらの問合せの場合も、Oracleデータベースはオブジェクト表empに対するユーザーのSELECT権限をチェックします。最初の問合せの場合、データを解析するには、ユーザーはemp_type型情報を取得する必要があります。問合せがemp_type型にアクセスすると、ユーザーのEXECUTE権限をチェックします。

2番目の問合せは、指定された型を必要としません。そのため、型権限をチェックしません。

また、USER3は次のような問合せを実行できます。

SELECT t.col1.attr2 from user2.tab2 t;
SELECT t.attr4.attr3.attr2 FROM tab3 t;

両方の問合せで、USER3は基礎となる型の明示的な権限を持っていないことに注意してください。ただし、型および表所有者はGRANTオプションを含む必要な権限を持っているため、この文は正常に実行されます。

次の要求についての権限をチェックし、ユーザーに各処理に対する権限がない場合はエラーを戻します。

  • REF値を使用してオブジェクト・キャッシュ内に1つのオブジェクトを確保すると、そのオブジェクトを含むオブジェクト表に対するREADまたはSELECT権限、およびそのオブジェクト型に対するEXECUTE権限をチェックします。

  • 既存オブジェクトの変更、またはオブジェクト・キャッシュからのオブジェクトのフラッシュを行うと、接続先オブジェクト表に対するUPDATE権限をチェックします。新しいオブジェクトをフラッシュすると、接続先オブジェクト表に対するINSERT権限をチェックします。

  • オブジェクトを削除すると、接続先の表に対するDELETE権限をチェックします。

  • メソッドを起動すると、対応するオブジェクト型に対するEXECUTE権限をチェックします。

オブジェクト表に対する列レベルの権限は提供しません。

関連項目:

OCIプログラムをオブジェクトとともに効果的に使用するためのヒントおよび技法は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください