ヘッダーをスキップ
Oracle® TimesTen In-Memory Databaseオペレーション・ガイド
リリース11.2.1
B56047-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

4 アクセス制御の管理

TimesTenアクセス制御では、各ユーザーの認証およびデータベース内のすべてのオブジェクトの認可が行われます。認証は、正しいユーザー・パスワードによって行われます。データベース内のすべてのオブジェクトの認可は、特定のユーザーに適切な権限を付与することで管理します。

次の項では、TimesTenの認証および認可について説明します。

ユーザー管理による認証の制御

ユーザーがデータベース内のデータにアクセスしたり操作できるようにするには、ユーザーを作成し、適切なパスワードを付与する必要があります。ユーザーを作成する際には、データベースに接続するための適切な権限またはデータベース内のオブジェクトにアクセスするための適切な権限を付与する必要もあります。権限の付与の詳細は、「権限によるオブジェクトへの認可の付与」を参照してください。

次の項では、ユーザーの作成および管理方法について説明します。

ユーザーの概要

TimesTenデータベースのユーザーには、次の3つのタイプがあります。

  • インスタンス管理者: インスタンス管理者は、TimesTenインスタンスをインストールしたユーザーです。このユーザーには、そのTimesTenインスタンス内のすべてに対する完全な権限があります。このユーザーの作成の詳細は、『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』のTimesTen のインストールに関する説明を参照してください。


    注意:

    TimesTenのインストール時には、インスタンス管理者のみでなく、4つのシステム・ユーザーが作成されます。TimesTenによって内部的に使用されるこれらのシステム・ユーザーは、内部的に使用するSYSTEM、システム・オブジェクト用のSYS、キャッシュ・グリッド・オブジェクト用のGRIDおよびレプリケーション・オブジェクト用のTTREPです。

  • 内部ユーザー: 内部ユーザーは、TimesTenデータベース内で使用するためにTimesTen内に作成されます。内部ユーザーの認証には、このユーザーが定義されている特定のデータベース用のパスワードが使用されます。

    TimesTenユーザー名はTT_CHAR型であり、大文字と小文字が区別され、30文字に制限されています。ユーザーのネーミング規則の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の名前とパラメータに関する説明を参照してください。

    内部ユーザーはCREATE USER文を使用して作成できます。この文の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のCREATE USERに関する項を参照してください。

  • 外部ユーザー: 外部ユーザーは、オペレーティング・システム内で作成されたユーザーです。外部ユーザーは、オペレーティング・システムへのログイン時に認証されていることが前提であるため、データベースに格納されたパスワードはありません。TimesTenデータベースがインストールされているホストとは異なるホストから外部ユーザーとして接続することはできません。同じホストの場合、クライアントのオペレーティング・システム資格証明を使用して、クライアントが特定の外部ユーザーとして接続できるようにします。たとえば、外部ユーザーがUNIXシステムにログインした場合は、TimesTenデータベースにパスワード指定なしで接続できます。これは、外部ユーザーがパスワードをログイン時にすでに提示しているためです。ただし、その外部ユーザーに適切な権限が付与されていることが条件となります。また、外部ユーザーはTimesTenユーザー・グループに属していること、およびそのグループに適切な権限が付与されていることが必要です。詳細は、『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』を参照してください。

    あるホスト上で定義されている外部ユーザーは、リモート・ホスト上のTimesTenデータソースに接続できません。外部ユーザーは、ローカル・オペレーティング・システムによって認証されるため、ローカルTimesTenデータソースへの接続にのみ使用できます。クライアント/サーバー接続を介して接続する場合、外部ユーザーは、クライアントおよびサーバーの存在する同一ホスト上で定義する必要があります。したがって、外部ユーザーの使用時には、クライアントとサーバーの両方が同一のホスト上に存在する必要があります。これは、オペレーティング・システムで外部ユーザーの認証が行われるためです。

    外部ユーザーの作成はオペレーティング・システム内で行われますが、CREATE USER文のIDENTIFIED EXTERNALLY句を使用して、データベースでそのユーザーが外部ユーザーとして識別されるようにする必要があります。このSQL文の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のCREATE USERに関する説明を参照してください。

    UNIX外部ユーザー名では、大文字と小文字が区別されます。Windows外部ユーザー名では、大文字と小文字は区別されません。UNIXプラットフォームから接続する場合、TimesTenによって自動的に外部ユーザー名が大文字に変換され、大文字と小文字が区別されずに表示されます。

    TimesTenへのログインにクリアテキストのパスワードを使用しない場合は、PWDCrypt属性を使用してパスワードのハッシュを作成します。この属性を使用するかどうかの唯一の判断材料は、そのパスワードがOracle Databaseなどの他のエンティティへのログインに使用されるかどうかです。PWDCryptバージョンのパスワードはTimesTenへの接続に常に使用されますが、Oracleに接続するために元のパスワードに復元することはできません。


注意:

インスタンス管理者およびすべての外部ユーザーは両方とも、インストール時に指定されたTimesTenユーザー・グループに属している必要があります。詳細は、『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』のTimesTenのインストール関する説明を参照してください。

ユーザーの作成およびデータベースでのユーザーの識別

内部ユーザーを作成したり、CREATE USER文を使用して外部ユーザーを識別できるのは、インスタンス管理者またはADMIN権限を持つユーザーのみです。セキュリティ上の理由から、CREATE USER文またはALTER USER 文で内部ユーザーを作成または変更するには、TimesTenデータベースへの直接接続のみを使用できます。したがって、CREATE USERまたはALTER USERをクライアント/サーバー・アプリケーションから実行したり、パススルー実行によって実行することはできません。ALTER USER文を使用して、内部ユーザーを外部ユーザーに変更したり、外部ユーザーを内部ユーザーに変更できます。CREATE USER文の構文の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の「SQL文」の章を参照してください。


注意:

ADMIN権限を持つユーザーの詳細は、「管理者権限の付与」を参照してください。

内部ユーザーを作成するには、CREATE USER文でユーザー名とパスワードを指定します。次の例では、内部ユーザーTERRYにパスワードsecretを指定します。

CREATE USER TERRY IDENTIFIED BY "secret";
User created.

外部ユーザーを識別するには、CREATE USER IDENTIFIED EXTERNALLY文でユーザー名を指定します。次の例では、外部ユーザーPATをTimesTenデータベースで識別できるようにします。

CREATE USER PAT IDENTIFIED EXTERNALLY;
User created.

外部ユーザーPATを内部ユーザーに変更するには、次のALTER USER文を実行します。

ALTER USER PAT IDENTIFIED BY "secret"; 

内部ユーザーPATを外部ユーザーに変更するには、次のALTER USER文を実行します。

ALTER USER PAT IDENTIFIED EXTERNALLY; 

次のシステム・ビューでSELECT文を実行すると、作成したユーザーを確認できます。

  • SYS.ALL_USERSでは、現在のユーザーに目視確認できるデータベースのすべてのユーザーが表示されます。

  • SYS.USER_USERSでは、データベースの現在のユーザーが示されます。

  • SYS.DBA_USERSでは、データベースのすべてのユーザーが示されます。このビューでSELECT文を実行するには、適切な権限が付与されている必要があります。

たとえば、現在のユーザーを表示するには、次の文を実行します。

SELECT * FROM sys.user_users;
< PAT, 4, OPEN, <NULL>, <NULL>, USERS, TEMP, 2009-02-25 12:00:17.027100, <NULL>, <NULL> >1 row found.

これらのビューの詳細は、Oracle TimesTen In-Memory Databaseのシステム表および制限についてのマニュアルのシステム表に関する説明を参照してください。

内部ユーザーのパスワードの変更

内部ユーザーのパスワードのみが、データベース内で変更可能です。ユーザーは、自分のパスワードを変更できます。ADMIN権限を持つユーザーは、すべてのユーザーのパスワードを変更できます。このようなユーザーは、ALTER USER文のIDENTIFIED BY句を使用してパスワードを変更できます。

たとえば、内部ユーザーTERRYのパスワードを現在の設定から12345に変更するには、次の文を実行します。

ALTER USER TERRY IDENTIFIED BY "12345";
User altered.

データベースからのユーザーの破棄

適切な権限が付与されていれば、データベースで作成されたユーザーをDROP USER文を使用して破棄できます。次のようなユーザーは破棄できません。

  • インスタンス管理者は削除できません。

  • ユーザーが所有するすべてのオブジェクトを削除してからでないと、そのユーザーを削除することはできません。

  • 現在データベースに接続しているユーザーを削除することはできません。

次のDROP USER文によって、データベースからユーザーTERRYが破棄されます。

Command> drop user terry;
User dropped.

インスタンス管理者を破棄しようとすると、次のエラーが表示されます。

Command> drop user instadmin;
15103: System-defined users and roles cannot be dropped
The command failed.

必要なADMIN権限を持たないユーザーPatが、ユーザーTerryを破棄しようとすると、次のエラーが表示されます。

Command> drop user terry;
15100: User PAT lacks privilege ADMIN
The command failed.

注意:

現時点では、DROP USER CASCADEはサポートされていません。

権限によるオブジェクトへの認可の付与

複数のユーザーがデータベース・オブジェクトにアクセス可能な場合、これらのオブジェクトへの認可は権限を使用して制御できます。オブジェクトには必ず所有者が存在します。あるユーザーが他のユーザーによって所有されているオブジェクトを変更できるかどうかは、権限によって制御されます。権限の付与または取消しを実行できるのはインスタンス管理者、ADMIN権限を持つユーザー、または特定のオブジェクトに対する権限の場合は、そのオブジェクトの所有者です。

次の項では、権限の使用によるオブジェクトへの認可について説明します。

権限の概要

TimesTenでは、データベース内のオブジェクトへの認可を、権限によってユーザーに付与します。ユーザーには、データベースのリソースやオブジェクトにアクセスするための権限が付与されている必要があります。これらの権限によって、各オブジェクトに対してユーザーが実行できる処理が制限されます。ユーザーは自分のスキーマに含まれるすべてのオブジェクトに対する権限をすべて持っており、これらを取り消すことはできません。他のユーザーのスキーマに含まれるオブジェクトの権限をユーザーに付与できます。

TimesTenでは、SQL文の実行時に各ユーザーの権限が評価されます。各SQL文は、任意のユーザーが実行できます。次に例を示します。

SELECT * from PAT.TABLE1;

この文をPatが実行する場合、Patはこのオブジェクトの所有者であるため、他に必要な権限はありません。一方、Terryなどの他のユーザーがこの文を実行する場合、TerryにはPAT.TABLE1に対するSELECT権限が必要です。

権限を使用すると次のことが可能になります。

  • ユーザー、アプリケーションまたは関数がアクセスできるデータまたはそれらが実行できる処理を定義できます。

  • ユーザーがシステム・パフォーマンスを低下させたり、システム・リソースを大量に消費することを防ぎます。たとえば、認可上の懸念からではなく、DMLパフォーマンスを低下させたり、ディスク領域を占有する可能性があるという理由から、索引作成を制限する権限を指定できます。

権限の一部の例には、次の処理を実行する権限が含まれます。

  • データベースへの接続およびセッションの作成

  • 表の作成

  • 他のユーザーが所有する表からの行の選択

  • キャッシュ・グループ処理の実行

また、次の処理を実行するには、ユーザーに特定の権限が必要になる場合があります。

  • 一部のTimesTen組込みプロシージャの実行。詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。

  • 一部のTimesTenコマンドライン・ユーティリティの実行。詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。

  • 初期接続属性を使用した接続の開始。詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』を参照してください。

  • 各SQL文の実行に必要な権限の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の各文の説明を参照してください。

権限には、次の2つのレベルがあります。

  • システム権限: この権限があると、すべてのオブジェクトへのアクセスなど、システム全体の機能を有効にできます。システム権限を付与されたユーザーは、標準的な管理者タスクを実行したり、他のユーザーのスキーマ内のオブジェクトにアクセスできます。この権限の適用範囲は、1つのオブジェクトに留まりません。この権限の付与は、信頼できるユーザーに制限してください。

  • オブジェクト権限: オブジェクトには、タイプに応じて関連付けられている権限があります。

このような権限のサブセットは、作成時に、PUBLICロールを介して各ユーザーに自動的に付与されます。権限階層のルールは、ユーザーに付与されているすべての権限に適用されます。

権限は、ユーザーがその業務に必要なタスクを完了できるように付与します。どのユーザーに権限を付与するかを計画し、必要な処理を実行するために必要な権限のみを付与してください。

権限のチェックは、準備時と各SQL文の初回実行時に行われます。それ以降にその文を実行したときにさらに権限のチェックが必要になるのは、データベースで取消し処理が行われる場合のみです。

システム権限

システム権限があるユーザーは、データベース内の複数のオブジェクトに対してシステムレベルのアクティビティを実行できます。データベースで特定の処理を実行する権限、または特定のタイプのオブジェクトに対する処理を実行する権限が付与されます。たとえば、データベースの他のユーザーのスキーマに含まれるオブジェクトを作成または変更できるようにするには、ユーザーにシステム権限が付与されている必要があります。

ユーザーにシステム権限を付与できるのは、インスタンス管理者またはADMIN権限を持つユーザーのみです。インスタンス管理者は常にすべてのシステム権限とオブジェクト権限を持っており、これらの権限は取り消すことができません。


注意:

インスタンス管理者は、すべての処理を実行できます。そのため、インスタンス管理者は、ADMIN権限を持つユーザーが実行できるすべての処理を実行できます。

システム権限には、ADMINSELECT ANY TABLECREATE SESSIONCREATE ANY SEQUENCEなどがあります。システム権限の付与と取消しの詳細は、「システム権限の付与または取消し」を参照してください。

オブジェクト権限

オブジェクト権限を持つユーザーは、定義されている処理を特定のオブジェクトに対して実行できます。オブジェクト・タイプごとに個別のオブジェクト権限を使用できます。

すべてのオブジェクト所有者は、自分のオブジェクトにアクセスできます。また、自分のオブジェクトに対するすべての権限を持っています。他のユーザーが所有するオブジェクトには、そのオブジェクトの所有者またはADMIN権限を持つユーザーから明示的にアクセス権を付与されないかぎり、アクセスできません。 PUBLICロールに特定のオブジェクトへのアクセス権が付与されている場合、すべてのデータベース・ユーザーがそのオブジェクトにアクセスできます。ADMIN権限を持つユーザーであっても、所有者がそのオブジェクトに対して持っている権限を取り消すことはできません。


注意:

キャッシュ・グループ・オブジェクトやレプリケーション・オブジェクトなどの一部のオブジェクトでは、ユーザーにシステム・レベルの権限があって初めて特定の処理を実行できます。

オブジェクトへのアクセスを制御するには、ユーザーがオブジェクトの所有者であるか、またはオブジェクトに対する処理を実行するための適切なオブジェクト権限をユーザーが持っていることが必要です。オブジェクト権限の付与または取消しを実行できるのは、インスタンス管理者、ADMIN権限を持つユーザー、または該当するオブジェクトの所有者です。

オブジェクト権限の付与と取消しの詳細は、「オブジェクト権限の付与または取消し」を参照してください。

PUBLICロール

各TimesTenデータベースに、PUBLICという名前のロールが自動的に作成されます。このロールには、デフォルトで、特定の権限が付与されます。TimesTenデータベースで作成された各ユーザーには、PUBLICロールに付与されている各権限が付与されます。つまり、インスタンス管理者またはADMIN権限を持つユーザーがユーザーを作成した場合、PUBLICロールに関連付けられている権限が各ユーザーに付与されます。PUBLICロールに後で付与された権限は、同時にすべてのユーザーに自動的に付与されます。ADMIN権限を持つユーザーは、PUBLICロールに対する権限の付与または取消しによって、すべてのユーザーのデフォルト権限を追加または削除できます。ユーザーがPUBLICからある権限を取り消すと、その権限を明示的に付与されたユーザーを除いて、各ユーザーからその権限が取り消されます。


注意:

この動作の唯一の例外は、SYSユーザーによってPUBLICに付与された権限は取り消せないことです。データベース作成の一環として付与された権限は、次のSQL文を実行して確認できます。
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTOR = 'SYS'

次の例では、ユーザーPatにSELECT ANY TABLE権限が、PUBLICSELECT ANY TABLE権限がそれぞれ付与されます。次に、SYS.DBA_SYS_PRIVSビューのすべてのシステム権限が表示されます。このビューの詳細は、「ユーザー権限の表示」を参照してください。PUBLICからSELECT ANY TABLEを取り消しても、PatからはSELECT ANY TABLEは削除されず、SYS.DBA_SYS_PRIVSビューによって再度表示されます。

Command> GRANT SELECT ANY TABLE TO PAT;
Command> GRANT SELECT ANY TABLE TO PUBLIC;
Command> SELECT * FROM SYS.DBA_SYS_PRIVS;
< SYS, ADMIN, NO >
< PUBLIC, SELECT ANY TABLE, NO >
< SYSTEM, ADMIN, NO >
< PAT, ADMIN, NO >
< PAT, SELECT ANY TABLE, NO >
5 rows found.
Command> REVOKE SELECT ANY TABLE FROM PUBLIC;
Command> select * from sys.dba_sys_privs;
< SYS, ADMIN, NO >
< SYSTEM, ADMIN, NO >
< PAT, ADMIN, NO >
< PAT, SELECT ANY TABLE, NO >
4 rows found.

必要な場合は、PUBLICADMIN権限を付与するようなデータベースを作成することがあります。この場合、すべてのユーザーにADMIN権限が付与されるため、ユーザーはすべてのデータベース・オブジェクトに制限なくアクセスでき、インスタンス管理者が実施する必要があるタスクを除くすべての管理タスクを実行できるようになります。このような状況ではデータベースのセキュリティを確保できないため、長期的に使用する方法としては推奨されません。この方法をいつどのような目的で採用するかの詳細は、『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』のデータベースのアップグレードに関する説明を参照してください。


注意:

PUBLICロールにデフォルトで割り当てられる権限の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のSQL文に関する説明を参照してください。

PUBLICロールでは、特定のオブジェクト、システム表およびビューへのアクセスも付与されます。デフォルトでは、新しく作成されたTimesTenデータベースでは、PUBLICに、各種システム表およびビューと、PL/SQL関数、プロシージャおよびパッケージに対するSELECT権限とEXECUTE権限があります。PUBLIC、および後でユーザーに付与された権限のリストは、SYS.DBA_TAB_PRIVSビューに問い合せることで表示できます。次の問合せでは、PUBLICに付与されている権限が5列目に表示されます。

Command> DESC SYS.DBA_TAB_PRIVS;
View SYS.DBA_TAB_PRIVS:
  Columns:
    GRANTEE                         VARCHAR2 (30) INLINE
    OWNER                           VARCHAR2 (30) INLINE
    TABLE_NAME                      VARCHAR2 (30) INLINE
    GRANTOR                         VARCHAR2 (30) INLINE
    PRIVILEGE                       VARCHAR2 (40) INLINE NOT NULL
    GRANTABLE                       VARCHAR2 (3) INLINE NOT NULL
    HIERARCHY                       VARCHAR2 (3) INLINE NOT NULL
1 view found.

Command> SELECT * FROM SYS.DBA_TAB_PRIVS WHERE GRANTEE='PUBLIC';
< PUBLIC, SYS, TABLES, SYS, SELECT, NO, NO >
< PUBLIC, SYS, COLUMNS, SYS, SELECT, NO, NO >
< PUBLIC, SYS, INDEXES, SYS, SELECT, NO, NO >
< PUBLIC, SYS, USER_COL_PRIVS, SYS, SELECT, NO, NO >
< PUBLIC, SYS, PUBLIC_DEPENDENCY, SYS, SELECT, NO, NO >
< PUBLIC, SYS, USER_OBJECT_SIZE, SYS, SELECT, NO, NO >
< PUBLIC, SYS, STANDARD, SYS, EXECUTE, NO, NO >
< PUBLIC, SYS, UTL_IDENT, SYS, EXECUTE, NO, NO >
< PUBLIC, SYS, TT_DB_VERSION, SYS, EXECUTE, NO, NO >
< PUBLIC, SYS, PLITBLM, SYS, EXECUTE, NO, NO >
< PUBLIC, SYS, DBMS_OUTPUT, SYS, EXECUTE, NO, NO >
< PUBLIC, SYS, DBMS_SQL, SYS, EXECUTE, NO, NO >
< PUBLIC, SYS, DBMS_STANDARD, SYS, EXECUTE, NO, NO >
< PUBLIC, SYS, DBMS_PREPROCESSOR, SYS, EXECUTE, NO, NO >
< PUBLIC, SYS, UTL_RAW, SYS, EXECUTE, NO, NO >
< PUBLIC, SYS, DBMS_UTILITY, SYS, EXECUTE, NO, NO >
< PUBLIC, SYS, DBMS_RANDOM, SYS, EXECUTE, NO, NO >
...
57 rows found.

権限階層のルール

すべての権限が1つの階層となっています。上位レベルの権限では、関連する下位レベルの権限が付与されます。たとえば、ADMIN権限では、すべての権限が付与されます。SELECT ANY TABLE権限では、任意の表に対するSELECT権限が付与されます。

ある処理を行うための権限をユーザーが必要な場合は、常に、そのユーザーが対象オブジェクトの所有者であるかどうか、または処理に必要な権限を付与する上位レベルの権限を持っているかどうかを確認して、そのユーザーが必要な権限を持っているかどうかを判断できます。たとえば、ユーザーPatがTerry.Table2に対するSELECT権限を必要としている場合、次の事項を確認します。

  • Patがそのオブジェクトの所有者かどうか。所有者の場合は、自分のオブジェクトに対するすべてのオブジェクト権限があります。

  • PatにSELECT ANY TABLE権限が付与されているかどうか。この権限を持っている場合、Patは任意の表、ビューおよびマテリアライズド・ビューに対してSELECT ONを実行できます。

  • PatにADMIN権限が付与されているかどうか。付与されている場合、Patは有効なSQL操作であればすべて実行できます。

上位レベルに含まれる権限を付与しても、エラーは発生しません。一方、権限を取り消す場合は、付与したときと同じ単位で取り消す必要があります。次に示す、ユーザーPATに対する付与文および取消し文では、任意の表を更新できる権限と特定の表を更新できる権限が付与されます。

GRANT UPDATE ANY TABLE TO PAT;
GRANT UPDATE ON HR.employees TO PAT;
REVOKE UPDATE ON HR.employees FROM PAT;
 

UPDATE ANY TABLE権限では、データベースに含まれる任意の表を更新する権限が付与されます。2番目の文は、HR.employees表に対するUPDATE権限が明示的に付与されます。UPDATE ANY TABLEによってemployeesを含むすべての表へのアクセス権限が付与されるため、この2番目の文は不要ですが、エラーにはなりません。2番目の付与を取り消すことは可能ですが、最初に実行されたUPDATE ANY TABLEシステム権限の付与には影響しません。そのため、PATは引き続きHR.employees表を更新できます。

取消しは、付与したときと同じ単位で行う必要があります。次の例では、UPDATE ANY TABLEシステム権限をPATに付与します。あるユーザーが、自分のHR.employees表の更新権限を取り消そうとします。UPDATE ANY TABLE権限はシステム権限ですが、UPDATE権限はオブジェクト権限です。付与されていない単位に対するREVOKE文の実行は失敗し、エラーになります。

GRANT UPDATE ANY TABLE TO PAT;
REVOKE UPDATE ON HR.employees FROM PAT;
15143: REVOKE failed: User PAT does not have object privilege UPDATE on HR.EMPLOYEES
The command failed.

権限階層の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の権限についての説明を参照してください。

システム権限の付与または取消し

システム権限を付与するか取り消すには、GRANT文またはREVOKE文を使用します。システム権限を付与するか取り消すことができるのは、インスタンス管理者またはADMIN権限を持つユーザーのみです。システム権限のGRANTまたはREVOKE構文には、システム権限とその権限が付与されるユーザーが含まれます。GRANT文およびREVOKE文の構文と、各SQL文を実行するために必要な権限の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の「SQL文」の章を参照してください。


注意:

オブジェクト権限の付与および取消し方法の詳細は、「オブジェクト権限の付与または取消し」を参照してください。

最も強力なシステム権限はADMINです。ユーザーにADMIN権限を付与すると、このユーザーは、任意のデータベース・オブジェクトに対してすべての処理を実行できるようになります。

各ユーザーは自分のシステム権限をSYS.USER_SYS_PRIVSシステム・ビューで確認できます。ADMIN権限を持つユーザーは、すべてのユーザーのすべてのシステム権限をSYS.DBA_SYS_PRIVSシステム表で確認できます。システム・ビューの詳細は、「ユーザー権限の表示」を参照してください。

次の項では、TimesTenで使用できるシステム権限の一部について説明します。


注意:

システム権限の完全なリストは、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の権限に関する説明を参照してください。

管理者権限の付与

ADMIN権限にはシステム権限とオブジェクト権限がすべて含まれており、この権限が付与されたユーザーは、すべての管理タスクと有効なデータベース処理を実行できます。ADMIN権限を持つユーザーは、すべてのオブジェクトに対して、作成、変更、破棄、選択、更新、挿入または削除処理を実行できます。また、ADMIN権限を持つユーザーは、レプリケーション・タスク、チェックポイント処理、バックアップ、移行、ユーザーの作成と削除などを実行できます。すべての権限を付与するか取り消すことができるのは、ADMIN権限を持つユーザーのみです。

すべてのシステム表およびビューをデフォルトで表示できるのは、ADMIN権限を持つユーザーのみです。ADMIN権限を持つユーザーのみが、レプリケーション・スキーマまたはアクティブ・スタンバイ・ペアを作成、変更または破棄できます。次のビューおよびパッケージにアクセスできるのは、ADMIN権限を持つユーザーのみです。

  • SYS.DBA_TAB_PRIVSビュー

  • SYS.DBA_SYS_PRIVSビュー

  • SYS.UTL_RECOMPパッケージ


注意:

システム表またはビューでユーザーの権限を確認する方法の詳細は、「ユーザー権限の表示」を参照してください。

ユーザーTERRYADMIN権限を付与するには、次の文を実行します。

GRANT ADMIN TO TERRY;

ADMIN権限を持っているユーザーは、他のユーザーに権限を付与できます。たとえば、ADMIN権限を持つユーザーは、次の文を実行して、PATが所有するdepartments表に対するSELECT権限をTERRYに付与できます。

GRANT SELECT ON PAT.departments TO TERRY;

注意:

Patはdepartmentsの所有者であるため、PatもTerryにSELECTオブジェクト権限を付与できます。

ALL PRIVILEGESの付与

ALL PRIVILEGESでは、ユーザーにすべてのシステム権限が付与されます。ユーザーにほとんどのシステム権限を付与する場合は、ALL PRIVILEGESをユーザーに付与してから、付与しないシステム権限のみを取り消します。次の例では、すべてのシステム権限をユーザーPATに付与します。次に、ADMIN権限とDROP ANY TABLE権限を取り消して、Patが管理タスクのすべてと、表の削除を実行できないようにします。

GRANT ALL PRIVILEGES TO PAT;
REVOKE ADMIN, DROP ANY TABLE FROM PAT;

ユーザーに付与されたすべての権限をREVOKE ALL PRIVILEGESを使用して取り消すこともできます。これにより、PUBLICロールから継承されたものを除いて、ユーザーに付与されたシステム権限がすべて取り消されます。次にユーザーPATの例を示します。

REVOKE ALL PRIVILEGES FROM PAT;

データベースに接続するための権限の付与

TimesTenデータベースへのアクセスには、データソース名(DSN)を使用します。ユーザーが、権限のない接続属性(初期接続属性など)を持つDSNを使用しようとすると、エラーが表示されます。

初期接続属性の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』の接続属性に関する説明を参照してください。

データベースに接続するには、すべてのユーザーに、ADMIN権限を持つユーザーからCREATE SESSIONシステム権限が付与されている必要があります。CREATE SESSIONシステム権限によって、データベースへの接続が認可されます。次の例では、CREATE SESSION権限をPATに付与します。

GRANT CREATE SESSION TO PAT;

ADMIN権限を持つユーザーは、PUBLICロールにこの権限を付与することによって、CREATE SESSION権限をすべてのユーザーに付与できます。これにより、すべてのユーザーがデータベースに接続できるようになります。

GRANT CREATE SESSION TO PUBLIC;

追加のシステム権限の付与

ADMIN権限の他にも、権限のスーパーセットを付与するシステム権限がいくつかあります。ここでは、そのような権限のいくつかを簡単に説明します。

  • XLA: XLAリーダーは、システム全体に影響を与える可能性があります。追加のログ・ボリュームを作成しますが、そのブックマークを先に進めることができない場合にログが長期間保持されます。XLAリーダーとして接続するには、XLAシステム権限が必要です。

  • CACHE_MANAGER: CACHE_MANAGER権限は、キャッシュ・グループ管理者処理のために使用されます。詳細は、「キャッシュ・グループの権限の付与または取消し」を参照してください。

任意のデータベース・オブジェクト・タイプに対するユーザーによる処理の許可

ユーザーに対する権限の付与または取消しを行う場合は、単一オブジェクトを対象として行うか、データベースに含まれる特定のタイプのオブジェクトすべてを対象にすることができます。


注意:

単一オブジェクトの権限の付与または取消しを行う場合は、オブジェクト権限を使用します。詳細は、「オブジェクト権限の付与または取消し」を参照してください。

ANYキーワードを含むシステム権限を持つユーザーは、データベースに含まれるタイプが同じすべてのオブジェクトに対して処理を実行できます。これらのシステム権限には、CREATE ANY object_typeDROP ANY object_typeALTER ANY object_typeSELECT ANY object_typeUPDATE ANY TABLEINSERT ANY TABLEDELETE ANY TABLEおよびEXECUTE ANY PROCEDUREがあります。


注意:

これらの権限の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の権限に関する説明を参照してください。ANYキーワードを含むキャッシュ・グループ・システム権限の詳細は、「キャッシュ・グループの権限の付与または取消し」を参照してください。

次の項では、CREATE ANY object_typeDROP ANY object_typeALTER ANY object_typeの各システム権限について詳しく説明します。

表、索引、ビュー、マテリアライズド・ビュー、順序、PL/SQLプロシージャ、PL/SQL関数、PL/SQLパッケージまたはシノニムの作成

表、ビュー、マテリアライズド・ビュー、順序、PL/SQLプロシージャ、PL/SQL関数、PL/SQLパッケージまたはシノニムをユーザーまたは他のユーザーのネームスペース内に作成するには、適切なCREATE object_typeシステム権限またはCREATE ANY object_typeシステム権限を持つ必要があります。

ここでは、CREATEシステム権限およびCREATE ANYシステム権限について説明します。

  • CREATE object_type権限を付与されたユーザーは、自分のスキーマ内でのみオブジェクトを作成できます。そのユーザーは作成したオブジェクトの所有者となり、自動的にそのオブジェクトに対するすべての権限が付与されます。

    ユーザーがキャッシュ・グループを作成するには、他の権限が必要です。

  • CREATE ANY object_type権限を付与されたユーザーは、他のユーザーのスキーマ内も含めて、該当するタイプの任意のオブジェクトをデータベースに作成できます。オブジェクト・タイプには、表、索引、ビュー、マテリアライズド・ビュー、順序、シノニムおよびプロシージャがあります。CREATE ANY object_type権限には、CREATE ANY TABLECREATE ANY INDEXCREATE ANY VIEWCREATE ANY MATERIALIZED VIEWCREATE ANY SEQUENCECREATE ANY SYNONYMおよびCREATE ANY PROCEDUREがあります。


    注意:

    CREATE ANY PROCEDURE権限またはEXECUTE ANY PROCEDURE権限を付与する場合には注意が必要です。特に、この2つの権限の両方が付与された場合は、誤用される可能性があります。

次の例では、他のユーザーのスキーマに任意の表を作成する権限をユーザーTERRYに付与します。

GRANT CREATE ANY TABLE TO TERRY;

次の例では、自分のスキーマに表を作成する権限を付与します。

GRANT CREATE TABLE TO TERRY;
表、ビュー、マテリアライズド・ビュー、順序、プロシージャ、関数、パッケージまたはシノニムの削除

他のユーザーが所有するobject_typeのオブジェクトを破棄できるようにするには、DROP ANY object_typeシステム権限を付与します。たとえば、この権限をPATに付与すると、PATはユーザーHRが所有するemployees表を破棄できるようになります。ユーザーには、自分が所有する表を破棄する権限が常にあります。DROP ANY object_type権限を持つユーザーは、データベースに含まれる指定されたタイプの任意のオブジェクトを破棄できます。ただし、キャッシュ・グループを破棄するには他の権限が必要です。

表、ビュー、マテリアライズド・ビュー、順序、プロシージャ、関数またはパッケージの変更

ALTER ANY PROCEDUREを持つユーザーは、データベースに含まれる任意のプロシージャ、関数またはパッケージを変更できます。ALTER ANY object_type権限は、自分が所有していないオブジェクトのプロパティを変更する場合に必要です。たとえば、プロシージャが、Proc1という名前のHRスキーマで作成され、PATにはALTER ANY PROCEDURE特権を付与されている場合、PATは、プロシージャHR.Proc1を正常に変更できます。

オブジェクト権限の付与または取消し

オブジェクト権限を付与するか取り消すには、GRANT文またはREVOKE文を使用します。オブジェクト・レベルのGRANT文またはREVOKE文の構文には、付与または取消しの対象となるオブジェクトの名前が必要です。GRANT文およびREVOKE文の構文の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の「SQL文」の章を参照してください。

次の項では、キャッシュ管理オブジェクトを除くすべてのオブジェクト・タイプのオブジェクト権限について説明し、例を示します。キャッシュ・オブジェクト権限の詳細は、「キャッシュ・グループの権限の付与または取消し」を参照してください。


注意:

  • 各SQL文には、特定の権限が必要となる可能性があります。必要な権限の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の「SQL文」の章で各文の説明を参照してください。

  • オブジェクト権限の完全なリストは、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の権限に関する説明を参照してください。


すべてのオブジェクト権限の付与

ALLキーワードを使用すると、オブジェクトに対するすべての権限をユーザーに付与できます。実質的に、オブジェクトに対する任意の処理を実行する権限がユーザーに付与されます。

DROPまたはALTERに必要なオブジェクト権限は特にありません。これらの処理はオブジェクトごとに許可されるわけではなく、オブジェクトの所有者ではないユーザーに適切なシステム権限が付与されると、そのオブジェクトに対してDROPまたはALTERを実行できるようになります。

たとえば、GRANT ALL ON employees TO PATによって、employees表に対するすべの権限がユーザーPATに付与されます。すべてのオブジェクト権限を付与した後に、権限を個別に取り消すことが可能です。たとえば、次の一連の処理は有効です。

GRANT ALL ON HR.employees TO PAT;
REVOKE DELETE ON HR.employees FROM PAT; 

また、REVOKE ALLを使用すると、オブジェクトについてユーザーに付与されたオブジェクト権限をすべて取り消すことができます。これにより、ユーザーが該当オブジェクトに関して持っていたすべての権限が取り消されます。ユーザーPATの例を示します。

REVOKE ALL ON HR.employees FROM PAT;

GRANT ALL文とREVOKE ALL文は、オブジェクトの所有者とADMIN権限を持つユーザーの両方が実行できます。

表のオブジェクト権限

自分が所有していない表に対して処理を実行する場合、そのユーザーには、その表に関する適切なオブジェクト権限が付与されている必要があります。このような権限には、キャッシュ・グループに含まれる表に関する権限などがあります。表に関するオブジェクト権限には、SELECTUPDATEDELETEINSERTINDEXおよびREFERENCESがあります。

次のオブジェクト権限は、認可上の理由からのみでなく、パフォーマンス上の理由からも適切です。

  • INDEX権限を持つユーザーは、表の索引を作成できます。索引の作成によって追加の領域が消費され、表に対するDMLのパフォーマンスが影響を受けます。INDEXは、索引を作成するユーザーに明示的に付与する必要があります。

  • REFERENCES権限を持つユーザーは、表の外部キー依存性を作成できます。外部キー依存性は、親のDML操作のパフォーマンスに影響を与えます。REFERENCES権限の詳細は、「REFERENCES句による外部キーの作成時に必要なオブジェクト権限」を参照してください。

次の例では、HRスキーマ内のemployees表のSELECTオブジェクト権限をユーザーPATに付与します。

GRANT SELECT ON HR.employees TO PAT;

次の例では、ユーザーHRが所有するemployees表のUPDATEE権限をユーザーPATに付与します。

GRANT UPDATE ON HR.employees TO PAT; 

ビューのオブジェクト権限

ユーザーがビューを作成できるようにするには、CREATE VIEW権限またはCREATE ANY VIEW権限を付与する必要があります。自分が所有していないビューから選択する場合、ユーザーには、そのビューのSELECTオブジェクト権限が付与されている必要があります。また、ビュー自体が有効である必要があります。具体的には、そのビューが参照しているすべてのオブジェクトに対するSELECTオブジェクト権限がそのビューの所有者に付与されている必要があります。

ユーザーPATが自分が所有者であるビューを作成し、そのビューの参照先が自分が所有するオブジェクトのみである場合、PatはCREATE VIEW権限があればこの処理を実行できます。PatがTerryが所有者であるビューを作成し、そのビューの参照先がTerryが所有するオブジェクトである場合、この処理を実行するためにPatが必要とする権限はCREATE ANY VIEW権限です。次に例を示します。

CREATE VIEW PAT.VIEW1 as select * from PAT.TABLE1;

この例の場合、PatにCREATE VIEW権限があればこの文を実行できます。

ユーザーPatがビューを作成し、そのビューでTerryが所有する表を参照する場合、PatにはCREATE VIEW権限と、そのビューが参照するすべてのオブジェクトに対するCREATE VIEWオブジェクト権限が必要となります。ビューの作成者にではなく、ビューの所有者に、ビューが参照するオブジェクトに対するSELECTオブジェクト権限が付与されている必要があります。そのため、この例では、Terryが所有するTABLE2に対するSELECTオブジェクト権限がPatに付与されている必要があります。これらの権限が付与されると、Patは次の文を実行できます。

CREATE VIEW PAT.VIEW2 as select * from TERRY.TABLE2;

ここで、3人目のユーザーJoeがこの文を実行する場合、Joeにはビューを作成するためにCREATE ANY VIEW権限が必要となります。この文を実行するのはJoeですが、この場合もビューの所有者であるPatに、Terryの表に対して選択処理を実行するためのSELECTオブジェクト権限が付与されている必要があります。

TimesTenでは、参照されるすべてのビューが実行時に検証されます。該当する処理を実行するために必要な権限がない場合、その権限について通知が行われます。

次に例を示します。

CREATE VIEW PAT.VIEW2 as select * from TERRY.TABLE2;
CREATE VIEW JOE.VIEW4 as select * from PAT.VIEW2, TERRY.TABLE4;
 

Patがこの文を実行する場合は、次の権限が付与されている必要があります。

  • CREATE ANY VIEW権限。Patが自分のスキーマの他にJoeのスキーマにビューを作成するために必要です。

  • ユーザーJoeに、Terry.Table4に対するSELECTオブジェクト権限が付与されている必要があります。

  • ユーザーJoeに、Pat.View2に対するSELECTオブジェクト権限が付与されている必要があります。

  • ユーザーPatに、Terry.Table2に対するSELECTオブジェクト権限が付与されている必要があります。

すべての参照の検証時に、TERRY.TABLE2に対するSELECTオブジェクト権限がPatにあるかどうかが確認され、PAT.VIEW2が引き続き有効かどうかが判断されます。ビューからの選択を実行すると、そのビュー自体とそのビューが参照している他のビューが有効かどうかが検証されます。

順序のオブジェクト権限

自分が所有していない順序に対して処理を実行する場合、ユーザーには、SELECTオブジェクト権限が付与されている必要があります。順序に対するSELECT権限を持つユーザーは、最終的にその順序を更新するNEXTVALのような処理も含めて、順序に対するすべての処理を実行できます。

たとえば、HRスキーマのemployees_seq順序に対するSELECT権限をユーザーPATに付与するには、次の文を発行します。

GRANT SELECT ON HR.employees_seq TO PAT; 

PATは、この後、次の文を使用してこの順序の次の値を生成できます。

SELECT HR.employees_seq.NEXTVAL FROM DUAL;
< 207 >
1 row found. 

マテリアライズド・ビューのオブジェクト権限

マテリアライズド・ビュを作成するには、ユーザーにCREATE MATERIALIZED VIEW権限が必要です。他のユーザーのスキーマでマテリアライズド・ビューを作成するユーザーには、CREATE ANY MATERIALIZED VIEW権限が必要です。

マテリアライズド・ビューの所有者には、そのビュー内のすべてのディテール表に対してCREATE TABLE権限およびSELECT権限が必要です。ただし、SELECT ANY TABLEADMINなどの上位レベルのシステム権限がすでに付与されているマテリアライズド・ビューの所有者には、ディテール表に対するSELECT権限が自動的に付与されます。

自分が所有していないマテリアライズド・ビューから選択する場合、ユーザーには、そのマテリアライズド・ビューに対するSELECTINDEXREFERENCESなどのオブジェクト権限が付与されている必要があります。これらの必要な権限の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の該当するSQL文を参照してください。

無効なマテリアライズド・ビューの動作

マテリアライズド・ビューは有効である必要があります。具体的には、そのビューが参照しているすべてのディテール表に対するSELECTオブジェクト権限がそのビューの所有者に付与され、保持されている必要があります。既存のマテリアライズド・ビューの所有者が、そのビューのベースとなるディテール表に対するSELECT権限を保持しなくなると、そのマテリアライズド・ビューは無効となります。

マテリアライズド・ビューのステータスは、SYS.DBA_OBJECTSSYS.ALL_OBJECTSおよびSYS.USER_OBJECTSビューのSTATUS列に表示されます。マテリアライズド・ビューの所有者は、USER_OBJECTSビューでそのマテリアライズド・ビューのステータスを確認できます。または、マテリアライズド・ビューが無効になると、INVALIDをそのビューに付加するttIsql describeコマンドを実行します。


注意:

SELECT ANY TABLEADMINなどの上位レベルのシステム権限が付与されていたマテリアライズド・ビューの所有者は、そのシステム権限が取り消されると、ディテール表に対する必要なSELECT権限を失います。その時点で、マテリアライズド・ビューは無効となります。

  • その場合でも、ユーザーは無効な非同期マテリアライズド・ビューからエラーなしで選択することは可能です。ただし、無効な同期マテリアライズド・ビューから選択すると、エラーが表示されます。

  • 該当する権限を持つユーザーは、マテリアライズド・ビューのディテール表も更新できます。ただし、無効なマテリアライズド・ビューにそれらの変更は反映されません。さらに、非同期マテリアライズド・ビューについては、有効なマテリアライズド・ビューが非同期マテリアライズド・ビューに依存しない場合、マテリアライズド・ビュー・ログも更新されません。

  • 無効な同期マテリアライズド・ビューに対して実行されるREFRESHは、エラーを伴って失敗します。

  • 以前取り消された権限が再度付与されたマテリアライズド・ビューの所有者の場合、無効なCOMPLETE非同期マテリアライズド・ビューに対するREFRESHは正常に終了し、そのビューは有効になります。

  • 無効なマテリアライズド・ビューを修正するには、適切な権限をそのビューの所有者に付与した後、ビューを破棄してから再作成する必要があります。

REFERENCES句による外部キーの作成時に必要なオブジェクト権限

CREATE文またはALTER TABLE文のREFERENCES句では、親表列(TABLE2.PK)に新しい子表列(TABLE1.COL1)からの外部キー依存性が作成されます。次に例を示します。

ALTER TABLE PAT.TABLE1 ADD CONSTRAINT FK1
    FOREIGN KEY (COL1) REFERENCES PAT.TABLE2 (PK);

この例のSQLを実行するユーザーには、ALTER ANY TABLE権限が必要です。Patは両方の表を所有しているため、他の権限は不要です。

ただし、実行ユーザーが所有していない表がREFERENCES句によって参照されている場合、自分が所有していない表に対するREFERENCESオブジェクト権限がないと実行可能になりません。次に例を示します。

ALTER TABLE PAT.TABLE1 ADD CONSTRAINT FK1
    FOREIGN KEY (COL1) REFERENCES TERRY.TABLE2 (PK);

この例のSQLを実行するユーザーには、ALTER ANY TABLE権限が必要です。前の例と同様に、このSQLの実行ユーザーがPatである場合、表の所有者は自分が所有する表を常に変更できるため、ALTER ANY TABLE権限は不要です。また、Terryが所有する表に関連する外部キーをユーザーPatが作成できるようにするには、PatにTERRY.TABLE2に対するREFERENCES権限が付与されている必要があります。

子表を作成または変更できるユーザーが外部キー依存性を作成するには、親表に対するREFERENCESオブジェクト権限が必要です。REFERENCES権限は、親表の外部キーを作成するユーザーにSELECT権限を暗黙的に付与します。ただし、この暗黙的な付与によって親表のSELECT権限がユーザーに付与されるわけではないため、親表に対する権限がREFERENCES権限のみのユーザーがどのような SELECT文を実行しても失敗します。

関数、プロシージャおよびパッケージのオブジェクト権限

自分が所有していないPL/SQL関数、PL/SQLプロシージャまたはPL/SQLパッケージに対する処理を実行する場合、ユーザーには、EXECUTEオブジェクト権限が付与されている必要があります。ユーザーにパッケージに対するEXECUTE権限を付与すると、そのコンポーネント・プロシージャおよび関数に対する EXECUTE権限が自動的に付与されます。

この権限によって、次の処理を実行する権限が付与されます。

  • プロシージャまたは関数を実行します。

  • パッケージの仕様で宣言されている任意のプログラム・オブジェクトにアクセスします。

  • 現時点で無効または未コンパイルの関数またはプロシージャのコール時にオブジェクトを暗黙的にコンパイルします。

EXECUTE権限を持つユーザーは、プロシージャ、関数またはパッケージを作成、破棄または変更できません。これらの処理には、適切なシステム権限が必要です。たとえば、ALTER PROCEDUREまたはALTER FUNCTIONを使用して明示的にコンパイルするには、ユーザーにALTER ANY PROCEDUREシステム権限が付与されている必要があります。関数、プロシージャまたはパッケージに関するシステム権限の詳細は、「任意のデータベース・オブジェクト・タイプに対するユーザーによる処理の許可」を参照してください。

シノニムのオブジェクト権限

ユーザーが、プライベート・シノニムまたはパブリック・シノニムを作成または破棄するには、次の権限が必要です。

表4-1 シノニムの権限

アクション 必要な権限

ユーザー自身のスキーマでプライベート・シノニムを作成します。

CREATE SYNONYM

他のユーザーのスキーマでプライベート・シノニムを作成します。

CREATE ANY SYNONYM

パブリック・シノニムを作成します。

CREATE PUBLIC SYNONYM

ユーザー自身のスキーマでプライベート・シノニムを破棄します。

権限は不要です。

他のユーザーのスキーマでプライベート・シノニムを破棄します。

DROP ANY SYNONYM

パブリック・シノニムを破棄します。

DROP PUBLIC SYNONYM


さらに、シノニムを使用するには、ユーザーには、シノニムが参照するオブジェクトに対する適切はアクセス権限が必要です。たとえば、ビューに対するシノニムを作成し、作成したシノニムを使用してビューから選択を行うには、ビューからの選択に必要なSELECT権限が必要です。

単一のSQL文による複数の権限の付与または取消し

1つのGRANTまたはREVOKE文で、1人以上のユーザーに対し、同じデータベースを対象として複数のオブジェクト権限を付与できます。たとえば、次の例では、1つのSQL文で、HR.employees表に対するSELECTおよびUPDATEオブジェクト権限をTerryに付与します。

GRANT SELECT, UPDATE ON HR.employees TO TERRY;

また、1つのGRANTまたはREVOKE文で、1人以上のユーザーに複数のシステム権限を付与できます。次の例では、複数のシステム権限をTerryとPatの両方に付与します。

GRANT CREATE ANY TABLE, CREATE SESSION TO TERRY, PAT;

1つのGRANT文またはREVOKE文にシステム権限とオブジェクト権限の両方を含めることはできません。

キャッシュ・グループの権限の付与または取消し

ユーザーが任意のキャッシュ・グループに関連するアクティビティを実行できるようにするには、そのユーザーに適切なキャッシュ・グループ権限が付与される必要があります。キャッシュ・グループに対するシステム権限とオブジェクト権限があり、システム権限にはオブジェクトを限定しない機能が含まれます。


注意:

パススルーの場合、権限チェックはOracle Databaseによってユーザー資格証明を使用して実行されるため、権限の付与は必要ありません。パススルーの詳細は、『Oracle In-Memory Database Cacheユーザーズ・ガイド』を参照してください。

次の項では、キャッシュ・グループ権限の概要について説明します。

キャッシュ・グループ処理のためのシステム権限とオブジェクト権限の完全なリストは、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の権限に関する説明を参照してください。

キャッシュ・マネージャ権限

キャッシュ・グループ・システム権限を持つユーザーは、データベースに含まれるキャッシュ・グループ・オブジェクトを操作できます。CACHE_MANAGERシステム権限は、キャッシュ・グループの管理者権限です。CACHE_MANAGER権限が付与されたユーザーは、任意のキャッシュ・グループ処理を実行できます。この権限により、キャッシュ・グループ処理権限のすべてが付与されます。それらの権限については、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』の権限階層に関する説明の項に列挙されています。

読取り専用キャッシュ・グループの初期ロードを実行したり、読取り専用キャッシュ・グループの自動リフレッシュ状態を変更するには、CACHE_MANAGER権限が必要です。初期ロードを実行すると、キャッシュ・グループの自動リフレッシュの状態が一時停止からオンに暗黙的に変更されます。

次の例では、CACHE_MANAGER権限をPATに付与します。

GRANT CACHE_MANAGER TO PAT;

注意:

ASYNCHRONOUS WRITETHROUGH(AWT)キャッシュ・グループは、キャッシュ・グループとレプリケーションの両方の機能を持ちます。CACHE_MANAGER権限は、AWTキャッシュ・グループの作成に必要なすべての権限を付与します。

キャッシュ・グループのシステム権限

TimesTenユーザーが必要とする権限は、実行するキャッシュ・グループ処理のタイプによって決まります。

  • キャッシュ・グループを作成するには、CREATE CACHE GROUPシステム権限またはCREATE ANY CACHE GROUPシステム権限が必要です。さらに、基礎となるキャッシュ表を作成するには、その表を自分が所有するかどうかに応じて、CREATE ANY TABLE権限またはCREATE TABLE権限をいずれかが付与される必要があります。

  • 自分が所有していないキャッシュ・グループを破棄または変更する場合、ユーザーには、必要に応じてDROP ANY CACHE GROUP権限またはALTER ANY CACHE GROUP権限が付与されている必要があります。さらに、ユーザーが、自分が所有していない基礎となるキャッシュ表を破棄するには、DROP ANY TABLE権限を付与される必要があります。


注意:

すべてのキャッシュ・グループ権限の詳細は、『Oracle In-Memory Database Cacheユーザーズ・ガイド』のキャッシュ・インフラストラクチャの設定に関する説明の章を参照してください。

たとえば、次の例では、データベースに含まれる任意のキャッシュ・グループを変更する権限をユーザーに付与します。

GRANT ALTER ANY CACHE GROUP TO PAT;

注意:

Oracle表を所有したり、キャッシュ・グリッド情報を格納するには、Oracle Databaseに、特定の権限を持つユーザーを作成することも必要です。Oracleキャッシュ管理ユーザーおよび各キャッシュ処理を行うTimesTenキャッシュ・マネージャ・ユーザーに必要な権限については、『Oracle In-Memory Database Cacheユーザーズ・ガイド』のキャッシュ・インフラストラクチャの設定に関する説明を参照してください。

キャッシュ・グループ処理のための他のシステム権限は、自分が所有してないオブジェクトに対して次の処理を実行するためのものです。

  • FLUSH ANY CACHE GROUP: データベースに含まれる任意のキャッシュ・グループをフラッシュできます。

  • LOAD ANY CACHE GROUP: データベースに含まれる任意のキャッシュ・グループをロードできます。

  • UNLOAD ANY CACHE GROUP: データベースに含まれる任意のキャッシュ・グループをアンロードできます。

  • REFRESH ANY CACHE GROUP: データベースに含まれる任意のキャッシュ・グループをリフレッシュできます。

キャッシュ・グループのオブジェクト権限

キャッシュ・グループ処理のためのオブジェクト権限は、ユーザーが単一の定義済オブジェクトに対する処理を実行できるようにするために付与します。キャッシュ・グループ・オブジェクトに対するオブジェクト権限は、次のとおりです。

  • FLUSH: 他のユーザーが所有するキャッシュ・グループをフラッシュできます。

  • LOAD: 他のユーザーが所有するキャッシュ・グループをロードできます。

  • UNLOAD: 他のユーザーが所有するキャッシュ・グループをアンロードできます。

  • REFRESH: 他のユーザーが所有するキャッシュ・グループをリフレッシュできます。

たとえば、次の例では、Terryが所有するキャッシュ・グループCACHEGRPに対してFLUSHを実行するためのキャッシュ・グループ・オブジェクト権限をPATに付与します。

GRANT FLUSH ON TERRY.CACHEGRP TO PAT;
 

キャッシュ・グループ処理の詳細は、『Oracle In-Memory Database Cacheユーザーズ・ガイド』を参照してください。

ユーザー権限の表示

各ユーザーに付与された権限を表示するには、次のビューを使用します。

表4-2 システム権限ビュー

ビュー名 説明

SYS.USER_SYS_PRIVS

現在のユーザーに付与されているすべてのシステム権限を戻します。

SSYS.DBA_SYS_PRIVS

すべてのユーザーに付与される、PUBLICロールから継承されるシステム権限のリストを戻します。このビューからの選択にはADMIN権限が必要です。

SYS.USER_TAB_PRIVS

現在のユーザーに付与されているすべてのオブジェクト権限を戻します。

SYS.ALL_TAB_PRIVS

ユーザーに対してPUBLICロールから継承されるUSER_TAB_PRIVSとオブジェクト権限の両方の結果を戻します。これにより、ユーザーに付与されるすべてのオブジェクト権限が表示されます。

SYS.DBA_TAB_PRIVS

すべてのユーザーに付与される、PUBLICロールから継承されるオブジェクト権限を戻します。このビューからの選択にはADMIN権限が必要です。


たとえば、次の文を実行すると、すべてのユーザーに付与されるシステム権限がすべて表示されます。

Command> SELECT * FROM SYS.DBA_SYS_PRIVS;
< SYS, ADMIN, YES >
< SYSTEM, ADMIN, YES >
< TERRY, ADMIN, YES >
< TERRY, CREATE ANY TABLE, NO >
< PAT, CACHE_MANAGER, NO >
5 rows found.

注意:

これらのビューの詳細は、Oracle TimesTen In-Memory Databaseのシステム表および制限についてのマニュアルのシステム表に関する説明を参照してください。

ユーティリティ、組込みプロシージャおよび初期接続属性に必要な権限

ユーティリティおよび組込みプロシージャの多くは、その実行に特定の権限を必要とします。また、一部の初期接続属性では、変更または接続時に特定の権限を必要とします。初期接続属性は、データベースが最初にロードされたときに設定されます。初期接続属性設定でデータベースをロードできるのはインスタンス管理者のみです。それぞれに必要な権限の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のユーティリティ、組込みプロシージャまたは初期接続属性に関する説明を参照してください。

親子表の権限チェック・ルール

外部キー制約によって関連付けられている表がある場合は、次の事項が該当します。

  • 子表の外部キー制約にON DELETE CASCADEが指定されている場合は、子表に対する DELETE権限が明示的に付与されていなくても、ユーザーは子表からの削除を伴う親表からの行の削除を実行できます。ただし、この動作が自動で行われるようにするには、ユーザーに親表に対するDELETE権限が必要です。

  • 子表に対する挿入または更新を実行すると、親表に対する外部キー制約違反が子表に対する変更に伴って発生していないかどうかが確認されます。違反が発生する場合、ユーザーには子表に対するINSERT権限またはUPDATE権限が必要になりますが、親表に対するSELECT権限は不要です。

  • 子表を作成するユーザーが外部キー依存性を作成するには、親表に対するREFERENCESオブジェクト権限が必要です。詳細は、「REFERENCES句による外部キーの作成時に必要なオブジェクト権限」を参照してください。