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つのユーザーまたはスキーマUSER1
、USER2
および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
に対してUSER1
のTYPE2
にGRANT
オプションを使用したEXECUTE
権限が付与され、例7-3でattr3
user1.type2
を使用してオブジェクトとしてtype3
が作成されたため、最初の2つの文が正常に実行されます。
ただし、USER2
にUSER1.TYPE1
のGRANT
オプションを使用した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プログラマーズ・ガイド』を参照してください