CREATE CONTEXT
目的
CREATE
CONTEXT
文を使用すると、次の操作を実行できます。
-
コンテキスト(アプリケーションを検証および保護するアプリケーション定義の一連の属性)のネームスペースを作成します。
-
ネームスペースを、コンテキストを設定する外部作成パッケージと関連付けます。
専用パッケージのDBMS_SESSION
.SET_CONTEXT
プロシージャを使用して、コンテキスト属性を設定または再設定できます。
関連項目:
-
コンテキストについては、『Oracle Databaseセキュリティ・ガイド』を参照してください。
-
DBMS_SESSION
.SET_CONTEXT
プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
前提条件
コンテキスト・ネームスペースを作成する場合、CREATE
ANY
CONTEXT
システム権限が必要です。
CREATE CONTEXT
コマンドには、パッケージ名のシノニムを使用できないことに注意してください。
構文
create_context::=
セマンティクス
namespace
作成または変更するコンテキスト・ネームスペース名を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。コンテキスト・ネームスペースは、常にスキーマSYS
に格納されます。
関連項目:
コンテキスト・ネームスペースのネーミングに関するガイドラインは、「データベース・オブジェクトのネーミング規則」を参照してください。
schema
package
を所有するスキーマを指定します。schema
を指定しない場合、Oracle Databaseは現行のスキーマを使用します。
package
ユーザー・セッションのネームスペースに基づくコンテキスト属性を設定または再設定するPL/SQLパッケージを指定します。
柔軟に設計できるように、Oracle Databaseは、コンテキスト作成時のスキーマの存在またはパッケージの妥当性を検証しません。
SHARING
SHARING句は、アプリケーションのメンテナンスの際に、アプリケーション・ルートにオブジェクトを作成する場合に使用します。このタイプのオブジェクトはアプリケーション共通オブジェクトと呼ばれ、アプリケーション・ルートに属するアプリケーションPDBと共有できます。
次の共有属性のいずれかを使用して、オブジェクトを共有する方法を指定できます。
-
METADATA
- メタデータ・リンクはメタデータを共有しますが、そのデータは各コンテナに固有です。このタイプのオブジェクトは、メタデータリンク・アプリケーション共通オブジェクトと呼ばれます。 -
NONE
- オブジェクトは共有されず、アプリケーション・ルートでのみアクセスできます。
INITIALIZED句
INITIALIZED
句を使用すると、コンテキスト・ネームスペースを初期化するOracle Database以外のエンティティを指定できます。
EXTERNALLY
EXTERNALLY
を使用すると、セッション確立時にOCIインタフェースを使用してネームスペースを初期化できます。
関連項目:
OCIを使用したセッション確立の詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。
GLOBALLY
GLOBALLY
を指定すると、グローバル・ユーザーがデータベースへ接続するときに、LDAPディレクトリによってネームスペースを初期化できます。
セッション確立後、設定したPL/SQLパッケージのみがネームスペースのすべての属性に書込みを行うコマンドを発行することができます。
関連項目:
グローバルに初期化されるコンテキストの確立の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
ACCESSED GLOBALLY
この句を使用すると、namespace
に設定したすべてのアプリケーション・コンテキストによるインスタンス全体へのアクセスを許可できます。この設定によって、複数のセッションがアプリケーション属性を共有できます。
例
アプリケーション・コンテキストの作成: 例
この例では、PL/SQLパッケージemp_mgmt
を使用して、人事管理アプリケーションを検証および保護します。このパッケージを作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。次の文は、コンテキスト・ネームスペースhr_context
を作成し、emp_mgmt
パッケージに関連付けます。
CREATE CONTEXT hr_context USING emp_mgmt;
SYS_CONTEXT
ファンクションを使用して、このコンテキストに基づいて、データ・アクセスを制御できます。たとえば、emp_mgmt
パッケージで、特定の部門識別子として、属性department_id
が定義されているとします。次のコマンドを実行し、department_id
の値に基づいてアクセスを制限するビューを作成して、employees
実表を保護できます。
CREATE VIEW hr_org_secure_view AS SELECT * FROM employees WHERE department_id = SYS_CONTEXT('hr_context', 'department_id');
関連項目:
アプリケーション・コンテキストを使用したユーザー情報の取得の詳細は、「SYS_CONTEXT」および『Oracle Databaseセキュリティ・ガイド』を参照してください。