Oracle® Label Security

管理者ガイド

11gリリース2(11.2)

E92085-01(原本部品番号:E10745-04)

2013年8月

Oracle Label Security管理者ガイド11gリリース2 (11.2)

E92085-01

Copyright © 2000, 2013, Oracle and/or its affiliates. All rights reserved.

原本著者: Sumit Jeloka

原本協力者: Peter Wahl、Paul Needham、Vikram Pesati、Srividya Tata、Chi Ching Chui、Digvijay Sirmukaddam、Hozefa Palitanawala、Pat Huey、Manoj Kamani、Kamal Tbeileh、Lakshmi Kethana

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

図一覧

表一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

第I部

1 Oracle Label Securityの概要

- 1.1 コンピュータ・セキュリティとデータ・アクセス制御

- 1.1.1 Oracle Label Securityとセキュリティ標準

- 1.1.2 セキュリティ・ポリシー

- 1.1.3 アクセス制御

- 1.1.3.1 任意アクセス制御

- 1.1.3.2 Oracle Label Security

- 1.1.3.3 Oracle Label Securityと任意アクセス制御の相互動作

- 1.2 Oracle Label Securityのアーキテクチャ

- 1.3 Oracle Label Securityの機能

- 1.3.1 Oracle Label Securityポリシーの機能の概要

- 1.3.2 Oracle Enterprise Edition: VPDテクノロジ

- 1.3.3 Oracle Label Security: デフォルトのVPD

- 1.3.4 ラベル・ポリシーの機能

- 1.3.4.1 データ・ラベル

- 1.3.4.2 ラベル認可

- 1.3.4.3 ポリシー権限

- 1.3.4.4 ポリシー施行オプション

- 1.3.4.5 要約: ラベルベースの行アクセスの4つの側面

- 1.4 Oracle Label SecurityとOracle Internet Directoryとの統合

2 データ・ラベルおよびユーザー・ラベル

- 2.1 ラベルベース・セキュリティの概要

- 2.2 ラベル・コンポーネント

- 2.2.1 ラベル・コンポーネントの定義および有効な文字

- 2.2.2 レベル

- 2.2.3 区分

- 2.2.4 グループ

- 2.2.5 業界別のレベル、区分およびグループの例

- 2.3 ラベルの構文とタイプ

- 2.4 データ・ラベルとユーザー・ラベルの相互動作

- 2.5 ラベルの管理

3 アクセス制御および権限

- 3.1 アクセス調整の概要

- 3.2 セッション・ラベルおよび行ラベル

- 3.2.1 セッション・ラベル

- 3.2.2 行ラベル

- 3.2.3 セッション・ラベルの例

- 3.3 ユーザー認証

- 3.3.1 管理者が設定する認可

- 3.3.1.1 認可レベル

- 3.3.1.2 認可区分

- 3.3.1.3 認可グループ

- 3.3.2 計算されるセッション・ラベル

- 3.4 アクセス調整のためのラベルの評価

- 3.4.1 読取り/書込みアクセスの概要

- 3.4.1.1 読取り操作と書込み操作の違い

- 3.4.1.2 グループに対する読取り/書込み認可の伝播

- 3.4.2 Oracle Label Securityの読取りアクセス・アルゴリズム

- 3.4.3 Oracle Label Securityの書込みアクセス・アルゴリズム

- 3.5 Oracle Label Securityの権限の使用

- 3.5.1 Oracle Label Securityのポリシーで定義される権限

- 3.5.2 特殊なアクセス権限

- 3.5.2.1 READ

- 3.5.2.2 FULL

- 3.5.2.3 COMPACCESS

- 3.5.2.4 PROFILE_ACCESS

- 3.5.3 特殊な行ラベル権限

- 3.5.3.1 WRITEUP

- 3.5.3.2 WRITEDOWN

- 3.5.3.3 WRITEACROSS

- 3.5.4 システム権限、オブジェクト権限およびポリシー権限

- 3.5.5 アクセス調整およびビュー

- 3.5.6 アクセス調整およびプログラム・ユニットの実行

- 3.5.7 アクセス調整およびポリシー施行オプション

- 3.6 複数のOracle Label Securityポリシーの処理

- 3.6.1 単一データベース内の複数のOracle Label Securityポリシー

- 3.6.2 分散環境での複数のOracle Label Securityポリシー

第II部 Oracle Label Securityの機能の使用

4 Oracle Label Securityスタート・ガイド

- 4.1 OLSのインストールとLBACSYSユーザーの有効化

- 4.2 OLSポリシーの作成

- 4.2.1 ステップ1: ポリシーの作成

- 4.2.2 ステップ2: ポリシーのラベル・コンポーネントの作成

- 4.2.3 ステップ3: ポリシーのデータ・ラベルの作成

- 4.2.4 ステップ4: ポリシーに対するユーザーの認証

- 4.2.5 ステップ5: データベース表へのポリシーの適用

- 4.2.6 ステップ6: 表の行へのポリシー・ラベルの追加

- 4.3 サンプルOLSポリシーの作成

- 4.3.1 ステップ1: Oracle Label Securityの例のためのユーザーの作成

- 4.3.2 ステップ2: ACCESS_LOCATIONSポリシーの作成

- 4.3.3 ステップ3: ACCESS_LOCATIONSポリシー・レベルのコンポーネントの定義

- 4.3.4 ステップ4: ACCESS_LOCATIONSポリシーのデータ・ラベルの作成

- 4.3.5 ステップ5: ACCESS_LOCATIONSポリシーに対するユーザー認証の作成

- 4.3.6 ステップ6: HR.LOCATIONS表へのACCESS_LOCATIONSポリシーの適用

- 4.3.7 ステップ7: 表データへのポリシー・ラベルの追加

- 4.3.8 ステップ8: ACCESS_LOCATIONSポリシーのテスト

- 4.3.9 ステップ9: この例のコンポーネントの削除(オプション)

5 ラベル付きデータの処理

- 5.1 ポリシーのラベル列とラベル・タグ

- 5.1.1 ポリシーのラベル列

- 5.1.1.1 ポリシーのラベル列の非表示化

- 5.1.1.2 例1: 数値列データ型(NUMBER)

- 5.1.1.3 例2: 数値列データ型と非表示列

- 5.1.2 ラベル・タグ

- 5.1.2.1 ラベル・タグの手動定義によるラベルの順序付け

- 5.1.2.2 ラベル・タグの手動定義によるデータの操作

- 5.1.2.3 自動的に生成されるラベル・タグ

- 5.2 データ行へのラベルの割当て

- 5.3 ラベルの表示

- 5.3.1 CHAR_TO_LABELを使用した文字列からラベル・タグへの変換

- 5.3.2 LABEL_TO_CHARを使用したラベル・タグから文字列への変換

- 5.3.2.1 LABEL_TO_CHARの例

- 5.3.2.2 ポリシーのラベル列が非表示に設定されている場合の表からのすべての列の取出し

- 5.4 ラベルを使用したデータのフィルタリング

- 5.4.1 WHERE句での数値ラベル・タグの使用

- 5.4.2 ラベル付きデータ行の順序付け

- 5.4.3 ラベルの文字表現による順序付け

- 5.4.4 ラベルの上限と下限の決定

- 5.4.4.1 LEAST_UBOUNDを使用した最小の上限の検索

- 5.4.4.2 GREATEST_LBOUNDを使用した最大の下限の検索

- 5.4.5 MERGE_LABELファンクションを使用したラベルのマージ

- 5.5 ラベル付きデータの挿入

- 5.5.1 CHAR_TO_LABELを使用したラベルの挿入

- 5.5.2 数値のラベル・タグ値を使用したラベルの挿入

- 5.5.3 ラベルを指定しないデータの挿入

- 5.5.4 ポリシーのラベル列が非表示になっている場合のデータの挿入

- 5.5.5 TO_DATA_LABELを使用したラベルの挿入

- 5.6 SA_SESSIONを使用したセッション・ラベルと行ラベルの変更

- 5.6.1 セッション・ラベルと行ラベルを変更するSA_SESSIONファンクション

- 5.6.2 SA_SESSION.SET_LABELを使用したセッション・ラベルの変更

- 5.6.3 SA_SESSION.SET_ROW_LABELを使用した行ラベルの変更

- 5.6.4 SA_SESSION.RESTORE_DEFAULT_LABELSを使用したラベルのデフォルトのリストア

- 5.6.5 SA_SESSION.SAVE_DEFAULT_LABELSを使用したラベルのデフォルトの保存

- 5.6.6 SA_SESSIONファンクションを使用したセッション属性の表示

- 5.6.6.1 すべてのセキュリティ属性を戻すUSER_SA_SESSIONビュー

- 5.6.6.2 個々のセキュリティ属性を戻すファンクション

6 Oracle Label SecurityとOracle Internet Directoryとの併用

- 6.1 Oracle Internet Directoryでのラベル管理の概要

- 6.2 Oracle Internet Directory対応Label Securityの構成

- 6.2.1 OID対応Oracle Label Securityを構成するための権限の付与

- 6.2.2 データベースの登録とOracle Internet Directory対応Oracle Label Securityの構成

- 6.2.2.1 タスク1: ディレクトリを使用するためのOracleホームの構成

- 6.2.2.2 タスク2: OID対応Oracle Label Security用のデータベースの構成

- 6.2.2.3 タスク2: OID対応OLS用のデータベースの構成の代替方式

- 6.2.2.4 タスク3: DIPパスワードと接続データの設定

- 6.2.3 Oracle Internet Directory対応OLSでのデータベースの登録解除

- 6.3 データベースからのOracle Internet Directory対応Oracle Label Securityの削除

- 6.4 Oracle Label Securityプロファイル

- 6.5 Label Securityでディレクトリを使用する場合に統合される機能

- 6.6 Oracle Internet Directory内のOracle Label Securityポリシー属性

- 6.7 新規データ・ラベル作成の制限

- 6.8 2つの管理者タイプ

- 6.9 データベースのブートストラップ

- 6.10 データベースとOracle Internet Directoryの同期化

- 6.10.1 データベースとOracle Internet Directoryの同期化について

- 6.10.2 Oracle Directory Integration and Provisioning(DIP)プロビジョニング・プロファイル

- 6.10.3 プロビジョニング・プロファイルの無効化、変更および有効化

- 6.10.4 Oracle Data GuardでのOracle Directory対応Oracle Label Securityの構成

- 6.10.4.1 Oracle Internet DirectoryでのOracle Label Securityフェイルオーバーの登録について

- 6.10.4.2 手順1: Data Guardでのディレクトリ対応Oracle Label Securityの設定

- 6.10.4.3 手順2: スイッチオーバー後のOIDプロビジョニング・プロファイルの更新

- 6.11 セキュリティ・ロールと許可されるアクション

- 6.11.1 Oracle Internet Directory対応Oracle Label Securityのポリシー作成者の制限

- 6.12 置き換えられるPL/SQL文

- 6.13 ポリシー管理者専用プロシージャ

第III部 Oracle Label Securityアプリケーションの管理

7 Oracle Label Securityポリシーの作成

- 7.1 Oracle Label Securityの管理タスクの概要

- 7.1.1 ステップ1: ポリシーの作成

- 7.1.2 ステップ2: ラベル・コンポーネントの定義

- 7.1.3 ステップ3: 有効なデータ・ラベルのセットの識別

- 7.1.4 ステップ4: 表およびスキーマへのポリシーの適用

- 7.1.5 ステップ5: ユーザーの認証

- 7.1.6 ステップ6: トラステッド・プログラム・ユニットの作成と認可(オプション)

- 7.1.7 ステップ7: 監査の構成(オプション)

- 7.2 Oracle Label Security管理者のロールの編成

- 7.3 Oracle Label Securityの管理インタフェースの選択

- 7.3.1 Oracle Label Securityのパッケージ

- 7.3.1.1 Oracle Label Securityのデモンストレーション・ファイル

- 7.3.2 Oracle Enterprise Manager

- 7.4 SA_SYSDBAパッケージを使用したセキュリティ・ポリシーの管理

- 7.4.1 SA_SYSDBAパッケージを使用できるユーザー

- 7.4.2 ポリシーを管理できるユーザー

- 7.4.3 ポリシー指定に有効な文字

- 7.4.4 SA_SYSDBA.CREATE_POLICYを使用したポリシーの作成

- 7.4.5 SA_SYSDBA.ALTER_POLICYを使用したポリシー・オプションの変更

- 7.4.6 SA_SYSDBA.DISABLE_POLICYを使用したポリシーの無効化

- 7.4.7 SA_SYSDBA.ENABLE_POLICYを使用したポリシーの有効化

- 7.4.8 SA_SYSDBA.DROP_POLICYを使用したポリシーの削除

- 7.5 SA_COMPONENTSパッケージを使用したラベル・コンポーネントの定義

- 7.5.1 オーバーロードされるプロシージャの使用

- 7.5.2 SA_COMPONENTS.CREATE_LEVELを使用したレベルの作成

- 7.5.3 SA_COMPONENTS.ALTER_LEVELを使用したレベルの変更

- 7.5.4 SA_COMPONENTS.DROP_LEVELを使用したレベルの削除

- 7.5.5 SA_COMPONENTS.CREATE_COMPARTMENTを使用した区分の作成

- 7.5.6 SA_COMPONENTS.ALTER_COMPARTMENTを使用した区分の変更

- 7.5.7 SA_COMPONENTS.DROP_COMPARTMENTを使用した区分の削除

- 7.5.8 SA_COMPONENTS.CREATE_GROUPを使用したグループの作成

- 7.5.9 SA_COMPONENTS.ALTER_GROUPを使用したグループの変更

- 7.5.10 SA_COMPONENTS.ALTER_GROUP_PARENTを使用したグループの親の変更

- 7.5.11 SA_COMPONENTS.DROP_GROUPを使用したグループの削除

- 7.6 SA_LABEL_ADMINパッケージを使用した有効なラベルの指定

- 7.6.1 SA_LABEL_ADMIN.CREATE_LABELを使用した有効なデータ・ラベルの作成

- 7.6.2 SA_LABEL_ADMIN.ALTER_LABELを使用したラベルの変更

- 7.6.3 SA_LABEL_ADMIN.DROP_LABELを使用したラベルの削除

8 ユーザーのラベルおよび権限の管理

- 8.1 ユーザーのラベルおよび権限の管理の概要

- 8.2 SA_USER_ADMINを使用したコンポーネント別のユーザー・ラベルの管理

- 8.2.1 SA_USER_ADMIN.SET_LEVELS

- 8.2.2 SA_USER_ADMIN.SET_COMPARTMENTS

- 8.2.3 SA_USER_ADMIN.SET_GROUPS

- 8.2.4 SA_USER_ADMIN.ALTER_COMPARTMENTS

- 8.2.5 SA_USER_ADMIN.ADD_COMPARTMENTS

- 8.2.6 SA_USER_ADMIN.DROP_COMPARTMENTS

- 8.2.7 SA_USER_ADMIN.DROP_ALL_COMPARTMENTS

- 8.2.8 SA_USER_ADMIN.ADD_GROUPS

- 8.2.9 SA_USER_ADMIN.ALTER_GROUPS

- 8.2.10 SA_USER_ADMIN.DROP_GROUPS

- 8.2.11 SA_USER_ADMIN.DROP_ALL_GROUPS

- 8.3 SA_USER_ADMINを使用したラベル文字列別のユーザー・ラベルの管理

- 8.3.1 SA_USER_ADMIN.SET_USER_LABELS

- 8.3.2 SA_USER_ADMIN.SET_DEFAULT_LABEL

- 8.3.3 SA_USER_ADMIN.SET_ROW_LABEL

- 8.3.4 SA_USER_ADMIN.DROP_USER_ACCESS

- 8.4 SA_USER_ADMIN.SET_USER_PRIVSを使用したユーザー権限の管理

- 8.5 SA_SESSION.SET_ACCESS_PROFILEを使用したラベルおよび権限の設定

- 8.6 SA_SESSION.SA_USER_NAMEを使用したユーザー名の戻し

- 8.7 Oracle Label Securityビューの使用

- 8.7.1 すべてのユーザーのセキュリティ属性を表示するビュー: DBA_SA_USERS

- 8.7.2 ユーザー認証をコンポーネント別に表示するビュー

9 ポリシー施行オプションとラベル付けファンクションの実装

- 9.1 ポリシー・オプションの選択

- 9.1.1 ポリシー施行オプションの概要

- 9.1.2 HIDEポリシー列オプション

- 9.1.3 ラベル管理施行オプション

- 9.1.3.1 LABEL_DEFAULT: セッションのデフォルト行ラベルの使用

- 9.1.3.2 LABEL_UPDATE: データ・ラベルの変更

- 9.1.3.3 CHECK_CONTROL: データ・ラベルのチェック

- 9.1.4 アクセス制御施行オプション

- 9.1.4.1 READ_CONTROL: データの読取り

- 9.1.4.2 WRITE_CONTROL: データの書込み

- 9.1.4.3 INSERT_CONTROL、UPDATE_CONTROLおよびDELETE_CONTROL

- 9.1.5 オーバーライド施行オプション

- 9.1.6 ポリシー施行オプションの使用時のガイドライン

- 9.1.7 Oracle Label Securityのポリシー施行からの除外

- 9.1.8 表およびスキーマに対するポリシー・オプションの表示

- 9.2 ラベル付けファンクションの使用

- 9.2.1 Oracle Label Securityでのデータ行のラベル付け

- 9.2.2 Oracle Label Securityのポリシーでのラベル付けファンクション

- 9.2.3 ポリシー用のラベル付けファンクションの作成

- 9.2.4 ポリシーでのラベル付けファンクションの指定

- 9.3 ポリシー・オプションとラベル付けファンクションを使用したラベル付きデータの挿入

- 9.3.1 施行制御オプションとINSERTの評価

- 9.3.2 ラベル付けファンクションが指定されている場合のラベルの挿入

- 9.3.3 宣言参照整合性が有効になっている表への子行の挿入

- 9.4 ポリシー・オプションとラベル付けファンクションを使用したラベル付きデータの更新

- 9.4.1 CHAR_TO_LABELを使用したラベルの更新

- 9.4.2 施行制御オプションとUPDATEの評価

- 9.4.3 ラベル付けファンクションが指定されている場合のラベルの更新

- 9.4.4 宣言参照整合性が有効になっている表の子行の更新

- 9.5 ポリシー・オプションとラベル付けファンクションを使用したラベル付きデータの削除

- 9.6 Oracle Label SecurityのポリシーとSQL述語の使用

- 9.6.1 SQL述語を使用したOracle Label Securityのポリシーの変更

- 9.6.2 複数のSQL述語を使用したOracle Label Securityのポリシーの効果

10 表およびスキーマへのポリシーの適用

- 10.1 ポリシー管理用語

- 10.2 Oracle Internet Directory対応Oracle Label Securityでのポリシーのサブスクライブ

- 10.2.1 SA_POLICY_ADMIN.POLICY_SUBSCRIBEを使用したポリシーへのサブスクライブ

- 10.2.1.1 構文

- 10.2.2 SA_POLICY_ADMIN.POLICY_UNSUBSCRIBEを使用したポリシーへのサブスクライブ取消し

- 10.2.2.1 構文

- 10.3 表およびスキーマのポリシー管理ファンクション

- 10.4 SA_POLICY_ADMINを使用した表のポリシーの管理

- 10.4.1 SA_POLICY_ADMIN.APPLY_TABLE_POLICYを使用したポリシーの適用

- 10.4.1.1 構文

- 10.4.2 SA_POLICY_ADMIN.REMOVE_TABLE_POLICYを使用したポリシーの削除

- 10.4.2.1 構文

- 10.4.3 SA_POLICY_ADMIN.DISABLE_TABLE_POLICYを使用したポリシーの無効化

- 10.4.3.1 構文

- 10.4.4 SA_POLICY_ADMIN.ENABLE_TABLE_POLICYを使用したポリシーの再有効化

- 10.4.4.1 構文

- 10.5 SA_POLICY_ADMINを使用したスキーマに対するポリシーの管理

- 10.5.1 SA_POLICY_ADMIN.APPLY_SCHEMA_POLICYを使用したポリシーの適用

- 10.5.1.1 構文

- 10.5.2 施行オプションの変更: SA_POLICY_ADMIN.ALTER_SCHEMA_POLICY

- 10.5.2.1 構文

- 10.5.3 SA_POLICY_ADMIN.REMOVE_SCHEMA_POLICYを使用したポリシーの削除

- 10.5.3.1 構文

- 10.5.4 SA_POLICY_ADMIN.DISABLE_SCHEMA_POLICYを使用したポリシーの無効化

- 10.5.4.1 構文

- 10.5.5 SA_POLICY_ADMIN.ENABLE_SCHEMA_POLICYを使用したポリシーの再有効化

- 10.5.5.1 構文

- 10.5.6 スキーマに対するポリシーの問題

11 トラステッド・ストアド・プログラム・ユニットの管理および使用

- 11.1 トラステッド・ストアド・プログラム・ユニットの概要

- 11.1.1 トラステッド・ストアド・プログラム・ユニットの動作

- 11.1.2 トラステッド・ストアド・プログラム・ユニットの例

- 11.2 SET_PROG_PRIVSを使用したプログラム・ユニット権限の管理

- 11.3 トラステッド・ストアド・プログラム・ユニットの作成およびコンパイル

- 11.3.1 トラステッド・ストアド・プログラム・ユニットの作成

- 11.3.2 トラステッド・ストアド・プログラム・ユニットの権限の設定

- 11.3.3 トラステッド・ストアド・プログラム・ユニットの再コンパイル

- 11.3.4 トラステッド・ストアド・プログラム・ユニットの再作成

- 11.3.5 トラステッド・ストアド・プログラム・ユニットの実行

- 11.4 SA_UTLファンクションを使用したラベル情報の設定と戻し

- 11.4.1 SA_UTLを使用したセッション・ラベルと行ラベルの表示

- 11.4.1.1 SA_UTL.NUMERIC_LABEL

- 11.4.1.2 SA_UTL.NUMERIC_ROW_LABEL

- 11.4.1.3 SA_UTL.DATA_LABEL

- 11.4.2 表の行データの読取り権限と更新権限のチェック

- 11.4.2.1 SA_UTL.CHECK_READ

- 11.4.2.2 SA_UTL.CHECK_WRITE

- 11.4.2.3 SA_UTL.CHECK_LABEL_CHANGE

- 11.4.3 SA_UTLを使用したセッション・ラベルと行ラベルの設定

- 11.4.3.1 SA_UTL.SET_LABEL

- 11.4.3.2 SA_UTL.SET_ROW_LABEL

- 11.4.4 最大の下限と最小の上限の戻し

- 11.4.4.1 GREATEST_LBOUND

- 11.4.4.2 LEAST_UBOUND

12 Oracle Label Securityでの監査

- 12.1 Oracle Label Securityの監査の概要

- 12.2 システム単位の監査の有効化: AUDIT_TRAIL初期化パラメータ

- 12.3 SA_AUDIT_ADMINを使用したOracle Label Securityの監査の有効化

- 12.3.1 Oracle Label Securityの監査オプション

- 12.3.2 SA_AUDIT_ADMIN.AUDITを使用したOracle Label Securityの監査の有効化

- 12.3.3 SA_AUDIT_ADMIN.NOAUDITを使用したOracle Label Securityの監査の無効化

- 12.3.4 DBA_SA_AUDIT_OPTIONSビューを使用した監査オプションの検査

- 12.4 ポリシー・ラベルの監査の管理

- 12.4.1 SA_AUDIT_ADMIN.AUDIT_LABELを使用したポリシー・ラベルの監査

- 12.4.2 SA_AUDIT_ADMIN.NOAUDIT_LABELを使用したポリシー・ラベルの監査の無効化

- 12.4.3 AUDIT_LABEL_ENABLEDを使用したラベルの監査ステータスの検索

- 12.5 Oracle Label Security用の監査証跡ビューの作成および削除

- 12.5.1 SA_AUDIT_ADMIN.CREATE_VIEWを使用したビューの作成

- 12.5.2 SA_AUDIT_ADMIN.DROP_VIEWを使用したビューの削除

- 12.6 Oracle Label Securityの監査のヒント

- 12.6.1 SA_AUDIT_ADMINオプションの設定方針

- 12.6.2 権限付き操作の監査

13 分散データベースでのOracle Label Securityの使用

- 13.1 Oracle Label Securityの分散構成

- 13.2 Oracle Label Securityでのリモート・データベースへの接続

- 13.3 リモート・セッション用のセッション・ラベルと行ラベルの確立

- 13.4 分散環境でのラベルのセットアップ

- 13.4.1 分散環境でのラベル・タグの設定

- 13.4.2 分散環境での数値書式によるラベル・コンポーネントの設定

- 13.5 分散環境でのOracle Label Securityポリシーの使用

- 13.6 Oracle Label Securityでのレプリケーションの使用

- 13.6.1 Oracle Label Securityでのレプリケーションの概要

- 13.6.1.1 Oracle Label Securityでサポートされているレプリケーション機能

- 13.6.1.2 Oracle Label Securityでのレプリケーションに対する行レベルのセキュリティ制限

- 13.6.2 マテリアライズド・ビューの内容

- 13.6.2.1 マテリアライズド・ビューの内容の決定方法

- 13.6.2.2 完全マテリアライズド・ビュー

- 13.6.2.3 部分マテリアライズド・ビュー

- 13.6.3 Oracle Label Securityでのマテリアライズド・ビューの作成要件

- 13.6.3.1 REPADMINアカウントの要件

- 13.6.3.2 マテリアライズド・ビューの所有者の要件

- 13.6.3.3 マルチレベルの部分マテリアライズド・ビューの作成要件

- 13.6.3.4 マルチレベルの完全マテリアライズド・ビューの作成要件

- 13.6.4 マテリアライズド・ビューのリフレッシュ方法

14 Oracle Label SecurityでのDBAファンクションの実行

- 14.1 Oracle Label Securityでのエクスポート・ユーティリティの使用

- 14.1.1 Oracle Label Securityでのデータ・ポンプ・エクスポート・ユーティリティの使用

- 14.2 Oracle Label Securityでのインポート・ユーティリティの使用

- 14.2.1 Oracle Label Securityでのインポート要件

- 14.2.1.1 インポート・データベースの準備

- 14.2.1.2 インポート・ユーザーの認証の検証

- 14.2.2 インポート用データ・ラベルの定義

- 14.2.3 Oracle Label Securityをインストールしない場合のラベル付きデータのインポート

- 14.2.4 ラベルなしデータのインポート

- 14.2.5 非表示列を含む表のインポート

- 14.3 Oracle Label SecurityでのSQL*Loaderの使用

- 14.3.1 Oracle Label SecurityでのSQL*Loaderの使用要件

- 14.3.2 Oracle Label SecurityからSQL*Loaderへの入力

- 14.4 Oracle Label Securityのパフォーマンス上のヒント

- 14.4.1 ANALYZEを使用したOracle Label Securityのパフォーマンス改善

- 14.4.2 ポリシーのラベル列での索引作成

- 14.4.3 パフォーマンス強化のためのラベル・タグ方針の作成

- 14.4.4 数値ラベル・タグに基づくデータのパーティション化

- 14.5 インストール後のデータベースの追加作成

15 インバース・グループを使用した解放性

- 15.1 インバース・グループおよび解放性の概要

- 15.2 スタンダード・グループおよびインバース・グループの比較

- 15.3 インバース・グループの動作

- 15.3.1 INVERSE_GROUP施行オプションを指定したインバース・グループの実装

- 15.3.2 インバース・グループおよびラベル・コンポーネント

- 15.3.3 インバース・グループで計算されるラベル

- 15.3.3.1 インバース・グループで計算されるセッション・ラベル

- 15.3.3.2 インバース・グループ、計算される最大読取りグループおよび最大書込みグループ

- 15.3.4 インバース・グループおよび階層構造

- 15.3.5 インバース・グループおよびユーザー権限

- 15.4 インバース・グループでの読取りアクセスのアルゴリズム

- 15.5 インバース・グループでの書込みアクセスのアルゴリズム

- 15.6 インバース・グループでのCOMPACCESS権限のアルゴリズム

- 15.7 セッション・ラベルおよびインバース・グループ

- 15.7.1 スタンダード・グループまたはインバース・グループでの初期セッション/行ラベルの設定

- 15.7.1.1 スタンダード・グループ: 初期セッション/行ラベルの変更規則

- 15.7.1.2 インバース・グループ: 初期セッション/行ラベルの変更規則

- 15.7.2 スタンダード・グループまたはインバース・グループでの現行のセッション/行ラベルの設定

- 15.7.2.1 スタンダード・グループ: 現行のセッション/行ラベルの変更規則

- 15.7.2.2 インバース・グループ: 現行のセッション/行ラベルの変更規則

- 15.7.3 セッション・ラベルおよびインバース・グループの例

- 15.7.3.1 インバース・グループの例1

- 15.7.3.2 インバース・グループの例2

- 15.8 インバース・グループでのプロシージャの動作の変更

- 15.8.1 インバース・グループでのSA_SYSDBA.CREATE_POLICY

- 15.8.2 インバース・グループでのSA_SYSDBA.ALTER_POLICY

- 15.8.3 インバース・グループでのSA_USER_ADMIN.ADD_GROUPS

- 15.8.4 インバース・グループでのSA_USER_ADMIN.ALTER_GROUPS

- 15.8.5 インバース・グループでのSA_USER_ADMIN.SET_GROUPS

- 15.8.6 インバース・グループでのSA_USER_ADMIN.SET_USER_LABELS

- 15.8.7 インバース・グループでのSA_USER_ADMIN.SET_DEFAULT_LABEL

- 15.8.8 インバース・グループでのSA_USER_ADMIN.SET_ROW_LABEL

- 15.8.9 インバース・グループでのSA_COMPONENTS.CREATE_GROUP

- 15.8.10 インバース・グループでのSA_COMPONENTS.ALTER_GROUP_PARENT

- 15.8.11 インバース・グループでのSA_SESSION.SET_LABEL

- 15.8.12 インバース・グループでのSA_SESSION.SET_ROW_LABEL

- 15.8.13 インバース・グループでのLEAST_UBOUND

- 15.8.14 インバース・グループでのGREATEST_LBOUND

- 15.9 インバース・グループでのラベルの支配規則

第IV部 付録

A Oracle Label Securityの高度なトピック

- A.1 ラベル間の関係の分析

- A.1.1 支配するラベルと支配されるラベル

- A.1.2 比較できないラベル

- A.1.3 支配ファンクションの使用

- A.1.3.1 DOMINATESスタンドアロン・ファンクション

- A.1.3.2 STRICTLY_DOMINATESスタンドアロン・ファンクション

- A.1.3.3 DOMINATED_BYスタンドアロン・ファンクション

- A.1.3.4 STRICTLY_DOMINATED_BYスタンドアロン・ファンクション

- A.1.3.5 SA_UTL.DOMINATES

- A.1.3.6 SA_UTL.STRICTLY_DOMINATES

- A.1.3.7 SA_UTL.DOMINATED_BY

- A.1.3.8 SA_UTL.STRICTLY_DOMINATED_BY

- A.2 セッション・ラベル設定用のOCIインタフェース

- A.2.1 OCIAttrSet

- A.2.2 OCIAttrGet

- A.2.3 OCIParamGet

- A.2.4 OCIAttrSet

- A.2.5 OCIの例

B Oracle Internet Directoryを使用したLabel Security用コマンドライン・ツール

- B.1 コマンドの説明

- B.2 olsadmintoolコマンドの関連パラメータ

- B.2.1 サマリー

- B.3 olsadmintoolの使用例

- B.3.1 他のユーザーをポリシー作成者として設定する例

- B.3.2 有効なオプションを指定してポリシーを作成する例

- B.3.3 ポリシー管理者の作成例

- B.3.4 レベルの作成例

- B.3.5 区分の作成例

- B.3.6 グループの作成例

- B.3.7 ラベルの作成例

- B.3.8 プロファイルの作成

- B.3.9 プロファイルにユーザーを追加する例

- B.3.10 プロファイルに他のユーザーを追加する例

- B.3.11 監査オプションの設定例

- B.3.12 前述の例の結果

C Oracle RAC環境でのOracle Label Security

- C.1 Oracle RAC環境におけるOracle Label Securityのポリシー機能の使用

- C.2 Oracle Label Securityでの透過的アプリケーション・フェイルオーバーの使用

D Oracle Label Securityに関するよくある質問

E リファレンス

- E.1 Oracle Label Securityのデータ・ディクショナリ表およびビュー

- E.1.1 Oracle Databaseのデータ・ディクショナリ表

- E.1.2 Oracle Label Securityのデータ・ディクショナリ・ビュー

- E.1.2.1 ALL_SA_AUDIT_OPTIONS

- E.1.2.2 ALL_SA_COMPARTMENTS

- E.1.2.3 ALL_SA_DATA_LABELS

- E.1.2.4 ALL_SA_GROUPS

- E.1.2.5 ALL_SA_LABELS

- E.1.2.6 ALL_SA_LEVELS

- E.1.2.7 ALL_SA_POLICIES

- E.1.2.8 ALL_SA_PROG_PRIVS

- E.1.2.9 ALL_SA_SCHEMA_POLICIES

- E.1.2.10 ALL_SA_TABLE_POLICIES

- E.1.2.11 ALL_SA_USERS

- E.1.2.12 ALL_SA_USER_LABELS

- E.1.2.13 ALL_SA_USER_LEVELS

- E.1.2.14 ALL_SA_USER_PRIVS

- E.1.2.15 DBA_SA_AUDIT_OPTIONS

- E.1.2.16 DBA_SA_COMPARTMENTS

- E.1.2.17 DBA_SA_DATA_LABELS

- E.1.2.18 DBA_SA_GROUPS

- E.1.2.19 DBA_SA_GROUP_HIERARCHY

- E.1.2.20 DBA_SA_LABELS

- E.1.2.21 DBA_SA_LEVELS

- E.1.2.22 DBA_SA_POLICIES

- E.1.2.23 DBA_SA_PROG_PRIVS

- E.1.2.24 DBA_SA_SCHEMA_POLICIES

- E.1.2.25 DBA_SA_TABLE_POLICIES

- E.1.2.26 DBA_SA_USERS

- E.1.2.27 DBA_SA_USER_COMPARTMENTS

- E.1.2.28 DBA_SA_USER_GROUPS

- E.1.2.29 DBA_SA_USER_LABELS

- E.1.2.30 DBA_SA_USER_LEVELS

- E.1.2.31 DBA_SA_USER_PRIVS

- E.1.3 Oracle Label Securityの監査ビュー

- E.2 Oracle Label Securityでの制限事項

- E.2.1 Oracle Label SecurityでのCREATE TABLE AS SELECTの制限

- E.2.2 ラベル・タグの制限

- E.2.3 Oracle Label Securityでのエクスポート制限

- E.2.4 Oracle Label Securityでの削除制限

- E.2.5 共有スキーマのサポート

- E.2.6 非表示列の制限

- E.3 Oracle Label Securityのインストール

- E.3.1 Oracle Label SecurityおよびSYS.AUD$表

- E.4 Oracle Label Securityの削除

索引

図一覧

- 1-1 データ・セキュリティのニーズの範囲

- 1-2 Oracle Label Securityのアーキテクチャ

- 1-3 Oracle Label Securityのラベルベース・セキュリティ

- 1-4 Oracle Database Enterprise Editionの仮想プライベート・データベース・テクノロジ

- 2-1 レベル、区分およびグループを持つデータ・カテゴリ

- 2-2 ラベルのマトリックス

- 2-3 グループの例

- 2-4 例: データ・ラベルとユーザー・ラベル

- 2-5 ラベル・コンポーネントの相互関係

- 3-1 ユーザー、データおよびラベル間の関係

- 3-2 ユーザー・セッション・ラベル

- 3-3 Enterprise Managerでの認可レベルの設定

- 3-4 Enterprise Managerでの認可区分の設定

- 3-5 Enterprise Managerでの認可グループの設定

- 3-6 サブグループによる読取り/書込みアクセス権の継承

- 3-7 読取りアクセス権のラベル評価プロセス

- 3-8 書込みアクセス権のラベル評価プロセス

- 3-9 COMPACCESS権限を持つ読取りアクセスのラベル評価プロセス

- 3-10 COMPACCESS権限を持つ書込みアクセスのラベル評価プロセス

- 3-11 ストアド・プログラム・ユニットの実行

- 6-1 Oracle Internet DirectoryのOracle Label Securityメタデータ記憶域

- 6-2 Oracle Internet Directoryを介して適用されるOracle Label Securityのポリシー

- 7-1 Enterprise Managerを使用したOracle Label Securityポリシーの構成

- 9-1 LABEL_UPDATEのラベル評価プロセス

- 13-1 分散データベースでのOracle Label Securityの使用

- 13-2 分散データベースでのラベル・タグ

- 13-3 分散データベースでのラベル・コンポーネント

- 13-4 レプリケーションでのマテリアライズド・ビューの使用

- 15-1 インバース・グループでの読取りアクセスのラベル評価

- 15-2 インバース・グループでの書込みアクセスのラベル評価

- 15-3 読取りアクセスのラベル評価: COMPACCESS権限およびインバース・グループ

- 15-4 書込みアクセスのラベル評価: COMPACCESS権限およびインバース・グループ

表一覧

- 1-1 Oracle Label Securityのアクセス調整要因

- 2-1 機密性ラベルのコンポーネント

- 2-2 レベルの例

- 2-3 レベル指定の書式

- 2-4 区分の例

- 2-5 区分指定の書式

- 2-6 グループの例

- 2-7 グループ指定の書式

- 2-8 業界別の代表的なレベル、区分およびグループ

- 3-1 管理者が設定する認可レベル

- 3-2 計算されるセッション・ラベル

- 3-3 Oracle Label Securityの権限

- 3-4 権限のタイプ

- 5-1 管理者が定義したラベル・タグ(例)

- 5-2 生成されたラベル・タグ(例)

- 5-3 サンプルSQL文から戻された非表示列のデータ

- 5-4 サンプルSQL文LEAST_UBOUNDから戻されたデータ

- 5-5 MERGE_LABELのフォーマット定数

- 5-6 セッション・ラベルを変更するファンクション

- 5-7 セキュリティ属性の名前と型

- 5-8 セキュリティ属性を表示するSA_SESSIONファンクション

- 6-1 各ポリシーの内容

- 6-2 DIPプロビジョニング・プロファイルの要素

- 6-3 特定のエンティティが実行できるタスク

- 6-4 OIDでユーザー別に許可されるアクセス・レベル

- 6-5 Oracle Internet Directoryの使用時にolsadmintoolで置き換えられるプロシージャ

- 7-1 Oracle Label Securityの管理パッケージ

- 7-2 SA_SYSDBA.CREATE_POLICYのパラメータ

- 7-3 SA_SYSDBA.ALTER_POLICYのパラメータ

- 7-4 SA_SYSDBA.DISABLE_POLICYのパラメータ

- 7-5 SA_SYSDBA.ENABLE_POLICYのパラメータ

- 7-6 SA_SYSDBA.DROP_POLICYのパラメータ

- 7-7 SA_COMPONENTS.CREATE_LEVELのパラメータ

- 7-8 SA_COMPONENTS.ALTER_LEVELのパラメータ

- 7-9 SA_COMPONENTS.DROP_LEVELのパラメータ

- 7-10 SA_COMPONENTS.CREATE_COMPARTMENTのパラメータ

- 7-11 SA_COMPONENTS.ALTER_COMPARTMENTのパラメータ

- 7-12 SA_COMPONENTS.DROP_COMPARTMENTのパラメータ

- 7-13 SA_COMPONENTS.CREATE_GROUPのパラメータ

- 7-14 SA_COMPONENTS.ALTER_GROUPのパラメータ

- 7-15 SA_COMPONENTS.ALTER_GROUP_PARENTのパラメータ

- 7-16 SA_COMPONENTS.DROP_GROUPのパラメータ

- 7-17 SA_LABEL_ADMIN.CREATE_LABELのパラメータ

- 7-18 SA_LABEL_ADMIN.ALTER_LABELのパラメータ

- 7-19 SA_LABEL_ADMIN.DROP_LABELのパラメータ

- 8-1 SA_USER_ADMIN.SET_LEVELSのパラメータ

- 8-2 SA_USER_ADMIN.SET_COMPARTMENTSのパラメータ

- 8-3 SA_USER_ADMIN.SET_GROUPSのパラメータ

- 8-4 SA_USER_ADMIN.ALTER_COMPARTMENTSのパラメータ

- 8-5 SA_USER_ADMIN.ADD_COMPARTMENTSのパラメータ

- 8-6 SA_USER_ADMIN.DROP_COMPARTMENTSのパラメータ

- 8-7 SA_USER_ADMIN.DROP_ALL_COMPARTMENTSのパラメータ

- 8-8 SA_USER_ADMIN.ADD_GROUPSのパラメータ

- 8-9 SA_USER_ADMIN.ALTER_GROUPSのパラメータ

- 8-10 SA_USER_ADMIN.DROP_GROUPSのパラメータ

- 8-11 SA_USER_ADMIN.DROP_ALL_GROUPSのパラメータ

- 8-12 SA_USER_ADMIN.SET_USER_LABELSのパラメータ

- 8-13 SA_USER_ADMIN.SET_DEFAULT_LABELのパラメータ

- 8-14 SA_USER_ADMIN.SET_ROW_LABELのパラメータ

- 8-15 SA_USER_ADMIN.DROP_USER_ACCESSのパラメータ

- 8-16 SA_USER_ADMIN.SET_USER_PRIVSのパラメータ

- 8-17 SA_SESSION.SET_ACCESS_PROFILEのパラメータ

- 8-18 SA_SESSION.SA_USER_NAMEのパラメータ

- 8-19 Oracle Label Securityビュー

- 9-1 ポリシー施行オプションが有効な場合

- 9-2 ポリシー施行オプション

- 9-3 ポリシー施行オプションの制御対象

- 9-4 ポリシー施行オプションの組合せ案

- 10-1 ポリシー管理ファンクション

- 12-1 AUDIT_TRAILパラメータの設定

- 12-2 Oracle Label Securityの監査オプション

- 12-3 DBA_SA_AUDIT_OPTIONSビューの列

- 12-4 DBA_SA_AUDIT_OPTIONSのサンプル出力

- 14-1 SQL*LoaderへのOracle Label Security入力の選択肢

- 14-2 ラベル・タグのパフォーマンスの例: 適切な値

- 14-3 ラベル・タグのパフォーマンスの例: 不適切な値

- 15-1 スタンダード・グループおよびインバース・グループへのアクセス

- 15-2 ポリシーの例

- 15-3 インバース・グループで計算されるセッション・ラベル

- 15-4 読取りアクセスと書込みアクセスの評価として識別されるグループのセット

- 15-5 スタンダード・グループおよびインバース・グループに対する読取り/書込み認可

- 15-6 インバース・グループの例1のラベル

- 15-7 インバース・グループの例2のラベル

- 15-8 access_modeパラメータの値により認可されるアクセス

- 15-9 ユーザーに対するグループの割当て

- 15-10 インバース・グループのラベル定義

- A-1 ラベルの比較における支配関係

- A-2 支配関係を決定するファンクション

- B-1 Oracle Label Securityカテゴリ別のコマンド

- B-2 olsadmintoolコマンドと参照先

- B-3 サマリー: olsadmintoolコマンドのパラメータ

- B-4 プロファイルとデフォルトのコマンド・パラメータのサマリー

- B-5 olsadmintoolコマンドの使用によるラベル・コンポーネント定義

- B-6 olsadmintoolコマンドの使用によるProfile1の内容

- C-1 Oracle RAC環境でステータスを保持するポリシー・ファンクション

- C-2 Oracle RAC環境でステータスを保持するセッション・ファンクション

はじめに

Oracle Label Securityにより、データベースの特定の(ラベル付き)行へのアクセス制御が可能になります。Oracle Label Securityがあると、様々な権限レベルを持つユーザーが、データのラベル付き行を参照または変更する権限を自動的に持つようになります(または除外されます)。

『Oracle Label Security管理者ガイド』では、Oracle Label Securityを使用して機密データを保護する方法を説明しています。ラベルベース・セキュリティの基本概念を説明し、その使用方法を示す例を提供します。

内容は次のとおりです。

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

対象読者

『Oracle Label Security管理者ガイド』は、データベース管理者(DBA)、アプリケーション・プログラマ、セキュリティ管理者、システム・オペレータを対象としています。また、次の作業を行うOracleユーザーも対象としています。

- アプリケーション・セキュリティ要件の分析

- ラベルベース・セキュリティ・ポリシーの作成

- ラベルベース・セキュリティ・ポリシーの管理

- ラベルベース・セキュリティ・ポリシーの使用

このマニュアルを活用するには、SQLおよびOracleに関する実用的な基礎知識が必要です。「関連ドキュメント」に記載されているOracleのセキュリティ機能についても理解している必要があります。SQL*Loaderを使用するには、オペレーティング・システムのファイル管理機能の使用方法を理解しておく必要があります。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

Oracleサポート・サービスでは、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info) か、聴覚に障害のあるお客様は (http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

関連ドキュメント

詳細は、次のOracleドキュメントを参照してください。

- Oracle Database概要

- 『Oracle Databaseセキュリティ・ガイド』

- 『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』

- 『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』

- Oracle Database管理者ガイド

- Oracle Database SQL言語リファレンス

- 『Oracle Databaseリファレンス』

- 『Oracle Databaseアドバンスト・レプリケーション』

- 『Oracle Databaseユーティリティ』

- 『Oracle Databaseパフォーマンス・チューニング・ガイド』

このマニュアルの例の多くは、Oracle Databaseのインストール時に基本インストール・オプションを選択した場合にデフォルトでインストールされるサンプル・スキーマを使用しています。これらのスキーマの作成方法およびその使用方法の詳細は、『Oracle Databaseサンプル・スキーマ』を参照してください。

リリース・ノート、インストール関連ドキュメント、ホワイト・ペーパーまたはその他の関連ドキュメントは、次の場所にあるOTN (Oracle Technology Network)から、無償でダウンロードできます。

http://www.oracle.com/technetwork/index.html

このマニュアルを含むOracleマニュアルの最新バージョンは、次の場所を参照してください。

http://www.oracle.com/technetwork/documentation/index.html

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

第I部

第I部では、Oracle Label Securityの基本要素を構成する用語、概念および相互関係について説明します。第I部の構成は、次のとおりです。

- 第1章「Oracle Label Securityの概要」

- 第2章「データ・ラベルおよびユーザー・ラベル」

- 第3章「アクセス制御および権限」

1 Oracle Label Securityの概要

機密情報へのアクセスの制御は、マネージャ、情報担当、データベース管理者およびアプリケーション開発者にとっての課題です。ユーザーのセキュリティ・クリアランス・レベルに基づいて選択的にアクセス制御を行うと、制限範囲を広げすぎることなく機密性を確保できます。このアクセス制御レベルは、機密情報へのアクセスを権限のないユーザーに禁止したまま、同じ表内の必要な情報に権限のあるユーザーがアクセスできるようにします。

データは様々な理由から機密情報として扱われます。たとえば、個人的および私的な情報や通信、取引上の秘密、企業の販売計画や財務計画、軍事情報、政府の研究計画や購入計画などが該当します。

情報の表示や使用を不適切なユーザーに許可することは、個人、通信事業者、組織、機関、政府または国にとって障害や損害あるいは危険を招く可能性があります。

しかし、このようなデータが、機密性の低い、様々なユーザーが正当に必要とする他の情報と混在していることが多くあります。表全体へのアクセスを制限したり機密データを別のデータベースに分離する方法では、ハードウェア、ソフトウェア、ユーザー時間および管理にコストのかかる、扱いにくい作業環境となります。

Oracle Label Securityでは、行レベルのアクセス制御を可能にすることによって、このような対策をとる必要がなくなります。これは、Oracle Database Enterprise Editionの仮想プライベート・データベースのテクノロジに基づいています。行の内容に対するアクセスは、その行のラベルをユーザーのラベルおよび権限と比較することで制御されます。管理者は、Enterprise Manager Database Controlにより提供されるユーザー・フレンドリなグラフィカル・インタフェースを使用して、既存のデータベースに選択的な行制限ポリシーを簡単に追加できます。開発者はOracle Databaseアプリケーションにアクセス制御をラベルベースで簡単に追加できます。

この章では、大きな規模のデータ・セキュリティ・コンテキストにおけるOracle Label Securityについて説明します。この章の内容は、次のとおりです。

- コンピュータ・セキュリティとデータ・アクセス制御

- Oracle Label Securityのアーキテクチャ

- Oracle Label Securityの機能

- Oracle Label SecurityとOracle Internet Directoryとの統合

注意:
このマニュアルは、Oracle Databaseの管理およびアプリケーション開発について、基本的な概念および用語を理解していることを前提としています。これは、中心的なOracle Database 11gリリース2(11.2)マニュアルを補足するものであり、Oracle Label Securityのアプリケーションの使用、管理および開発に関する付加的な考慮事項に重点を置いています。

関連項目:
Oracle Database 11gリリース2 (11.2)の機能と用語の詳細は、Oracle Database概要を参照してください。

1.1 コンピュータ・セキュリティとデータ・アクセス制御

コンピュータのセキュリティのためには、コンピュータ化されたデータとプロセスを、許可されていない変更、破壊、公開または遅延から保護する作業が必要です。インターネット時代では、貴重な機密データに対するリスクがこれまでになく大きくなっています。図1-1「データ・セキュリティのニーズの範囲」は、データ・セキュリティ・プランに含める必要のある複雑なコンピューティング環境について示しています。

この項では、Oracle Label Security関連のコンピュータ・セキュリティの基本的な用語および概念について説明します。この項の内容は、次のとおりです。

- Oracle Label Securityとセキュリティ標準

- セキュリティ・ポリシー

- アクセス制御

図1-1 データ・セキュリティのニーズの範囲

セキュリティ担当者、管理者およびアプリケーション・プログラマは、データベースとデータベースが常駐するサーバーを保護する必要があります。また、内部データベース・ユーザーの権利を管理および保護し、これらのデータベースへの顧客からのアクセスに対してE-Commerceの機密性も保証する必要があります。オラクル社は、このようにコンピュータのセキュリティ問題のあらゆる側面に対処する製品を提供しています。

1.1.1 Oracle Label Securityとセキュリティ標準

オラクル社は情報保証におけるリーダーです。セキュリティ評価は、独立機関によって国内および国際基準に基づいて実施される、公式の評価プロセスです。これにより、システムが設計上のセキュリティ基準を満たしていることが外部から客観的に保証されます。評価が正常に完了したシステムまたは製品には、セキュリティのランクが割り当てられます。この証明により、産業および官公庁関係のユーザーに、製品およびシステムのセキュリティに関する信頼性がもたらされます。

Oracle RDBMSは、Database Management System Protection Profile(DBMS PP)に準拠しています。Oracle Label Securityは、Common Criteria(ISO 15408)のうち、一般に民間ソフトウェア・ベンダーが達成している最高水準であるEvaluation Assurance Level(EAL)4として評価されています。

1.1.2 セキュリティ・ポリシー

データベースのセキュリティ・ポリシーでは、広範囲な組織のセキュリティ・ポリシーの中で、システム全体のセキュリティ・ポリシーが実装されます。システム全体のセキュリティ・ポリシーでは、次のタイプのルールを施行できます。

ルールのタイプ

用途

データ整合性ルール

システム内の情報に整合性があることを保証します。

可用性ルール

システム内の情報が使用可能であることを保証します。

アクセス制御ルール

無許可な情報公開を防止します。
Oracle Label Securityでは、情報アクセス制御のデフォルト・ポリシーが用意されている他、特定のサイト用にカスタマイズしたポリシーを定義することもできます。

1.1.3 アクセス制御

アクセス制御では、ユーザーが情報の読取り、書込み、更新、挿入または削除を実行できるかどうかを定義します。アクセス制御のニーズに合わせて、次のアプローチを使用できます。

- 任意アクセス制御

- Oracle Label Security

- Oracle Label Securityと任意アクセス制御の相互動作

1.1.3.1 任意アクセス制御

Oracle Databaseでは、表ごとに任意アクセス制御(DAC)が用意されています。情報へのアクセスは権限(SELECT、INSERT、UPDATEおよびDELETE)によって制御され、表に対するSQL操作はそれぞれの権限に対応して許可されます。

DACでは、データへのアクセスが単一ディメンションのバイナリ方式で制御されます。つまり、アクセスはオブジェクト全体に対して許可または拒否されます。管理者がユーザーに付与する権限によって、そのユーザーがデータに対して実行できる操作が決定されます。表やビューなどのオブジェクトにアクセスするユーザーまたはプロセスには、SELECTなどの適切な権限が必要です。オブジェクト内のデータにアクセスするユーザーまたはプロセスは、最初に、必要なDAC権限を付与されている必要があります。

1.1.3.2 Oracle Label Security

ラベルを使用すると、行のデータを使用することにより、DACよりも高度なアクセス制御ルールを施行できます。ポリシーを適用すると、各データ行に新規の1列が追加されます。この列には、各行の機密性をそのポリシーの範囲内で反映したラベルが格納されます。レベル・アクセスは、ユーザーの識別情報およびラベルを行のラベルと比較することで決定されます。

Oracle Label Securityのアクセス制御は、まず基本的なDACポリシーに依存します。DACとOracle Label Securityの両方によって、行へのアクセスを許可するかどうかの制御の基準が決定されます。

ほとんどのアプリケーションの場合、ラベルベースのアクセス制御による追加のセキュリティを必要とする表は比較的少数です。大多数のアプリケーション表は、標準DACによる保護で十分です。

1.1.3.3 Oracle Label Securityと任意アクセス制御の相互動作

ユーザーが行にアクセスするには、最初にOracle DatabaseのDAC要件、次にOracle Label Securityの要件を満たす必要があります。

Oracle Databaseでは、ユーザーのシステム権限とオブジェクト権限に基づいてDACが施行されます。まず、ユーザーはOracle Databaseに対して認証を受ける必要があります。さらに、要求する操作に対するDAC要件のオブジェクト権限とシステム権限も必要です。

DACでアクセスが許可される場合、ユーザーが要求する操作は次の全ガイドラインについてOracle Label Securityにより追加される条件を満たす必要があります。

- Oracle Label Securityのラベル定義とラベル階層

- ユーザー・ラベルと行ラベル

- Oracle Label Securityの施行オプション

- ユーザーのOracle Label Securityポリシー権限

Oracle Label Securityの柔軟性と機能性により、多様な本番環境でアプリケーションがサポートされます。標準的なOracle Databaseのデータ整合性、可用性およびリカバリ機能をユーザー・アカウンタビリティと監査も含め維持しながら、サイトのセキュリティ・ポリシーが施行されます。

図1-2「Oracle Label Securityのアーキテクチャ」は、Oracle Label Securityでのデータ・アクセスを示しています。この図は、DACとLabel Securityのチェック順序を示しています。Oracle Databaseセッション内でアプリケーション・ユーザーがSQL要求を送信します。Oracle DatabaseによりDAC権限がチェックされ、ユーザーが表に対するSELECT権限を持っているかどうかが確認されます。次に、表に仮想プライベート・データベース(VPD)ポリシーが連結されているかどうかがチェックされ、表がOracle Label Securityにより保護されていることが確認されます。SQL文が変更されます。

Oracle Label Securityは行ごとに起動されます。アクセスは、データ・ラベルとユーザーのセッション・ラベルの比較に基づき、ユーザーのOracle Label Security権限に従って付与または拒否されます。

1.2 Oracle Label Securityのアーキテクチャ

Oracle Label SecurityはOracle Database Enterprise EditionのVPDテクノロジに基づいて構築され、同製品のアプリケーション・コンテキスト機能を使用します。

図1-2 Oracle Label Securityのアーキテクチャ

1.3 Oracle Label Securityの機能

Oracle Label Securityには行レベル・セキュリティによるアクセス制御が用意されており、Oracle Databaseの基礎となるアクセス制御に加えて動作します。この項では、Oracle Label Securityの機能について説明します。この項の内容は、次のとおりです。

- Oracle Label Securityポリシーの機能の概要

- Oracle Enterprise Edition: VPDテクノロジ

- Oracle Label Security: デフォルトのVPD

- ラベル・ポリシーの機能

1.3.1 Oracle Label Securityポリシーの機能の概要

Label Security管理者は、指定した保護オブジェクトへのアクセスを制御するデータ・ラベルとユーザー・ラベルのセットと、ユーザーおよびプログラム・ユニットに対する権限を定義します。ポリシーとは、これらのラベル、ルールおよび権限に関連付けられた単なる名前です。

たとえば、ユーザーがアプリケーション表に対するSELECT権限を持っているとします。図1-3「Oracle Label Securityのラベルベース・セキュリティ」のように、ユーザーがSELECT文を実行すると、Oracle Label Securityは選択された各行を評価し、そのユーザーがアクセスできるかどうかを判断します。この判断は、セキュリティ管理者がユーザーに割り当てた権限とアクセス・レベルに基づきます。Oracle Label Securityは、UPDATE、DELETEおよびINSERT文のセキュリティ・チェックを実行するように構成することもできます。

図1-3 Oracle Label Securityのラベルベース・セキュリティ

- Oracle Label Securityでは、包括的なアクセス認可セット(第3章「アクセス制御および権限」を参照)を使用し、機密性ラベル自体を行に含まれる他のデータから独立して確実に保護できます。

- Oracle Label Securityでは、特殊な処理要件を処理するために、ポリシーを柔軟に施行できます。たとえば、特定タイプのデータ操作言語(DML)文のみに対する限定的な施行、ユーザーによるラベル作成の制限またはデフォルト・ラベルの有効化が可能です。

- ポリシーで個々のアプリケーション表を保護できます。通常、アプリケーションの表をすべて保護する必要はありません。たとえば、郵便番号などの参照表は保護する必要はありません。

- Oracle Label Securityでは、セキュリティ管理者はポリシーに特殊なラベル付けファンクションとSQL述語を追加して、ユーザーの操作を単純化できます。

- 管理者またはアプリケーション開発者は、複数のOracle Label Securityポリシーを作成できます。たとえば、人事管理ポリシーと保安ポリシーを同じデータベース内で共存させることができます。各ポリシーを個別に構成し、データ・ラベル用に独自の一意ラベルおよび列を定義できます。

- 1つのポリシーを定義して複数のアプリケーション表に適用できます。

1.3.2 Oracle Enterprise Edition: VPDテクノロジ

VPDでは、ポリシー駆動のアクセス制御がサポートされます。VPDポリシーにより、オブジェクトレベルのアクセス制御または行レベルのセキュリティが施行されます。VPDにはApplication Program Interface(API)が用意されており、データベースの表およびビューにセキュリティ・ポリシーを割り当てることができます。たとえば、給与データへのアクセスを、同じ施設内の管理者についてのみ許可するようにできます。開発者とセキュリティ管理者は、PL/SQLを使用して、ストアド・プロシージャでセキュリティ・ポリシーを作成できます。これらのプロシージャを、RDBMSパッケージのコールを使用して表またはビューにバインドします。この種のポリシーは、Oracle Databaseに格納されているアプリケーション・データの内容、またはOracleで提供されるコンテキスト変数(ユーザー名やIPアドレスなど)を使用してアクセスを制限します。VPDポリシーを使用すると、開発者はアプリケーションからアクセス・セキュリティ・メカニズムを取り除き、Oracle Database内に集中化できます。

図1-4「Oracle Database Enterprise Editionの仮想プライベート・データベース・テクノロジ」のように、VPDを使用すると、セキュリティ条件を表、ビューまたはシノニムに対応付けることができます。この例では、各ユーザーがORDERS表から選択するときに、必要なセキュリティ条件が自動的に施行されます。サーバーはデータへのアクセス方法に関係なくセキュリティ・ポリシーを自動的に施行し、セキュリティを実装するために多数のビューを使用する必要がなくなります。

表1-4 Oracle Database Enterprise Editionの仮想プライベート・データベース・テクノロジ

「図1-4 Oracle Database Enterprise Editionの仮想プライベート・データベース・テクノロジ」の説明

1.3.3 Oracle Label Security: デフォルトのVPD

Oracle Label Securityには組込みのセキュリティ・ポリシーおよびインフラストラクチャが用意されており、行レベル・セキュリティを簡単に施行できます。このデフォルトのソリューションではプログラミングが不要なため、所有コストおよび新しい製品やアプリケーションを市場に出すための時間が短縮されます。

Oracle Label Security管理者は、PL/SQLを記述するのではなく、記述名を指定して行レベル・セキュリティのポリシーを作成できます。追加コードを記述する必要はありません。指定した表にセキュリティ・ポリシーを一度に適用できます。このようにファイングレイン・セキュリティ・ポリシーの簡単かつ効率的な実装方法により、VPD単独では得られない粒度と柔軟性が得られます。このため、Oracle Label Securityは様々な状況で使用できる汎用ソリューションとみなすことができます。

1.3.4 ラベル・ポリシーの機能

Oracle Label Securityにより、Oracleのオブジェクト・リレーショナル・データベース管理システムに、ラベルベースのアクセス制御が追加されます。データへのアクセスは、次の要因に基づいて調整されます。

表1-1 Oracle Label Securityのアクセス調整要因

ラベルまたはポリシーの要因

参照先

アクセスが要求されたデータ行のラベル

第3章「アクセス制御および権限」

アクセスを要求しているユーザー・セッションのラベル

第3章「アクセス制御および権限」

そのユーザー・セッションのポリシー権限

第3章「アクセス制御および権限」

その表に設定されているポリシー施行オプション

第3章「アクセス制御および権限」

たとえば、1行のデータに対して実行される標準的なDML操作(SELECTなど)を考えます。Oracle Label Securityでは、CONFIDENTIALラベルを持つユーザーにより、CONFIDENTIALラベル付きのデータ行へのこのアクセス要求を評価するときに、このアクセスが実際に可能かどうかが判断されます。TOP SECRETのように行ラベルの方が上位だった場合は、アクセスが拒否されます。

これにより、様々な機密性を持つデータや様々な会社に属するデータを単一システムに格納して管理し、標準的なOracleアクセス制御を通じてデータ・セキュリティを保つことができます。同様に、多様な業界のアプリケーションでポリシーとともに行ラベルを使用し、同じ表に対する他の既存の使用を妨げることなく、必要に応じて限定的なアクセス制御機能を追加提供できます。

次の各項では、ラベルとポリシーの施行が依存する要因について説明します。

- データ・ラベル

- ラベル認可

- ポリシー権限

- ポリシー施行オプション

- 要約: ラベルベースの行アクセスの4つの側面

1.3.4.1 データ・ラベル

Oracle Label Securityでは、表の各行に機密性レベルに基づくラベルを付けることができます。各ラベルには、次の3つのコンポーネントが含まれています。

- 単一レベル(機密性)のランキング

- 0個以上の水平区分またはカテゴリ

- 0個以上の階層グループ

レベルは漏えいまたは破損に対するデータの機密性の階層を表し、重要なのはプライバシまたはセキュリティの維持です。レベルは主メカニズムで構成されており、特定のデータの表示または変更が認可されていないユーザーを除外します。認可レベルが低いユーザーは小さい番号で表され、大きいレベル番号のラベルが付いているデータへのアクセスが自動的に制限されます。代表的な政府機関では、レベルCONFIDENTIAL、SENSITIVEおよびHIGHLY_SENSITIVEを定義している場合があります。また、民間団体はCOMPANY_CONFIDENTIALデータ用の単一レベルを定義している場合があります。

区分コンポーネントは非階層型ですが、進行中の戦略的イニシアティブに関連するデータなど、データを区別するために一般に定義される便利なカテゴリを示します。最初は区分を使用しない組織もあります。

グループ・コンポーネントは階層型であり、所有権を反映させるために使用されます。たとえば、FINANCEおよびENGINEERINGグループをCEOグループの子として定義し、所有権関係を持たせることができます。この階層により、ENGINEERINGラベルのみを持つユーザーはFINANCEラベルを持つデータを表示できないが、CEOラベルを持つユーザーはどちらのサブグループのラベルが付いているデータも表示できると判断されます。グループによるアクセスの決定ルールの詳細は、第3章「アクセス制御および権限」を参照してください。

ラベルには、次の4つのコンポーネントの組合せから1つを使用できます。

- グループや区分を持たない単一レベル・コンポーネント(U::など)

- 区分セットを持ちグループを持たないレベル(U:Alpha, Beta:など)

- グループ・セットを持ち区分を持たないレベル(U::FIN, ASIAなど)

- 区分とグループの両方を持つレベル(U:Beta, Psi:ASIA, FINなど)

1.3.4.2 ラベル認可

ユーザーには、ラベル付きの行に対するアクセスの種類(読取りまたは書込み)を決定するラベル認可を付与できます。ラベルが適用されている行を表示または変更できるのは、そのラベルへのアクセスが認可されているユーザーのみです。必要な認可を持っていない行には、アクセスも編集操作もできません。行に複数のラベルが付いている場合に、その行を表示または変更するには、ユーザーはラベルごとに必須の認可を持っている必要があります。

1.3.4.3 ポリシー権限

ポリシー権限により、ユーザーまたはストアド・プログラム・ユニットは、ラベルベースのアクセス制御ポリシーの一部の側面をバイパスできます。管理者はさらに、ユーザーやプログラム・ユニットが別のユーザーの認証を肩代りできるようにするなど、特定のアクションの実行を認可できます。権限については、第3章「アクセス制御および権限」を参照してください。

権限をプログラム・ユニットに付与すると、ユーザーではなくプロシージャに対して、権限の対象となる操作の実行を認可できます。システム・セキュリティは、個々のユーザーではなくストアド・プログラム・ユニットのみがOracle Label Security権限を持つ場合に最上位レベルになります。また、この種のプログラム・ユニットによりポリシーがカプセル化され、セキュリティについて最小限のアプリケーション・コードを検討するのみですみます。

1.3.4.4 ポリシー施行オプション

Oracle Label Securityでは、管理者またはアプリケーション開発者は、様々なポリシー施行オプションを適用することにより、ユーザーの実行可能なDML操作の制御に最大限の柔軟性を持たせることができます。ポリシー施行オプションについては、第8章「ユーザーのラベルおよび権限の管理」を参照してください。

1.3.4.5 要約: ラベルベースの行アクセスの4つの側面

保護されている表内でラベルベースのアクセスが施行される場合、その行にユーザーがアクセスするには、そのユーザーのラベルはポリシー定義によって決定された一定の基準を満たす必要があります。この種のアクセス制御は、アプリケーション開発者が実装する任意アクセス制御の後で2次的なアクセス調整チェックとして機能します。

Oracle Label Securityが提供するラベルベースのアクセス制御の4つの側面は、次のとおりです。

- ユーザーのラベルは、そのユーザーがアクセスを許可されている情報を示し、そのユーザーが実行を許可されているアクセスのタイプ(読取りまたは書込み)を決定します。

- 行のラベルは、その行に含まれる情報の機密性を示します。また、その所有権や類似データとの関係も示す場合があります。

- ユーザーのポリシー権限を使用すると、ラベルベースのアクセス制御ポリシーの一部の側面をバイパスできます。

- 表のポリシー施行オプションは、読取りおよび書込み操作に対するアクセス制御の施行方法の様々な側面を決定します。

1.4 Oracle Label SecurityとOracle Internet Directoryとの統合

Oracle Label Securityの使用をOracle Internet Directoryと統合しているサイトでは、ラベル・セキュリティの操作と管理の効率を大幅に改善できます。ポリシーとユーザー認証プロファイルは、付録B「Oracle Internet Directoryを使用したLabel Security用コマンドライン・ツール」で説明するコマンドを使用してディレクトリ内で直接作成および管理します。変更は関連ディレクトリに自動的に伝播します。

この統合の詳細は、第6章「Oracle Label SecurityとOracle Internet Directoryとの併用」を参照してください。

2 データ・ラベルおよびユーザー・ラベル

この章では、データ・ラベルおよびユーザー・ラベルの基本概念と、Oracle Label Securityの理解に役立つ用語について説明します。

この章の内容は、次のとおりです。

- ラベルベース・セキュリティの概要

- ラベル・コンポーネント

- ラベルの構文とタイプ

- データ・ラベルとユーザー・ラベルの相互動作

- ラベルの管理

2.1 ラベルベース・セキュリティの概要

ラベルベース・セキュリティは、機密データへのアクセスを柔軟に制御する手段を提供します。Oracle Label Securityでは、データへのアクセスは、ユーザーの識別情報とラベル、およびデータの機密性とラベルに基づいて制御されます。ラベル・セキュリティは、ユーザーが表やビューなどのオブジェクト内のデータに対して実行できる操作を決定する任意アクセス制御以外の保護を追加します。

Oracle Label Securityポリシーでは、データへのアクセスは次の3つのディメンションで制御されます。

データ・ディメンション

説明

データ・ラベル

データの行ラベルは、その行の機密性のレベルと性質を示し、ユーザーがその行にアクセスするために満たす必要のある追加の基準を指定します。

ユーザー・ラベル

ユーザー・ラベルは、ユーザーの機密レベルに加えてユーザーのアクセスをラベル付きデータに制約する区分とグループを指定します。各ユーザーには、レベル、区分およびグループの範囲が割り当てられ、各セッションはその認可範囲内で動作してその範囲内のラベル付きデータにアクセスできます。

ポリシー権限

ユーザーに、特殊な操作を実行する権利(権限)、またはそのラベル認可を超えてデータにアクセスする権利(権限)を付与できます。

ここでの説明はデータへのアクセスに関するものです。データの読取りや書込みなどの特定のタイプのアクセスは、第3章「アクセス制御および権限」で説明しています。ポリシー権限については、第8章「ユーザーのラベルおよび権限の管理」を参照してください。

データベース表にOracle Label Securityポリシーが適用されると、各行のラベルを格納するために表に1列が追加されます。管理者は、この列を表示するか非表示にするかを選択できます。

2.2 ラベル・コンポーネント

この項では、ラベル用に定義される要素について説明します。

- ラベル・コンポーネントの定義および有効な文字

- レベル

- 区分

- グループ

- 業界別のレベル、区分およびグループの例

2.2.1 ラベル・コンポーネントの定義および有効な文字

機密性ラベルは、複数のコンポーネントを持つ単一の属性です。すべてのデータ・ラベルにはレベル・コンポーネントを含める必要がありますが、区分コンポーネントとグループ・コンポーネントはオプションです。管理者は、ラベルを作成する前にラベル・コンポーネントを定義する必要があります。

表2-1 機密性ラベルのコンポーネント

コンポーネント

説明

例

レベル

ラベル付きデータの機密性が指定された設定済の順序付けランクの単一指定

CONFIDENTIAL (1)、SENSITIVE (2)、HIGHLY_SENSITIVE (3)

区分

ラベル付きデータに対応付けられた0個以上のカテゴリ

FINANCIAL、STRATEGIC、NUCLEAR

グループ

データを所有するか、データにアクセスする組織の0個以上の識別子

EASTERN_REGION、WESTERN_REGION

すべてのラベル・コンポーネント指定に有効な文字には、英数字、アンダースコアおよび空白も含まれます。(先頭および後続の空白は無視されます。)

次の図に、レベル、区分およびグループを使用してデータを論理的に分類できる3つのディメンションを示します。

図2-1 レベル、区分およびグループを持つデータ・カテゴリ

2.2.2 レベル

レベルは、ラベルを付ける情報の機密性を示すランキングです。情報の機密性が高いほど、レベルも高くなります。情報の機密性が低いほど、レベルも低くなります。

ラベルには必ず1つのレベルを含める必要があります。Oracle Label Securityでは、1つのポリシーに最大10,000のレベルを定義できます。Oracle Label Security管理者は、各レベルに1つの数値と複数の文字を定義します。

たとえば、次のようなレベル・セットを定義できます。

表2-2 レベルの例

数値

詳細名

短縮名

40

HIGHLY_SENSITIVE

HS

30

SENSITIVE

S

20

CONFIDENTIAL

C

10

PUBLIC

P

表2-3 レベル指定の書式

書式

説明

数値(タグとも呼ばれる)

数値のレベルは0から9999です。機密性はこの数値でランキングされるため、機密性の高いレベルほど大きい数値、機密性の低いレベルほど小さい数値を割り当てる必要があります。表2-2では、40(HIGHLY_SENSITIVE)は30、20および10より上位レベルです。

管理者は、レベルの数値に連番を使用しないようにします。適切な方法は、レベル間に等間隔の増分(50や100など)を使用することです。これにより、既存の2つのレベル間に後からレベルを追加挿入できます。

詳細名

レベルの詳細名は80文字以内です。

短縮名

短縮名は30文字以内です。

管理者はレベル(およびその他の各ラベル・コンポーネント)に詳細名と短縮名の両方を定義しますが、検索時に表示されるのは短縮名のみです。ユーザーがラベルを操作する際は、コンポーネントの短縮名のみが使用されます。

この他に一般にユーザーが定義することの多いレベル・セットとして、TOP_SECRET、SECRET、CONFIDENTIALおよびUNCLASSIFIED、あるいは、TRADE_SECRET、PROPRIETARY、COMPANY_CONFIDENTIAL、PUBLIC_DOMAINなどがあります。

レベルのみを使用する場合、この例のレベル40のユーザーであれば、レベル40以下のすべてのデータ行に対して、アクセスまたは変更ができます。

注意:
このマニュアルで使用されているレベルおよびラベル(TOP_SECRET、SECRET、CONFIDENTIALなど)はすべて一例です。

2.2.3 区分

区分はラベル付きデータの機密性を記述する領域であり、レベルに対して、さらに細分化したレベルを提供します。

区分により、データが1つ以上のセキュリティ領域に対応付けられます。特定のプロジェクトに関連するすべてのデータに、同じ区分をラベル付けすることができます。たとえば、次のような区分セットを定義できます。

表2-4 区分の例

数値

詳細名

短縮名

85

FINANCIAL

FINCL

65

CHEMICAL

CHEM

45

OPERATIONAL

OP

表2-5 区分指定の書式

書式

説明

数値

数値の範囲は0から9999です。レベルに使用されている数値とは無関係です。区分の数値は、機密性のレベルを示すわけではありません。区分の数値は、ラベル文字列での区分短縮名の表示順序を制御します。たとえば、表2-4に示した3つの区分すべてとレベルSENSITIVEを持つラベルを作成するとします。このラベルを文字列で表示すると、次のようになります。

S:OP,CHEM,FINCL

表示順序は、区分に割り当てられた数値の順序に従います。45は65より小さく、65は85より小さい数値です。対照的に、FINCL区分に割り当てられた数値が5の場合、ラベルの文字列書式は次のようになります。

S:FINCL,OP,CHEM

詳細名

区分の詳細名は80文字以内です。

短縮名

短縮名は30文字以内です。

区分はオプションです。ラベルには0個以上の区分を含めることができます。Oracle Label Securityでは、最高10,000の区分を定義できます。

区分を含まないラベルがあってもかまいません。たとえば、HIGHLY_SENSITIVEおよびCONFIDENTIALレベルは区分なしで指定し、SENSITIVEレベルは区分を含むように指定できます。

データの機密性を分析すると、一部の区分が特定のレベルでのみ有用であることがわかる場合があります。図2-2「ラベルのマトリックス」に、区分を使用してデータをカテゴリに分類する方法を示します。

図2-2 ラベルのマトリックス

この図では、区分FINCL、CHEMおよびOPがレベルHIGHLY_SENSITIVE(40)とともに使用されています。ラベルHIGHLY_SENSITIVE:FINCL, CHEMは、2つの名前付き区分を持つレベル40を示します。区分FINCLとCHEMの機密性は同じです。保護されている表の一部のデータがどの区分にも属さない場合もあることに注意してください。

区分が指定されている場合、行データへのアクセスが通常は許可されるレベルのユーザーであっても、行ラベルで表示されるすべての区分もユーザーのラベルに含まれていないかぎりアクセスは禁止されます。

2.2.4 グループ

グループでは、EASTERN_REGION、WESTERN_REGION、WR_SALESなど、データを所有する組織またはデータにアクセスする組織を識別します。特定の部門に関連するすべてのデータに、その部門のグループをラベル付けすることができます。グループは、データを制御された方法で送信したり、組織の変更に適切なタイミングで対処する場合に役立ちます。会社組織の再編時には、データ・アクセス権も再編成に沿って適切に変更できます。

グループは階層型です。組織のインフラストラクチャに基づいてデータにラベルを付けることができます。つまり、グループを親グループに対応付けることができます。たとえば、次のような組織階層に対応するグループ・セットを定義できます。

図2-3 グループの例

WESTERN_REGIONグループには、3つのサブグループWR_SALES、WR_HUMAN_RESOURCESおよびWR_FINANCEが含まれています。WR_FINANCEサブグループは、WR_ACCOUNTS_RECEIVABLEおよびWR_ACCOUNTS_PAYABLEに分割されています。

表2-6に、この例の組織構造をOracle Label Securityのグループの書式で表す方法を示します。グループに割り当てられた数値が表示順序のみに影響することに注意してください。管理者は、階層(つまり、親子関係)を別々に指定します。

表2-6 グループの例

数値

詳細名

短縮名

親グループ

1000

WESTERN_REGION

WR

1100

WR_SALES

WR_SAL

WR

1200

WR_HUMAN_RESOURCES

WR_HR

WR

1300

WR_FINANCE

WR_FIN

WR

1310

WR_ACCOUNTS_PAYABLE

WR_AP

WR_FIN

1320

WR_ACCOUNTS_RECEIVABLE

WR_AR

WR_FIN

表2-7 グループ指定の書式

書式

説明

数値

グループの数値の範囲は0から9999で、ポリシーごとに一意である必要があります。

数値は、ランキングを示すわけではありません。また、親子関係も機密性レベルも示しません。単に、ラベル文字列でのグループの短縮名の表示順序を制御します。

たとえば、レベルSENSITIVE、区分CHEMICAL、グループWESTERN_REGIONおよびWR_HUMAN_RESOURCESを持つラベルが作成されているとします。このラベルを文字列で表示すると、次のようになります。

S:CHEM:WR,WR_HR

1000は1200より前に位置するため、WRはWR_HRより前に表示されます。

詳細名

グループの詳細名は80文字以内です。

短縮名

短縮名は30文字以内です。

グループはオプションであり、ラベルには0個以上のグループを含めることができます。Oracle Label Securityでは、最高10,000のグループを定義できます。

グループを含まないラベルがあってもかまいません。データの機密性を分析すると、一部のグループが特定のレベルでのみ使用されている場合があります。たとえば、HIGHLY_SENSITIVEおよびCONFIDENTIALラベルはグループなしで指定し、SENSITIVEラベルはグループを含むように指定できます。

関連項目:
第15章「インバース・グループを使用した解放性」

2.2.5 業界別のレベル、区分およびグループの例

表2-8に、各種業界での代表的な実装方法をリストし、Oracle Label Securityのレベル、区分およびグループの柔軟性を示します。

表2-8 業界別の代表的なレベル、区分およびグループ

業界

レベル

区分

グループ

防衛

TOP_SECRET

SECRET

CONFIDENTIAL

UNCLASSIFIED

ALPHA

DELTA

SIGMA

UK

NATO

SPAIN

金融サービス

ACQUISITIONS

CORPORATE

CLIENT

OPERATIONS

INSURANCE

EQUITIES

TRUSTS

COMMERCIAL_LOANS

CONSUMER_LOANS

CLIENT

TRUSTEE

BENEFICIARY

MANAGEMENT

STAFF

司法

NATIONAL_SECURITY

SENSITIVE

PUBLIC

CIVIL

CRIMINAL

ADMINISTRATION

DEFENSE

PROSECUTION

COURT

医療

PRIMARY_PHYSICIAN

PATIENT_CONFIDENTIAL

PATIENT_RELEASE

PHARMACEUTICAL

INFECTIOUS_DISEASES

CDC

RESEARCH

NURSING_STAFF

HOSPITAL_STAFF

B2B

TRADE_SECRET

PROPRIETARY

COMPANY_CONFIDENTIAL

PUBLIC

MARKETING

FINANCIAL

SALES

PERSONNEL

AJAX_CORP

BILTWELL_CO

ACME_INC

ERSATZ_LTD

2.3 ラベルの構文とタイプ

管理者は、ラベル・コンポーネントを定義した後に、レベル、区分およびグループの特定セットを組み合せてデータ・ラベルを作成します。次に、ラベル・コンポーネントに可能なすべての順列組合せの中から、データベース内で有効なデータ・ラベルとして実際に使用する組合せを指定します。

この作業には、Oracle Enterprise Managerのグラフィカル・ユーザー・インタフェースを使用する方法と、コマンドライン・プロシージャを使用する方法があります。ラベルの文字列表現の構文は、次のとおりです。

LEVEL:COMPARTMENT1,...,COMPARTMENTn:GROUP1,...,GROUPn

ラベルを指定するテキスト文字列は、英数字、空白およびアンダースコアを含めて4,000文字以内です。ラベルには大/小文字区別がありません。そのため大文字、小文字または大/小文字両方で入力できますが、文字列がデータ・ディクショナリに格納され、表示されるときには大文字が使用されます。コロン(:)は、コンポーネント間のデリミタとして使用されます。この構文では、後続のデリミタを入力する必要はありません。

たとえば、管理者が次のような有効なラベルを作成するとします。

SENSITIVE:FINANCIAL,CHEMICAL:EASTERN_REGION,WESTERN_REGION
CONFIDENTIAL:FINANCIAL:VP_GRP
SENSITIVE
HIGHLY_SENSITIVE:FINANCIAL
SENSITIVE::WESTERN_REGION

有効なデータ・ラベルが作成されると、さらに次の2つのことが行われます。

- ラベルが有効なデータ・ラベルとして自動的に指定されます。この機能では、データに割当て可能なラベルが制限されます。Oracle Label Securityでは、Oracle Internet Directoryで事前定義済のデータ・ラベルから、有効なデータ・ラベルを実行時に動的に作成することもできます。ただし、ほとんどのユーザーは、データ・ラベルの増加を制限するために、ラベルを手動で作成する方法を選択します。

- ラベルを表すテキスト文字列に数値ラベル・タグが関連付けられます。保護されている表のポリシー・ラベル列には、テキスト文字列ではなく、このラベル・タグが格納されます。

注意:
Oracle Internet Directoryを使用しないOracle Label Securityインストールでは、有効なデータ・ラベルの動的作成にはTO_DATA_LABELファンクションを使用します。また、その使用は厳密に制御する必要があります。「TO_DATA_LABELを使用したラベルの挿入」を参照してください。

関連項目:

- ラベル・コンポーネントおよびラベルの作成手順は、第7章「Oracle Label Securityポリシーの作成」を参照してください。

- 「ポリシーのラベル列とラベル・タグ」

- 「ラベル・タグ」

2.4 データ・ラベルとユーザー・ラベルの相互動作

ユーザーがアクセスできるのは、各自のラベル認可の範囲内にあるデータのみです。ユーザーには、次の情報が割り当てられています。

- 最大レベルと最小レベル

- 認可された区分のセット

- 認可されたグループ(および、暗黙的にすべてのサブグループの認可)のセット

たとえば、ユーザーに最大レベルSENSITIVEが割り当てられている場合、そのユーザーは潜在的にSENSITIVE、CONFIDENTIALおよびUNCLASSIFIEDのデータへのアクセス権を持つことになります。このユーザーは、HIGHLY_SENSITIVEデータにはアクセスできません。

図2-4「例: データ・ラベルとユーザー・ラベル」に、アクセス制御を行うためにデータ・ラベルとユーザー・ラベルがOracle Label Securityでどのように相互作用するかを示します。データ・ラベルはディスクリートですが、ユーザー・ラベルは包含的です。認可された区分およびグループに応じて、ユーザーは潜在的に各自の範囲内で全レベルに対応するデータにアクセスできます。

図2-4 例: データ・ラベルとユーザー・ラベル

この図のように、ユーザー1は、最大レベルがHSであるため、行2、3および4にアクセスできます。また、FIN区分へのアクセス権を持っており、階層形式のグループWRへのアクセス権にはグループWR_SALが含まれています。CHEM区分はないため、行1にはアクセスできません。(ユーザーが行にアクセスするためには、その行のデータ・ラベルのすべての区分に対する認可が必要です。)

ユーザー2は行3および4にアクセスできます。その最大レベルはSで、これは行2のHSより下位です。このユーザーは、FIN区分へのアクセス権を持っていますが、グループWR_SALに対する認可しか持っていません。そのため、行1にはアクセスできません。

図2-5「ラベル・コンポーネントの相互関係」に、組織階層に関連したデータがどのようにデータのレベルおよび区分に一致するかを示します。

図2-5 ラベル・コンポーネントの相互関係

たとえば、UNITED_STATESグループに3つのサブグループEASTERN_REGION、CENTRAL_REGIONおよびWESTERN_REGIONが含まれているとします。WESTERN_REGIONサブグループは、さらにCALIFORNIAおよびNEVADAに分割されています。各グループおよびサブグループにはそれぞれ、有効な区分およびレベルに属するデータがデータベース内に存在している可能性があります。したがって、CALIFORNIAサブグループ内に、FINANCIALであるSENSITIVEデータが存在する場合があります。

データには通常、単一グループがラベル付けされますが、これに対し、ユーザーのラベルは階層形式であることに注意してください。ユーザーが特定のグループを持つ場合、そのグループに暗黙的に子グループが含まれている場合があります。このように、UNITED_STATESグループに関連付けられたユーザーはすべてのデータへのアクセス権を持ちますが、CALIFORNIAに関連付けられたユーザーは、そのサブグループに関連するデータへのアクセス権のみを持ちます。

2.5 ラベルの管理

Oracle Label Securityには、データベース内で使用するラベルを定義して管理できるように、管理インタフェースが用意されています。Oracle Database内でラベルを定義するには、Oracle Label Securityパッケージを使用する方法と、Oracle Enterprise Managerを使用する方法があります。管理者は、最初にラベルを構成するレベル、区分およびグループを定義してから、データベースの内容に関して有効なデータ・ラベルのセットを定義できます。

管理者は、データベース内の個々の表またはアプリケーション・スキーマ全体にポリシーを適用できます。最後に、管理者は各データベース・ユーザーに、個々のジョブに必要なラベル・コンポーネント(および、必要に応じて権限)を割り当てます。

関連項目:
ラベル・コンポーネントの管理に使用するOracle Label Securityインタフェースの詳細は、第10章「表およびスキーマへのポリシーの適用」を参照してください。

3 アクセス制御および権限

第2章「データ・ラベルおよびユーザー・ラベル」では、ラベル(そのレベル、区分およびグループ)の概念と、行のデータ・ラベルとユーザーのラベルに基づくアクセス制御の基礎について説明しました。この章では、ユーザーがラベル付きの行に対して持つことのできるアクセス権のタイプを決定するアクセス制御と権限について検証します。

この章には、次の項が含まれます。

- アクセス調整の概要

- セッション・ラベルおよび行ラベル

- ユーザー認証

- アクセス調整のためのラベルの評価

- Oracle Label Securityの権限の使用

- 複数のOracle Label Securityポリシーの処理

3.1 アクセス調整の概要

Oracle Label Securityポリシーで保護されているデータにユーザーがアクセスするには、そのポリシーに定義されているラベルに基づく認可が必要です。図3-1「ユーザー、データおよびラベル間の関係」に、ユーザー、データおよびラベルの相互関係を示します。

- データ・ラベルでは、データ行の機密性が指定されます。

- ユーザー・ラベルは、ユーザーに適切な認可を付与します。

- ユーザーとデータ行とのアクセス調整は、ユーザーのラベルに依存します。

図3-1 ユーザー、データおよびラベル間の関係

注意:
Oracle Label Securityの施行オプションは、表およびスキーマに対するアクセス制御の適用方法に影響します。この章では、すべてのポリシー施行オプションが有効になっているものとします。

関連項目:
詳細は、「ポリシー・オプションの選択」を参照してください。

3.2 セッション・ラベルおよび行ラベル

この項では、基本的なユーザー・ラベルについて説明します。

- セッション・ラベル

- 行ラベル

- セッション・ラベルの例

3.2.1 セッション・ラベル

各Oracle Label Securityユーザーは、次を含む認可セットを持ちます。

- 最大レベルと最小レベル

- 認可された区分のセット

- 認可されたグループのセット

- 区分およびグループごとの、読取り専用アクセスまたは読取り/書込みアクセスの指定

管理者はユーザーに対してこれらの認可を設定するときに、そのユーザーの初期セッション・ラベルも指定します。

セッション・ラベルは、ユーザーが任意の時点で作業する、レベル、区分およびグループの特定の組合せです。ユーザーは、認可されているコンポーネントを任意に組み合せてセッション・ラベルを変更できます。

関連項目:
SA_SESSIONを使用したセッション・ラベルと行ラベルの変更

3.2.2 行ラベル

ユーザーがラベルを指定せずにデータを書き込む場合、ユーザーのセッション・ラベルを使用して行ラベルが自動的に割り当てられます。ただし、ユーザーは書き込んだ行のラベルを、指定したラベルのコンポーネントに関する特定の制限の範囲内で設定できます。

このラベルのレベルは、管理者が指定した範囲内で任意に設定できます。たとえば、ユーザーの現行のセッション・ラベルのレベルから最小レベルの間に設定できます。ただし、この行の新規ラベルの区分とグループは、さらに制限されます。新規ラベルに含めることができるのは、現行のセッション・ラベルに含まれていて、ユーザーが書込みアクセス権を持っている区分とグループのみです。

管理者はユーザー認証を設定するときに、初期のデフォルト行ラベルも指定します。

関連項目:

- SA_USER_ADMINを使用したコンポーネント別のユーザー・ラベルの管理

- SA_SESSIONを使用したセッション・ラベルと行ラベルの変更

3.2.3 セッション・ラベルの例

セッション・ラベルと行ラベルは、ユーザーのレベル、区分およびグループの認可の範囲内でどこにでも置くことができます。図3-2「ユーザー・セッション・ラベル」では、ユーザーの最大レベルはSENSITIVE、最小レベルはUNCLASSIFIEDです。ただし、デフォルトのセッション・ラベルはC:FIN,OP:WRです。この例では、管理者は、ユーザーがCONFIDENTIALレベルでデータベースに接続するように、そのセッション・ラベルを設定しています。

同様に、ユーザーは区分FINおよびOPとグループWRに対して認可されていても、管理者はそのユーザーが区分FINとグループWRにのみ接続するように、セッション・ラベルを設定できます。

関連項目:

- 「SA_USER_ADMIN.SET_COMPARTMENTS」または

- 「SA_USER_ADMIN.ALTER_COMPARTMENTS」

図3-2 ユーザー・セッション・ラベル

3.3 ユーザー認証

ユーザー認証には、次の2つのタイプがあります。

- 管理者が設定する認可

- 計算されるセッション・ラベル

3.3.1 管理者が設定する認可

管理者は、次のように多数のユーザー認証を明示的に設定します。

- 認可レベル

- 認可区分

- 認可グループ

3.3.1.1 認可レベル

管理者は、次の認可レベルを明示的に設定します。

表3-1 管理者が設定する認可レベル

認可レベル

意味

最大レベル

ユーザーが読取りおよび書込み操作中にアクセスできる機密性の最大ランキング。

最小レベル

ユーザーが書込み操作中にアクセスできる機密性の最小ランキング。最大レベルは最小レベル以上に設定する必要があります。

デフォルト・レベル

Oracle Databaseへの接続時にデフォルトで想定されるレベル

デフォルト行レベル

Oracle Databaseへのデータの挿入時にデフォルトで使用されるレベル

たとえば、Oracle Enterprise Managerでは、管理者がユーザーJoeに対して次の認可レベルを設定します。

型

短縮名

詳細名

説明

最大値

HS

HIGHLY_SENSITIVE

ユーザーの最上位レベル

最小値

P

PUBLIC

ユーザーの最下位レベル

デフォルト

C

CONFIDENTIAL

ユーザーのデフォルト・レベル

行

C

CONFIDENTIAL

INSERTの行レベル

図3-3 Enterprise Managerでの認可レベルの設定

3.3.1.2 認可区分

管理者は、ユーザーがセッション・ラベルに使用できる区分のリストを指定します。区分ごとに、書込みアクセス権を明示的に指定する必要があります。ユーザーは、書込み認可を持たない区分を含む行を直接挿入、更新または削除することはできません。

たとえば、Oracle Enterprise Managerでは、管理者がユーザーJoeに対して次の認可区分を設定します。

短縮名

詳細名

書込み

デフォルト

行

CHEM

CHEMICAL

あり

あり

なし

FINCL

FINANCIAL

あり

あり

なし

OP

OPERATIONAL

あり

あり

あり

図3-4 Enterprise Managerでの認可区分の設定

図3-4「Enterprise Managerでの認可区分の設定」では、「行」指定は、新規に挿入するデータのデフォルト行ラベルの一部として、区分を使用する必要があるかどうかを示します。この設定を有効にするには、LABEL_DEFAULTポリシー・オプションも有効にする必要があることに注意してください。

3.3.1.3 認可グループ

管理者は、ユーザーがセッション・ラベルに使用できるグループのリストを指定します。リストに含めるグループごとに、書込みアクセス権を明示的に指定する必要があります。

たとえば、Oracle Enterprise Managerでは、管理者は次の認可グループを設定します。

短縮名

詳細名

書込み

デフォルト

行

親

WR_HR

WR_HUMAN_RESOURCES

あり

あり

あり

WR

WR_AP

WR_ACCOUNTS_PAYABLE

あり

あり

なし

WR_FIN

WR_AR

WR_ACCOUNTS_RECEIVABLE

あり

あり

なし

WR_FIN

図3-5 Enterprise Managerでの認可グループの設定

図3-5「Enterprise Managerでの認可グループの設定」では、「行」指定は、新規に挿入するデータのデフォルト行ラベルの一部として、グループを使用する必要があるかどうかを示します。この設定を有効にするには、LABEL_DEFAULTポリシー・オプションも有効にする必要があることに注意してください。

関連項目:

- 認可の設定手順は、第8章「ユーザーのラベルおよび権限の管理」を参照してください。

- 「LABEL_DEFAULT: セッションのデフォルト行ラベルの使用」

3.3.2 計算されるセッション・ラベル

Oracle Label Securityでは、多数のラベルがセッション・ラベルの値に基づいて自動的に計算されます。計算されるセッション・ラベルを次に示します。

表3-2 計算されるセッション・ラベル

計算されるラベル

定義

最大読取りラベル

ユーザーが認可されている区分とグループを組み合せた最大レベル。

最大書込みラベル

ユーザーが書込みアクセス権を付与されている区分とグループを組み合せた最大レベル。

最小書込みラベル

ユーザーの最小レベル。

デフォルト読取りラベル

ユーザーのデフォルトとして指定された区分とグループを組み合せた単一のデフォルト・レベル。

デフォルト書込みラベル

ユーザーが書込みアクセス権を付与されている区分とグループを含む、デフォルト読取りラベルのサブセット。レベル・コンポーネントは、読取りラベルのデフォルト・レベルと同じです。このラベルは、ユーザーの書込み認可に基づいて読取りラベルから自動的に導出されます。

デフォルト行ラベル

挿入されるデータのデータ・ラベルのデフォルト値として指定されている、ユーザーの最小書込みラベルと最大書込みラベル間のコンポーネントの組合せ。

関連項目:
インバース・グループで計算されるラベル

3.4 アクセス調整のためのラベルの評価

表がOracle Label Securityポリシーで保護されている場合は、ユーザーのラベル・コンポーネントが行のラベル・コンポーネントと比較され、そのユーザーがデータにアクセスできるかどうかが判断されます。Oracle Label Securityでは、このようにして、ユーザーが行のデータに対して要求した操作を実行できるように認可されているかどうかが評価されます。この項では、ユーザー・アクセスの調整に使用されるルールとオプションについて説明します。この項の内容は、次のとおりです。

- 読取り/書込みアクセスの概要

- Oracle Label Securityの読取りアクセス・アルゴリズム

- Oracle Label Securityの書込みアクセス・アルゴリズム

3.4.1 読取り/書込みアクセスの概要

データ・ラベルはデータ・レコードの列に格納されますが、ユーザー認証に関する情報はリレーショナル表に格納されます。ユーザーがログオンすると、表を使用して、セッション中に使用するユーザー・ラベルが動的に生成されます。

3.4.1.1 読取り操作と書込み操作の違い

保護された表には、データ操作言語(DML)操作に関して次の2つの基本的なタイプのアクセス調整が存在します。

- 読取りアクセス

- 書込みアクセス

ユーザーは、読み取ることができるデータについての最大認可を持ち、ユーザーの書込み認可はそのサブセットです。最小書込みレベルにより、ユーザーが機密性を下げてデータを送信できるかどうかが制御されます。ユーザーは、管理者から各自に割り当てられた最小レベルより低いレベルのデータは書き込めません。

また、ユーザーが認可されている(つまり、ユーザーが少なくとも読取りアクセス権を持つ)区分とグループのリストが個別にあります。アクセス・フラグは、ユーザーが個々の区分またはグループに書き込むこともできるかどうかを示します。

3.4.1.2 グループに対する読取り/書込み認可の伝播

グループが階層形式で編成されている場合、ユーザーに割り当てられるグループには、そのユーザーが属しているグループに従属するすべてのサブグループが含まれます。この場合、親グループに対するユーザーの読取り/書込み認可は、すべてのサブグループに伝播します。

図3-6「サブグループによる読取り/書込みアクセス権の継承」のように、3つのサブグループを持つ親グループWESTERN_REGIONを考えます。ユーザーがWESTERN_REGIONへの読取りアクセス権を持っている場合は、3つのサブグループへの読取りアクセス権も付与されていることになります。管理者は、ユーザーにWESTERN_REGION親グループ(または他のサブグループ)への書込みアクセス権を付与せずに、サブグループWR_FINANCEへの書込みアクセス権を付与できます。これに対して、ユーザーがWESTERN_REGIONへの読取り/書込みアクセス権を持っている場合は、ツリー上でこのグループより下位にあるすべてのサブグループへの読取り/書込みアクセス権も付与されていることになります。

グループに対する書込み認可があっても、親グループに対する書込み認可が与えられるわけではありません。ユーザーがWESTERN_REGIONおよびWR_FINANCEへの読取り専用アクセス権を持っている場合に、管理者はそのユーザーが持っている上位レベルのグループへの読取り専用アクセス権に影響を与えずに、WR_ACCOUNTS_RECEIVABLEへの書込みアクセス権を付与できます。

図3-6 サブグループによる読取り/書込みアクセス権の継承

関連項目:

- ユーザーのラベルおよび権限の管理の概要

- インバース・グループの動作

3.4.2 Oracle Label Securityの読取りアクセス・アルゴリズム

READ_CONTROLの施行により、行のデータを読み取ることができるかどうかが判断されます。次のルールが順番に使用され、データ行に対するユーザーの読取りアクセス権が判断されます。

1. ユーザーのレベルは、データのレベル以上であることが必要です。

2. ユーザーのラベルには、データに属する少なくとも1つのグループ(またはそのようなサブグループの親グループ)が含まれている必要があります。

3. ユーザーのラベルは、データに属するすべての区分を含んでいる必要があります。

ユーザーのラベルがこれらのテストにパスした場合、このユーザーのラベルは行のラベルを支配している、と表現されます。

レベルに連結した読取りまたは書込みアクセス権という概念はないことに注意してください。これは、管理者が指定したレベル範囲(最小から最大)内で、ユーザーが潜在的に読取りおよび書込み可能になるためです。ユーザーは、各自の現行セッション・レベル以下のすべてのデータを常に読み取ることができます。ユーザーに最小認可レベルを下回る書込みを許可する権限は(FULL以外には)ありません。

図3-7「読取りアクセス権のラベル評価プロセス」のように、ラベル評価プロセスは、レベル、グループ、区分の順に進行します。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。

図3-7 読取りアクセス権のラベル評価プロセス

Oracle Label Securityは読取りアクセス要求を受け取ると、各行を評価して次のことを判断します。

1. ユーザーのレベルがデータのレベル以上かどうか

2. データのレベル以上の場合、ユーザーはデータ・ラベルに示されたグループのうち1つ以上へのアクセス権を持っているかどうか

3. 持っている場合、ユーザーはデータ・ラベルに示されたすべての区分へのアクセス権を持っているかどうか(つまり、データの区分がユーザーの区分のサブセットかどうか)

この評価プロセスのいずれかの段階で答えがいいえになる場合、Oracle Label Securityはその行へのアクセスを拒否して、次のデータ行の評価に移ります。

Oracle Label Securityポリシーでは、ユーザー・セッションはラベル以下の行の読取りを許可されます。これを下位読取りと呼びます。セッションでは、支配していないラベルの行を読み取ることはできません。

たとえば、SENSITIVE:ALPHA,BETAでログインすると、ラベルは行のラベルSENSITIVE:ALPHAを支配しているため、このラベルが付いた行を読み取ることができます。ただし、ラベルは行のラベルSENSITIVE:ALPHA,GAMMAを支配していないため、このラベルが付いた行を読み取ることはできません。

ユーザーが特殊なOracle Label Security権限を持っていると、他の場合には拒否される行へのアクセスを取得できることに注意してください。

関連項目:

- Oracle Label Securityのポリシーで定義される権限

- アクセス制御施行オプション

- インバース・グループでの読取りアクセスのアルゴリズム

- ラベル間の関係の分析

3.4.3 Oracle Label Securityの書込みアクセス・アルゴリズム

Oracle Label Securityのコンテキストでは、WRITE_CONTROLの施行により行データを挿入、更新または削除できるかどうかが決定されます。

WRITE_CONTROLにより、データへのアクセスをより細かい最小単位で制御できます。レベルに区分を追加すると最小単位は細かくなります。区分にグループを追加するとさらに細かくなります。アクセス制御は、ユーザーが読み取れるデータを書き込む権限を管理できれば、ファイングレイン・アクセス・コントロールとなります。

ユーザーが特定のデータ行を書き込むことができるかどうかを判断するために、Oracle Label Securityは次のルールを順番に評価します。

1. データ・ラベル内のレベルは、ユーザーの最小レベル以上で、かつユーザーのセッション・レベル以下であることが必要です。

2. グループが存在する場合、ユーザーのラベルには、データ・ラベルに表示される書込みアクセス権のある少なくとも1つのグループ(またはそのようなサブグループの親)が含まれている必要があります。また、ユーザーのラベルには、データ・ラベルにすべての区分が含まれている必要があります。

3. グループが存在しない場合、ユーザーのラベルには、データ・ラベル内のすべての区分に対する書込みアクセス権が必要です。

テスト2および3は、次のように書き換えることができます。

- ラベルにグループがない場合、ユーザーがデータに書き込むためには、ラベル内のすべての区分に対する書込みアクセス権が必要です。

- ラベルにグループがあり、ユーザーがグループの1つに対する書込みアクセス権を持つ場合、データに書き込むには区分に対する読取りアクセス権のみ必要です。

読取り操作の場合と同様に、ラベル評価プロセスはレベル、グループ、区分の順に進行します。ユーザーは、最小認可レベルより下位にも、現行セッション・レベルより上位にも、データを書き込むことはできないことに注意してください。最小レベルより下位の読取りは常に可能です。

次の図に、このプロセスによるINSERT、UPDATEおよびDELETE操作の処理方法を示します。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。

図3-8 書込みアクセス権のラベル評価プロセス

Oracle Label Securityはアクセス要求を受け取ると、各行を評価して次のことを判断します。

1. データのレベルがユーザーのレベル以下かどうか

2. データのレベルがユーザーの最小レベル以上かどうか

3. データのレベルが上限以下の場合、ユーザーはデータ・ラベルに示された1つ以上のグループへの書込みアクセス権を持っているか

4. 1つ以上のグループへのアクセス権を持っている場合、ユーザーはデータ・ラベルに示された、少なくとも読取りアクセス権付きのすべての区分へのアクセス権を持っているかどうか

5. グループはないが、区分がある場合、ユーザーはすべての区分への書込みアクセス権を持っているかどうか

この評価プロセスのいずれかの段階で答えがいいえになる場合、Oracle Label Securityはその行へのアクセスを拒否して、次のデータ行の評価に移ります。

セッション・ラベルがS:ALPHA,BETAで、区分ALPHAへの書込みアクセス権のみを持っている場合を考えます。この場合、ラベルS:ALPHA,BETAが付いた行を読み取ることはできますが、更新はできません。

要約すると、書込みアクセス権は、行データのINSERT、UPDATEおよびDELETE操作に対して施行されます。

また、各ユーザーには、書込みできる最小レベルを対応付けることができます。最小レベルより下位のレベルのラベルが付いた行の更新や削除も、最小レベルより下位のレベルを含む行ラベルが付いた行の挿入もできません。

関連項目:

- アクセス制御施行オプション

- インバース・グループでの書込みアクセスのアルゴリズム

3.5 Oracle Label Securityの権限の使用

この項では、Oracle Label Securityのデータベースおよび行のラベルの権限について説明します。

- Oracle Label Securityのポリシーで定義される権限

- 特殊なアクセス権限

- 特殊な行ラベル権限

- システム権限、オブジェクト権限およびポリシー権限

3.5.1 Oracle Label Securityのポリシーで定義される権限

Oracle Label Securityでは、認可されたユーザーに対してポリシーの特定部分をバイパスすることを許可する特殊な権限がサポートされます。表3-3に、ユーザーまたはトラステッド・ストアド・プログラム・ユニットに付与できるすべての権限セットのサマリーを示します。各権限については、表の後に詳しく説明します。

表3-3 Oracle Label Securityの権限

セキュリティ権限

説明

READ

ポリシーで保護されている全データへの読取りアクセスを許可します。

FULL

ポリシーで保護されている全データへの完全な読取りおよび書込みアクセスを許可します。

COMPACCESS

行のグループから独立して、行の区分で認可されているデータへのセッション・アクセスを許可します。

PROFILE_ACCESS

セッションに対して、そのラベルと権限を別のユーザーのラベルおよび権限に変更することを許可します。

WRITEUP

ユーザーに対して、行ラベル内でそのユーザーが認可されている最大レベル以下のレベルのみの設定または引上げを許可します。(LABEL_UPDATEがアクティブな場合にのみアクティブです。)

WRITEDOWN

ユーザーに対して、行ラベル内でそのユーザーが認可されている最小レベル以上のレベルへの設定または引下げを許可します。(LABEL_UPDATEがアクティブな場合にのみアクティブです。)

WRITEACROSS

ユーザーに対して、行ラベルのグループと区分の設定または変更は許可し、レベルの変更は禁止します。(LABEL_UPDATEがアクティブな場合にのみアクティブです。)

3.5.2 特殊なアクセス権限

ユーザーの認証は、次の4つの権限のいずれかで変更できます。

- READ

- FULL

- COMPACCESS

- PROFILE_ACCESS

3.5.2.1 READ

READ権限を持つユーザーは、認可またはセッション・ラベルに関係なく、ポリシーで保護されているすべてのデータを読み取ることができます。ラベル認可がなくてもかまいません。また、READ権限を持つユーザーは、ラベル認可に基づいて、書込みアクセス権を持つ任意のデータ行に書き込むことができます。

注意:
UPDATE、INSERTおよびDELETE操作に対しては、アクセス調整が適用されます。

この権限は、データ変更が許可されていないシステム管理者がデータをエクスポートする場合に便利です。また、データ変更を行わないユーザーがレポートを実行して情報をコンパイルする場合にも便利です。READ権限により、システムはOracle Label Securityポリシーが存在しないかのように動作するため、SELECT文のパフォーマンスが最適化されます。

3.5.2.2 FULL

FULL権限の効果とメリットはREAD権限と同じですが、1つ違いがあります。FULL権限を持つユーザーは、すべてのデータに書き込むこともできます。FULL権限を持つユーザーの場合、READおよびWRITEのアルゴリズムは適用されません。

この場合でもOracleのシステムおよびオブジェクトに対する認可は適用されることに注意してください。たとえば、この場合でもユーザーはアプリケーション表に対するSELECT権限が必要です。FULL認可では、個々の行レベルでのアクセス調整チェックがオフになります。

3.5.2.3 COMPACCESS

COMPACCESS権限により、ユーザーは行ラベルのグループとは無関係に、行ラベルの区分に基づいてデータにアクセスできます。行ラベルに区分がない場合、アクセスはグループの認可により決定されます。ただし、区分が存在し、かつ、その区分へのアクセスが認可されていれば、グループの認可はバイパスされます。これにより、データの全区分と一致するラベルを持つ、権限を持ったユーザーは、所有グループが何かということによるデータ・アクセス許可とは関係なく、特定の区分内のデータにアクセスできます。

図3-9「COMPACCESS権限を持つ読取りアクセスのラベル評価プロセス」に、COMPACCESS権限を持つ読取りアクセスのラベル評価プロセスを示します。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。

図3-9 COMPACCESS権限を持つ読取りアクセスのラベル評価プロセス

図3-10「COMPACCESS権限を持つ書込みアクセスのラベル評価プロセス」に、COMPACCESS権限を持つ書込みアクセスのラベル評価プロセスを示します。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。

図3-10 COMPACCESS権限を持つ書込みアクセスのラベル評価プロセス

3.5.2.4 PROFILE_ACCESS

PROFILE_ACCESS権限により、セッションで、そのセッション・ラベルおよびセッション権限を他のユーザーのラベルおよび権限に変更することが可能になります。これは、ユーザーは潜在的にFULL権限を持つユーザーになることができるため、きわめて強力な権限です。この権限は、トラステッド・ストアド・プログラム・ユニットには付与できません。

3.5.3 特殊な行ラベル権限

行にラベルが設定されている場合、そのラベルを変更するにはOracle Label Securityの権限が必要です。この権限には、WRITEUP、WRITEDOWNおよびWRITEACROSSがあります。

これらのラベル変更権限を施行するには、LABEL_UPDATE施行オプションをオンにする必要があることに注意してください。ユーザーが行ラベルを更新すると、新旧のラベルが比較され、必要な権限が判断されます。

3.5.3.1 WRITEUP

WRITEUP権限により、ユーザーは区分やグループを損わずに行のデータ・レベルを引き上げることができます。引き上げることができるのは、ユーザーの最大認可レベルまでです。

たとえば、認可されたユーザーは、各自の最小レベルより下位のレベルを持つデータ行のレベルを引き上げることができます。行がUNCLASSIFIEDでユーザーの最大レベルがSENSITIVEであれば、その行のレベルをSENSITIVEに引き上げることができます。現行セッション・レベルより上位に引き上げることはできますが、区分は変更できません。

3.5.3.2 WRITEDOWN

WRITEDOWN権限により、ユーザーは区分やグループを損わずに行のデータ・レベルを引き下げることができます。ユーザーの最小認可レベル以上のレベルであれば、どのレベルにでも引き下げることができます。

3.5.3.3 WRITEACROSS

WRITEACROSS権限により、ユーザーは機密性レベルを変更せずにデータの区分およびグループを変更できます。これにより、たとえばSENSITIVEデータはSENSITIVEレベルにしたままで、データの送信を管理できることが保証されます。

これにより、ユーザーはレベルを変更せずに、区分とグループを、ポリシー内で有効として現在定義されている他の区分またはグループに変更できます。WRITEACROSS権限があれば、1つ(以上)のグループへの読取りアクセス権を持つユーザーは、アクセス権を明示的に付与されていなくても、別のグループに書き込むことができます。

3.5.4 システム権限、オブジェクト権限およびポリシー権限

Oracle Label Security権限は、標準Oracle Databaseシステムおよびオブジェクト権限とは異なります。

表3-4 権限のタイプ

ソース

権限

定義

Oracle Database

システム権限

特定タイプのSQL文を実行する権限

オブジェクト権限

別のユーザーのオブジェクトにアクセスする権限

Oracle Label Security

ポリシー権限

Label Securityポリシーの特定部分をバイパスする権限

Oracle Databaseは、ユーザーに付与された任意アクセス制御権限を強制します。デフォルトでは、ユーザーはPUBLICユーザー・グループに付与される権限のみを持ちます。ユーザーが操作を実行するには、該当する権限を明示的に付与される必要があります。

たとえば、Oracle Databaseでオブジェクトを読み取るには、そのオブジェクトの所有者であるか、オブジェクトに対するSELECT権限を付与されているか、SELECT ANY TABLEシステム権限を付与されている必要があります。同様に、オブジェクトを更新するには、そのオブジェクトの所有者であるか、オブジェクトに対するUPDATE権限を付与されているか、UPDATE ANY TABLE権限を付与されている必要があります。

関連項目:
特定の操作の実行に必要なOracle Databaseの権限と、これらの任意アクセス制御権限を付与および取り消す方法の詳細は、Oracle Database管理者ガイドを参照してください。

3.5.5 アクセス調整およびビュー

ビューを通じてデータにアクセスする前に、ユーザーにはビューに対する適切なシステム権限およびオブジェクト権限が必要です。基礎となる表(ビューの基礎となる表)がOracle Label Securityで保護されている場合、ビューのユーザーがラベル付きデータの特定行にアクセスするには、Oracle Label Securityから認可を受ける必要があります。

3.5.6 アクセス調整およびプログラム・ユニットの実行

Oracle Databaseでは、ユーザー1がユーザー2に属するプロシージャを実行した場合、プロシージャはユーザー2のシステムおよびオブジェクト権限で実行されます。ただし、ユーザー1により実行されるプロシージャは、ユーザー1自身のOracle Label Securityのラベルおよび権限で実行されます。これは、ユーザー1が、他のユーザーが所有しているストアド・プログラム・ユニットを実行する場合も同じです。

図3-11「ストアド・プログラム・ユニットの実行」に、このプロセスを示します。

- ストアド・プログラム・ユニットは、プロシージャの所有者(ユーザー2)のDAC権限で実行されます。

- また、Oracle Label Securityで保護されている表にアクセスするストアド・プログラム・ユニットは、行に連結されているラベルと、プロシージャの実行者(ユーザー1)のOracle Label Securityのラベルおよび権限に基づいて、データ行へのアクセスを調整します。

図3-11 ストアド・プログラム・ユニットの実行

ストアド・プログラム・ユニットは、管理者によってOracle Label Security権限を割り当てられた場合にトラステッドになります。ストアド・プログラム・ユニットは、それをコールするユーザーの権限ではなく、固有の自律型Oracle Label Security権限で実行できます。たとえば、ユーザーの権利にOracle Label Security権限がなくても、WRITEDOWN権限を持つストアド・プログラム・ユニットを実行すれば、ラベルを更新できます。この場合、使用されるのは、ユーザー自身の権限ではなくストアド・プログラム・ユニットの権限です。

トラステッド・プログラム・ユニットにより、権限付きの操作を制御された方法でカプセル化できます。権限が割り当てられているプロシージャ、パッケージおよびファンクションを使用することで、各自のラベルと権限では認可されないデータにアクセスできます。たとえば、参照可能なデータのみでなく、表のすべてのデータに対して集計関数を実行するには、管理者により設定されたトラステッド・プログラムを使用します。これにより、プログラム・ユニットでユーザーのかわりに操作を実行でき、ユーザーに権限を直接付与する必要はありません。

関連項目:
第11章「トラステッド・ストアド・プログラム・ユニットの管理および使用」

3.5.7 アクセス調整およびポリシー施行オプション

管理者は、Oracle Label Securityポリシーを個々の表に適用するときに、ポリシー施行オプション・セットの中から選択できます。これらのオプションを使用すると、データベース表ごとに施行を様々に調整できます。ラベルに基づくアクセス制御のみでなく、SQL述語を各表に関連付けることもできます。述語により、表のうちユーザーがアクセスできる行をさらに厳密に定義できます。ポリシー施行オプションと述語については、第9章「ポリシー施行オプションとラベル付けファンクションの実装」を参照してください。

新規または更新する行に対応付けられているラベルを自動的に計算する必要がある場合、管理者はポリシーの適用時にラベル付けファンクションを指定できます。アクティブなラベル付けファンクションはラベルを提供する他の手段よりも優先されるため、以降、そのファンクションは常にコールされ、ポリシーに基づいて書き込まれるデータ・ラベルを提供します。

特に明記されている場合を除き、このマニュアルではすべての施行オプションが有効になっているものと想定しています。

関連項目:

- 「ラベル付けファンクションの使用」

- SA_POLICY_ADMIN.APPLY_SCHEMA_POLICYを使用したポリシーの適用

3.6 複数のOracle Label Securityポリシーの処理

この項では、複数のポリシーを使用する場合の様々な側面について説明します。

3.6.1 単一データベース内の複数のOracle Label Securityポリシー

単一データベース内のデータが複数のOracle Label Securityポリシーで保護されている場合があります。定義済の各ポリシーは、そのポリシーでのみ使用されるラベル・セットに対応付けられています。データ・ラベルには、各ポリシーの定義済ラベル・セットによる制約が適用されます。

各ポリシーは異なる表を保護しますが、複数のポリシーを単一の表に適用することもできます。データにアクセスするには、そのデータを保護しているポリシーすべてについて、ラベル認可が必要です。特定の行にアクセスするには、目的の行を含む表を保護するすべてのポリシーによって認可されている必要があります。権限が必要な場合は、作業に影響するすべてのポリシーの権限を必要とする場合があります。

3.6.2 分散環境での複数のOracle Label Securityポリシー

分散環境で作業している場合は、複数のデータベースが同一または異なるOracle Label Securityポリシーで保護されていることがあり、リモート接続もOracle Label Securityにより制御されます。

関連項目:
第13章「分散データベースでのOracle Label Securityの使用」

第II部

Oracle Label Securityの機能の使用

この部の構成は、次のとおりです。

- 第4章「Oracle Label Securityスタート・ガイド」

- 第5章「ラベル付きデータの処理」

- 第6章「Oracle Label SecurityとOracle Internet Directoryとの併用」

4 Oracle Label Securityスタート・ガイド

Oracle Label Security(OLS)は、データベース表に対して行レベルのセキュリティを提供します。データ行は、個々の行にラベルを付けることで保護されます。ポリシーで保護されているデータ行にアクセスするユーザーには、その行のOLSラベルで判断される適切な認可が必要です。

この章は、OLSの円滑な開始に役立ちます。簡単なOLSポリシーの作成に関連するタスクを説明します。この章では、サンプルOLSポリシーの作成とテストに役立つシナリオも使用します。この章の内容は、次のとおりです。

- OLSのインストールとLBACSYSユーザーの有効化

- OLSポリシーの作成

- サンプルOLSポリシーの作成

4.1 OLSのインストールとLBACSYSユーザーの有効化

Oracle Label Security (OLS)は、デフォルトのOracle Databaseのデフォルトのインストールには含まれていません。OLSを既存のデータベースにインストールするには、Oracle Universal Installerを使用します。OLSでは独自のユーザー・アカウントLBACSYSが提供されます。このアカウントは、インストール終了後に有効化する必要があります。

この項には、次の項目が含まれます。

- Oracle Label Securityのインストール

- データベースへのOracle Label Securityの登録

- LBACSYSユーザー・アカウントの有効化

Oracle Label Securityのインストール

ここでは、Oracle Label Securityを既存のデータベースにインストールする方法について説明します。

注意:
Oracle Universal Installer(OUI)を実行してOracle Label Securityをインストールするには、その前に、データベース・インスタンスを停止する必要があります。Windowsを使用している場合は、対応するデータベース・サービスも停止してください。
データベース・サービスを停止しないと、インストール時にサービスの停止を促すプロンプトが表示されます。

Oracle Label Securityをインストールする手順は、次のとおりです。

1. インストール・メディアからOracle Universal Installerを実行します。

- UNIX: 次のコマンドを使用します。

/mnt/cdrom/runInstaller

- Windows: インストール・メディアのsetup.exeファイルをダブルクリックします。
「ようこそ」画面が表示されます。

2. 「次へ」をクリックします。
「インストール方法の選択」画面が表示されます。

3. 「拡張インストール」を選択します。「次へ」をクリックします。
「インストール・タイプの選択」画面が表示されます。

4. 「カスタム」を選択します。「次へ」をクリックします。
「ホームの詳細の指定」画面が表示されます。

5. 正しいOracleベースとOracleホーム・ディレクトリが選択されていることを確認します。「次へ」をクリックします。
この時点で、システムが最小限の要件を満たしているかどうかが検証されます。次に、「使用可能な製品コンポーネント」画面が表示されます。

6. Oracle Label Securityに対応するチェック・ボックスを選択します。このオプションは、Oracle Database 11g Enterprise Editionのオプションに分類されています。「次へ」をクリックします。
「サマリー」画面が表示されます。

7. 選択内容を確認し、「インストール」をクリックします。
進捗状況を示す画面が表示されます。

8. 「インストールの終了」画面が表示されます。「終了」をクリックします。

データベースへのOracle Label Securityの登録

インストールを完了した後は、Oracle Label Securityをデータベースに登録する必要があります。

Oracle Label Securityをデータベースに登録する手順は、次のとおりです。

1. Database Configuration Assistant(DBCA)を開始します。

- UNIX: 次のコマンドを実行します。

$ORACLE_HOME/bin/dbca

- Windows: 「スタート」メニューから「すべてのプログラム」をクリックします。次に「Oracle - ORACLE_HOME」→「Configuration and Migration Tools」→「Database Configuration Assistant」の順にクリックします。

「ようこそ」画面が表示されます。

2. 「次へ」をクリックします。
「操作」画面が表示されます。

3. 「データベース・オプションの構成」を選択します。「次へ」をクリックします。
「データベース」画面が表示されます。

4. リストから、Oracle Label Securityをインストールしたデータベースを選択します。「次へ」をクリックします。
「データベース・コンテンツ」画面が表示されます。

5. 「Oracle Label Security」を選択します。「次へ」をクリックします。
「接続モード」画面が表示されます。

6. 「専用サーバー・モード」または「共有サーバー・モード」を選択します。「終了」をクリックします。
操作にはデータベースの再起動が必要があることを知らせるダイアログ・ボックスが表示されます。

7. 「OK」をクリックします。
確認ダイアログ・ボックスが表示されます。

8. 「OK」をクリックします。
DBCAの進捗状況を示す画面が表示されます。

9. 操作が完了すると、別の操作を実行するためのプロンプトが表示されます。「いいえ」をクリックしてDBCAを終了します。

LBACSYSユーザー・アカウントの有効化

OLSインストール・プロセスでは、LBACSYSというデフォルトのユーザー・アカウントが作成されます。このアカウントにはOLSを管理する権限が付与されています。デフォルトでは、LBACSYSは、パスワードの期限が切れている、ロックされたアカウントとして作成されます。次の手順では、LBACSYSをロック解除し、新しいパスワードを作成します。LBACSYSにSELECT ANY DICTIONARYシステム権限を付与することも必要です。この権限によって、LBACSYSはEnterprise Managerにログインできます。

LBACSYSのロックを解除して、新しいパスワードを作成する手順は、次のとおりです。

1. SYSTEMユーザーとしてDatabase Controlにログインします。

2. 「スキーマ」タブをクリックします。

3. 「ユーザーおよび権限」の下の「ユーザー」をクリックします。
「ユーザー」ページが表示されます。

4. LBACSYSを選択します。「編集」をクリックします。
「ユーザーの編集」ページが表示されます。

5. ステータスを「ロック解除」に変更します。

6. 「パスワードの入力」フィールドにパスワードを入力します。「パスワードの確認」フィールドにパスワードを再度入力します。

7. 「システム権限」タブをクリックします。

8. SELECT ANY DICTIONARYシステム権限を選択します。

9. 「適用」をクリックします。

4.2 OLSポリシーの作成

この項の内容は、次のとおりです。

- ステップ1: ポリシーの作成

- ステップ2: ポリシーのラベル・コンポーネントの作成

- ステップ3: ポリシーのデータ・ラベルの作成

- ステップ4: ポリシーに対するユーザーの認証

- ステップ5: データベース表へのポリシーの適用

- ステップ6: 表の行へのポリシー・ラベルの追加

4.2.1 ステップ1: ポリシーの作成

ポリシーの作成は、ポリシーの名前、ラベル列およびポリシーの施行オプションを定義することから開始します。

デフォルトのポリシー施行オプションを使用してポリシーを作成する手順は、次のとおりです。

1. LBACSYSアカウントを使用してOracle Enterprise Manager Database Controlにログインします。

2. 「サーバー」タブをクリックします。

3. 「セキュリティ」の下の「Oracle Label Security」をクリックします。「Label Securityポリシー」ページが表示されます。

4. 「作成」をクリックし、新しいLabel Securityポリシーの作成を開始します。
「Label Securityポリシーの作成」ページが表示されます。

5. ポリシーの名前、ラベル列およびデフォルトのポリシー施行オプションを定義します。

- 名前: ポリシーの名前を入力します(例: ACCESS_LOCATIONS)。

- ラベル列: ラベル列の名前を入力します(例: OLS_COLUMN)。後でポリシーを表に適用するときに、このラベル列がその表に追加されます。デフォルトでは、ポリシーのラベル列のデータ型はNUMBER(10)です。NUMBER(10)データ型の既存の表の列をラベル列として使用することもできます。

- ラベル列の非表示: 列を非表示にする場合に選択します。ポリシーを初めて作成する場合、ポリシーの開発中は「ラベル列の非表示」を無効にできます。ポリシーが完成し使用準備が整った時点で、アプリケーションに対して透過的になるように列を非表示にします。

- 有効: ポリシーを有効または無効に切り替えます。

- 強制オプション: ポリシーの適用時に、デフォルトのポリシー施行オプションが使用されます。これらのオプションが、ポリシーを適用するアプリケーションのニーズと一致していることを確認してください。
次のオプションから選択します。

- ポリシー強制を適用しない(NO_CONTROL)

- ポリシー強制の適用
すべての問合せ用(READ_CONTROL)

INSERT操作用(INSERT_CONTROL)

UPDATE操作用(UPDATE_CONTROL)

ラベル列の更新にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)

ラベル列を更新する操作(LABEL_UPDATE)

読取りアクセスが可能になるUPDATEおよびINSERT操作(CHECK_CONTROL)

6. 「OK」をクリックします。
新しいポリシーが「Oracle Label Securityポリシー」ページに表示されます。

4.2.2 ステップ2: ポリシーのラベル・コンポーネントの作成

前述のステップでは、ポリシーのコンテナを作成し、そのコンテナに対して施行オプションを設定しました。次に、ポリシーのラベル・コンポーネントを作成する必要があります。

ラベル・コンポーネントを作成する手順は、次のとおりです。

1. 「Oracle Label Securityポリシー」ページで、前述のステップで作成したポリシーを選択します。「編集」をクリックします。

2. 「Label Securityポリシーの編集」ページで、「ラベル・コンポーネント」タブを選択します。

3. 「レベル」の下の「5行追加」をクリックし、ポリシーのレベルを追加します。作成する各レベルに対して、詳細名、短縮名および数値タグを入力します。この数値タグは、レベルの機密性に対応しています。レベルをさらに作成する場合は、「5行追加」を再度クリックします。同じ手順を使用して、区分と行を作成します。区分とグループの場合、数値タグは機密性に対応していません。
少なくとも1つのレベル(SECRETなど)を作成する必要があります。区分とグループの作成はオプションです。

レベル番号は、対応しているラベルの機密性レベルを示します。番号が大きいほど機密性が大きいことを意味します。セキュリティ・ポリシーに追加のレベルが必要になる場合に備えて、後で拡張できるような数値の範囲を選択します。たとえば、レベルをPUBLIC(7000)とSENSITIVE(8000)として作成すると、後でCONFIDENTIALという中間レベルを作成することになった場合に、このレベルに対して7500という数値を割り当てることができます。

区分は、データに関連付けられているカテゴリを識別し、レベル内にさらに細分化したレベルを提供します。たとえば、1つの表に様々な部門に対応したデータがあり、そのデータを分類するために区分が必要な場合があります。区分はオプションです。

グループは、データを所有する組織またはデータにアクセスする組織を識別します。グループは、データを制御された方法で送信したり、組織の変更に適切なタイミングで対処する場合に役立ちます。グループはオプションです。

4. 「適用」をクリックします。

4.2.3 ステップ3: ポリシーのデータ・ラベルの作成

これまでのステップによって、ポリシーのデータ・ラベルを作成する準備が整いました。各データ・ラベルには、レベルを必ず1つのみ関連付ける必要があります。ラベルには、必要に応じて1つ以上の区分とグループを追加できます。

データ・ラベルを作成するには、数値タグをラベルに割り当てる必要があります。このタグの数値は、後でポリシーを表に適用するときにセキュリティ列に格納されます。ラベル・タグは、ラベルの機密性(レベル)にリンクしていません。単にラベルを識別するために使用されます。

各レベルのデータ・ラベルを作成する手順は、次のとおりです。

1. 「Label Securityポリシー」ページで、ラベルをレベルにリンクする必要のあるポリシーを選択します。

2. 「アクション」ボックスで、「データ・ラベル」を選択します。「実行」をクリックします。
「データ・ラベル」ページが表示されます。

3. 「追加」をクリックします。

「データ・ラベルの作成」ページが表示されます。

4. 次の情報を入力します。

- 数値タグ: ラベルを一意に識別する番号を入力します。この番号は、すべてのポリシーにわたって一意である必要があります。

- レベル: リストからレベルを選択します。

5. 必要に応じて、ラベルに追加する区分を選択できます。区分を追加するには、「区分」の下の「追加」をクリックします。ラベルに追加する区分を選択します。「選択」をクリックして区分を追加します。

6. 必要に応じて、ラベルに追加するグループを選択できます。グループを追加するには、「グループ」の下の「追加」をクリックします。ラベルに追加するグループを選択します。「選択」をクリックしてグループを追加します。

7. 「データ・ラベルの作成」ページの「OK」をクリックします。

データ・ラベルが「データ・ラベル」ページに表示されます。

8. 追加のデータ・ラベルを作成するには、ステップ3から7を繰り返します。

4.2.4 ステップ4: ポリシーに対するユーザーの認証

これまでのステップによって、Oracle Label Securityポリシーに対してユーザーを認可する準備が整いました。

OLSポリシーに対してユーザーを認可する手順は、次のとおりです。

1. 「Label Securityポリシー」ページで、認可が必要なポリシーを選択します。

2. 「アクション」ボックスで、「認可」を選択します。「実行」をクリックします。
「ユーザーの作成」ページが表示されます。

3. 次の手順でユーザーを追加します。

- 「データベース・ユーザー」の下の「追加」をクリックします。「検索と選択」ウィンドウで、目的のユーザーを選択して「選択」をクリックします。

- 「データベース以外のユーザー」については、その下の「5行追加」をクリックし、追加対象となるデータベース以外のユーザーのユーザー名を追加します。ほとんどのアプリケーション・ユーザーは、データベース以外のユーザーと考えられます。データベース以外のユーザーはデータベースには存在しません。ユーザー名には、Oracle Label Securityのネーミング規格を満たし、VARCHAR2(30)の長さのフィールドに収まる任意の名前を指定できます。ただし、アプリケーションがデータベースに接続する際、データベース以外のユーザーに関するセキュリティ情報は自動的に構成されないことに注意してください。この場合、アプリケーションでは、Oracle Label Securityのファンクションをコールして、実質的なデータベース・ユーザーでない特定ユーザーのラベル認可を想定する必要があります。

4. 「ユーザーの作成」ページで、認可するユーザーを選択します。「次へ」をクリックします。複数のユーザーが同じ認可を必要としている場合は、同じ認可を必要とするすべてのユーザーを選択します。「次へ」をクリックします。
「権限」ステップが表示されます。

5. ここでは、前述のステップで選択したユーザーに権限を割り当てることができます。権限によって、データベース・ユーザーはポリシーで施行される特定の制約をバイパスできます。付与する権限を選択します。「次へ」をクリックします。
ユーザーに権限を割り当てない場合は、権限を選択せずに「次へ」をクリックします。

「レベル、区分およびグループ」ステップが表示されます。

6. 次に、ユーザーのユーザー・ラベルを作成する必要があります。「レベル」の下にある懐中電灯アイコンを使用して、次のフィールドに入力する値を選択します。

- 最大レベル: このユーザーに対する読取りおよび書込みアクセスの最上位レベルを入力します。

- 最小レベル: 書込みアクセスの最下位レベルを入力します。

- デフォルト・レベル: ユーザーがログインする際のデフォルトのレベルを入力します。
最小レベル以上かつ最大レベル以下の値を指定します。

- 行レベル: ユーザーが表に書き込む際の、行に指定されるレベルを入力します。

7. 「区分」で「追加」をクリックして、ユーザー・ラベルに区分を追加します。追加する区分を選択します。「選択」をクリックします。

8. 追加する各区分については、次のプロパティを選択できます。

- 書込み: ユーザーは、その区分をラベルの一部として持つデータに書込みができます。

- デフォルト: その区分を、ユーザーのデフォルトのセッション・ラベルに追加します。

- 行: ユーザーが表に書き込む際に、その区分をデータ・ラベルに追加します。

9. 「グループ」の下の「追加」をクリックし、グループをユーザー・ラベルに追加します。グループを選択し、「選択」をクリックします。

10. 追加する各グループについては、次のプロパティを選択できます。

- 書込み: ユーザーは、そのグループをラベルの一部として持つデータに書込みができます。

- デフォルト: そのグループを、ユーザーのデフォルトのセッション・ラベルに追加します。

- 行: ユーザーが表に書き込む際に、そのグループをデータ・ラベルに追加します。

11. 「次へ」をクリックします。
「監査」ステップが表示されます。

12. ここでは、選択したユーザーに対してポリシー監査オプションを設定できます。監査オプションは、次の操作に対して設定できます。

- 適用されたポリシー:
「成功時に監査」では、表またはスキーマへのポリシー適用で、成功した適用について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

「失敗時に監査」では、表またはスキーマへのポリシーの適用で、失敗した適用について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

- 削除されたポリシー:
「成功時に監査」では、表またはスキーマからのポリシーの削除で、成功した削除について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

「失敗時に監査」では、表またはスキーマからのポリシーの削除で、失敗した削除について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

- 設定されたラベルと権限:
「成功時に監査」では、ユーザーの認証および権限の設定で、成功した設定について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

「失敗時に監査」では、ユーザーの認証および権限の設定で、失敗した設定について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

- すべてのポリシー固有の権限:
「成功時に監査」では、ポリシー権限の使用で、成功した使用について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

「失敗時に監査」では、ポリシー権限の使用で、失敗した使用について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

13. 「次へ」をクリックします。

14. ポリシー認可設定を確認できます。ポリシー認可を作成するには、「終了」をクリックします。「戻る」をクリックして、認可設定を変更することもできます。

4.2.5 ステップ5: データベース表へのポリシーの適用

次に、OLSポリシーをデータベース表に適用します。

ポリシーをデータベース表に適用する手順は、次のとおりです。

1. 「Label Securityポリシー」ページで、表に適用する必要があるポリシーを選択します。

2. 「アクション」ボックスから「適用」を選択します。「実行」をクリックします。
「適用」ページが表示されます。

3. ポリシーを表に適用するには、「表」タブを選択します。

注意:
ポリシーをスキーマに適用する場合は「スキーマ」タブを選択します。手順は、ポリシーを表に適用する場合と同じです。

4. 「作成」をクリックします。
「表の追加」ページが表示されます。

5. 「表」ボックスの横にある懐中電灯アイコンをクリックします。

6. 「検索と選択」ウィンドウの「検索」の下に、次の情報を入力します。

- スキーマ: 表が表示されるスキーマの名前を入力します。このフィールドを空のままにすると、すべてのスキーマの表が表示されます。

- 名前: 必要に応じて表の名前を入力します。このボックスを空のままにすると、スキーマ内のすべての表が表示されます。

ワイルドカードを使用して検索範囲を絞り込むには、パーセント(%)符号を使用します。たとえば、Oの文字で開始する表をすべて検索するには、O%と入力します。

7. 表を選択し、「選択」をクリックします。
「表の追加」ページが表示されます。

8. 次の情報を入力します。

- ポリシー強制オプション: 必要に応じて施行オプションを選択します。これらのオプションは、「ステップ1: ポリシーの作成」でポリシーを作成したときに選択した施行オプションに加えて表に適用されます。
施行オプションを変更しない場合、つまり、前述のステップで作成した内容と同じ施行オプションを使用する場合は、「デフォルトのポリシー強制を使用」を選択します。施行オプションをさらに追加する場合は、リストされている他のオプションを選択します。

- Labeling Function: (オプション)新しい行または更新された行に関連付けるラベルを自動的に計算する、ラベル付けの関数を指定します。アクティブなラベル付けの関数は、ラベルを提供する他の方法よりも優先されるため、この関数は常に実行され、ポリシーに書き込まれたデータ・ラベルを提供します。

- 述語: 必要に応じて、READ_CONTROLのラベルベースの述語と(ANDまたはORを使用して)結合する追加の述語を指定します。

9. 「OK」をクリックします。

4.2.6 ステップ6: 表の行へのポリシー・ラベルの追加

ポリシーを表に適用した後は、データ・ラベルを表の行に追加する必要があります。これらのラベルは、表内に作成されたポリシーのラベル列に格納されています。表を更新するユーザーには、ポリシーに対するFULLセキュリティ権限が必要です。通常、このユーザーは表の所有者です。

OLSポリシーに対するFULL権限を表の所有者に付与する手順は、次のとおりです。

1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

2. ACCESS_LOCATIONSポリシーを選択します。

3. 「アクション」ボックスから「認可」を選択します。「実行」をクリックします。
「認可」ページが表示されます。

4. 「追加」をクリックします。
「ユーザーの作成」ページが表示されます。

5. 「データベース・ユーザー」の下の「追加」をクリックします。
「検索と選択」ウィンドウが表示されます。

6. 表を所有するユーザーに対応するチェック・ボックスを選択します。「選択」をクリックします。
追加されたユーザーが「ユーザーの作成」ページにリストされます。

7. 「次へ」をクリックします。
「権限」ステップが表示されます。

8. 次の権限を選択します。
すべてのラベル・セキュリティ・チェックを省略(FULL)

「次へ」をクリックします。

「レベル、区分およびグループ」ステップが表示されます。

9. 「次へ」をクリックします。
「監査」ステップが表示されます。

10. 「次へ」をクリックします。
「確認」ステップが表示されます。

11. 「終了」をクリックします。

データ・ラベルを表に追加するには、次のようにします。

- SQL*Plusで、次の構文を使用してUPDATE文を入力します。

UPDATE LOCATIONS
SET OLS_COLUMN = CHAR_TO_LABEL('OLS_POLICY','DATA_LABEL')
WHERE UPPER(TABLE_COLUMN) IN (COLUMN_DATA);

たとえば、LABCSYSがACCESS_LOCATIONSというポリシーを作成した後、HR.LOCATIONS表の北京、東京およびシンガポールの各都市にラベルSENSを追加するとします。ポリシーのラベル列はROW_LABELであるとします。UPDATE文は、次のようになります。

UPDATE LOCATIONS
SET ROW_LABEL = CHAR_TO_LABEL('ACCESS_LOCATIONS','SENS')
WHERE UPPER(city) IN ('BEIJING', 'TOKYO', 'SINGAPORE');

実際にラベルが表内に作成されたことを確認する場合は、次のSELECT文を実行します。

SELECT LABEL_TO_CHAR (ROW_LABEL) FROM LOCATIONS;

4.3 サンプルOLSポリシーの作成

この例は、Oracle Label Securityの使用に関する一般的な概念を示します。この例では、セキュリティ・ラベルをHR.LOCATIONS表に適用します。SKING、KPARTNERS、LDORANの3人のユーザーが、LOCATIONS表にリストされている都市に基づいて、この表内の特定の列にアクセスするようにします。

HR.LOCATIONSは、次のように定義されています。

SQL> DESCRIBE locations

Name                                      Null?    Type
----------------------------------------- -------- -------------
LOCATION_ID                               NOT NULL NUMBER(4)
STREET_ADDRESS                                     VARCHAR2(40)
POSTAL_CODE                                        VARCHAR2(12)
CITY                                      NOT NULL VARCHAR2(30)
STATE_PROVINCE                                     VARCHAR2(25)
COUNTRY_ID                                         CHAR(2)

ここでは、次のラベルを適用します。

ラベル

権限

CONFIDENTIAL

ミュンヘン、オックスフォード、ローマに読取りアクセス権を付与します。

SENSITIVE

北京、東京およびシンガポールの各都市への読取りアクセス

PUBLIC

HR.LOCATIONSにリストされているその他すべての都市への読取りアクセス

この例を完成するには、次のステップに従います。

- ステップ1: Oracle Label Securityの例のためのユーザーの作成

- ステップ2: ACCESS_LOCATIONSポリシーの作成

- ステップ3: ACCESS_LOCATIONSポリシー・レベルのコンポーネントの定義

- ステップ4: ACCESS_LOCATIONSポリシーのデータ・ラベルの作成

- ステップ5: ACCESS_LOCATIONSポリシーに対するユーザー認証の作成

- ステップ6: HR.LOCATIONS表へのACCESS_LOCATIONSポリシーの適用

- ステップ7: 表データへのポリシー・ラベルの追加

- ステップ8: ACCESS_LOCATIONSポリシーのテスト

- ステップ9: この例のコンポーネントの削除(オプション)

4.3.1 ステップ1: Oracle Label Securityの例のためのユーザーの作成

ここでは、1つのロールと3人のユーザーを作成し、そのロールをこれらのユーザーに付与します。

- EMP_ROLEロールの作成

- SKING、KPARTNERSおよびLDORANの各ユーザーの作成

EMP_ROLEロールの作成

EMP_ROLEロールは、これから作成する3人のユーザーに対して必要な権限を提供します。

EMP_ROLEロールを作成する手順は、次のとおりです。

1. SYSTEMユーザーとしてDatabase Controlにログインします。

2. 「スキーマ」タブをクリックします。

3. 「ユーザーおよび権限」の下の「ロール」をクリックします。
「ロール」ページが表示されます。

4. 「作成」をクリックします。
「ロールの作成」ページが表示されます。

5. 「名前」フィールドにEMP_ROLEと入力します。「認証」は「なし」のままにします。

6. 「オブジェクト権限」タブをクリックします。

7. 「オブジェクト・タイプの選択」ボックスで「表」を選択します。「追加」をクリックします。
「表オブジェクト権限の追加」ページが表示されます。

8. 「表オブジェクトの選択」にHR.LOCATIONSを入力し、HRスキーマのLOCATIONS表を選択します。「使用可能な権限」リストのSELECTを「選択した権限」リストに移動します。

9. 「OK」をクリックします。

10. 「ロールの作成」ページの「OK」をクリックします。

SKING、KPARTNERSおよびLDORANの各ユーザーの作成

作成する3人のユーザーには、その職位に従ってHR.LOCATIONS表へのアクセスを異なるレベルで付与します。Steven King(SKING)は営業統括責任者であるため、HR.LOCATIONS表に対する完全な読取りアクセス権があります。Karen Partners(KPARTNERS)は制限されたアクセス権がある営業マネージャ、Louise Doran(LDORAN)は最小限のアクセス権がある営業担当です。

SKING、KPARTNERSおよびLDORANの各ユーザーを作成する手順は、次のとおりです。

1. SYSTEMとしてDatabase Controlにログインします。

2. 「スキーマ」タブをクリックします。

3. 「ユーザーおよび権限」の下の「ユーザー」をクリックします。
「ユーザー」ページが表示されます。

4. 「作成」をクリックします。
「ユーザーの作成」ページが表示されます。

5. 次の情報を入力します。

- 名前: SKING

- プロファイル: DEFAULT

- 認証: パスワード

- パスワードの入力/パスワードの確認: there4all

- デフォルト表領域: USERS

- 一時表領域: TEMP

- ロール: 「ロール」タブを選択し、EMP_ROLEロールをSKINGに付与します。「デフォルト」チェック・ボックスを選択します。

- システム権限: 「システム権限」タブを選択し、CREATE SESSIONシステム権限を付与します。

6. 「OK」をクリックします。

7. 「ユーザー」ページで、SKINGを選択し、「アクション」ボックスで「類似作成」を選択して、「実行」をクリックします。
「ユーザーの作成」ページが表示されます。

8. KPARTNERSのパスワードとしてeager2pleaseを使用し、LDORANのパスワードとしてready2goを使用して、KPARTNERSとLDORANのアカウントを作成します。
作成する必要があるのは、それぞれの名前とパスワードのみです。これらのユーザーにロールまたはシステム権限を付与する必要はありません。これらのユーザーのロールとシステム権限は、自動的に作成され、SKINGのアカウント内で定義されます。

現時点では、同一の権限を保持する3人のユーザーが作成されています。

4.3.2 ステップ2: ACCESS_LOCATIONSポリシーの作成

このポリシーは、後で作成するラベル・コンポーネントのコンテナです。

ACCESS_LOCATIONSポリシーを作成する手順は、次のとおりです。

1. LBACSYSユーザーとしてDatabase Controlにログインします。

2. 「サーバー」タブをクリックします。

3. 「セキュリティ」の下の「Oracle Label Security」をクリックします。
「Label Securityポリシー」ページが表示されます。

4. 「作成」をクリックします。

5. 「Label Securityポリシーの作成」ページで、次の情報を入力します。

- 名前: ACCESS_LOCATIONS

- ラベル列: OLS_COLUMN

- ラベル列の非表示: ラベル列が表示されるように、このチェック・ボックスの選択を解除します。
通常はラベル列を非表示にしますが、開発フェーズではラベル列を表示してチェックできるようにします。ポリシーを作成して正常に機能することを確認した後は、列を非表示にしてセキュリティを確保してください。

- 有効: ポリシーを有効に切り替えます。(デフォルトでは有効になっています。)

- 強制オプション: 「ポリシー強制の適用」を選択して、次のオプションを選択します。
すべての問合せ用(READ_CONTROL)

ラベル列の更新にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)

6. 「OK」をクリックします。
「Label Securityポリシー」ページにACCESS_LOCATIONSポリシーが表示されます。

4.3.3 ステップ3: ACCESS_LOCATIONSポリシー・レベルのコンポーネントの定義

ここでは、ACCESS_LOCATIONSポリシーのラベル・コンポーネントを定義できます。

ACCESS_LOCATIONSポリシーのラベル・コンポーネントを定義する手順は、次のとおりです。

1. 「Label Securityポリシー」ページで、ACCESS_LOCATIONSポリシーを選択します。「編集」をクリックします。
「Label Securityポリシーの編集」ページが表示されます。

2. 「ラベル・コンポーネント」タブを選択します。

3. 「レベル」の下の「5行追加」をクリックし、次のレベルを追加します。

詳細名

短縮名

数値タグ

SENSITIVE

SENS

3000

CONFIDENTIAL

CONF

2000

PUBLIC

PUB

1000

4. 「適用」をクリックします。

4.3.4 ステップ4: ACCESS_LOCATIONSポリシーのデータ・ラベルの作成

このステップでは、直前のステップで作成したレベルに対応するデータ・ラベルを作成します。

データ・ラベルを作成する手順は、次のとおりです。

1. 「Label Securityポリシー」リンクをクリックして、「Label Securityポリシー」ページに戻ります。

2. ACCESS_LOCATIONSポリシーを選択します。

3. 「アクション」リストから「データ・ラベル」を選択します。「実行」をクリックします。
「データ・ラベル」ページが表示されます。

4. 「追加」をクリックします。
「データ・ラベルの作成」ページが表示されます。

5. 次の情報を入力します。

- 数値タグ: 1000を入力します。

- レベル: リストからPUBを選択します。

6. 「OK」をクリックします。
データ・ラベルが「データ・ラベル」ページに表示されます。

7. 「追加」を再度クリックし、CONFレベルのデータ・ラベルを作成します。数値タグに2000を入力します。

8. 「OK」をクリックします。

9. 「追加」を再度クリックし、SENSレベルのデータ・ラベルを作成します。数値タグに3000を入力します。

10. 「OK」をクリックします。

4.3.5 ステップ5: ACCESS_LOCATIONSポリシーに対するユーザー認証の作成

ここでは、ポリシーに対するユーザー認証を作成します。

ポリシーに対するユーザー認証を作成する手順は、次のとおりです。

1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

2. ACCESS_LOCATIONSポリシーを選択します。

3. 「アクション」ボックスから「認可」を選択します。「実行」をクリックします。
「認可」ページが表示されます。

4. 「追加」をクリックします。
「ユーザーの作成」ページが表示されます。

5. 「データベース・ユーザー」の下の「追加」をクリックします。
「検索と選択」ウィンドウが表示されます。

6. ユーザーSKINGのチェック・ボックスを選択し、「選択」をクリックします。
ユーザーSKINGが「ユーザーの作成」ページにリストされます。

7. 「次へ」をクリックします。
「権限」ステップが表示されます。

8. 「次へ」をクリックします。
「レベル、区分およびグループ」ステップが表示されます。

9. 次のレベルをユーザーSKINGに設定します。

- 最大レベル: SENS(SENSITIVE用)

- 最小レベル: CONF(CONFIDENTIAL用)

- デフォルト・レベル: SENS

- 行レベル: SENS

これで、SKINGはCONFIDENTIALおよびSENSITIVEのデータを読み取ることができます。

10. 「次へ」をクリックします。
「監査」ステップが表示されます。

11. 監査操作のすべてが「なし」に設定されていることを確認して、「次へ」をクリックします。
「確認」ステップが表示されます。

12. 「確認」ステップでは、選択した認可設定すべてがリストされます。設定が正しいことを確認し、「終了」をクリックします。

13. ユーザーKPARTNERSがHR.LOCATIONSのCONFIDENTIALおよびPUBLICデータを読取りできるように、これらの手順を繰り返して次の認可を作成します。

- レベル、区分およびグループ: 4つのレベルすべてを、次のように設定します。

- 最大レベル: CONF(CONFIDENTIAL用)

- 最小レベル: PUB(PUBLIC用)

- デフォルト・レベル: CONF

- 行レベル: CONF

- 監査: すべて「なし」に設定します。

14. ユーザーLDORANに対して次の認可を作成します。このユーザーに許可されているのは、HR.LOCATIONSからのPUBLICデータ読取りのみです。

- レベル、区分およびグループ: 4つのレベルすべてをPUBに設定します。

- 監査: すべて「なし」に設定します。

4.3.6 ステップ6: HR.LOCATIONS表へのACCESS_LOCATIONSポリシーの適用

ここでは、ポリシーをHR.LOCATIONS表に適用します。

ACCESS_LOCATIONSポリシーをHR.LOCATIONS表に適用する手順は、次のとおりです。

1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

2. ACCESS_LOCATIONSポリシーを選択します。

3. 「アクション」ボックスから「適用」を選択します。「実行」をクリックします。
「適用」ページが表示されます。

4. 「表」タブが選択されていることを確認します。「作成」をクリックします。
「表の追加」ページが表示されます。

5. 「表」フィールドに、HR.LOCATIONSと入力します。

6. 「ポリシー列の非表示」チェック・ボックスの選択が解除されていることを確認します。

7. 「有効」チェック・ボックスが選択されていることを確認します。

8. 「ポリシー強制オプション」の下の「デフォルトのポリシー強制を使用」を選択します。
ACCESS_LOCATIONSのデフォルトのポリシー施行オプションは、次のとおりです。

- すべての問合せ用(READ_CONTROL)

- ラベル列の更新にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)

9. 「OK」をクリックします。
ACCESS_LOCATIONSポリシーがHR.LOCATIONS表に適用されます。

4.3.7 ステップ7: 表データへのポリシー・ラベルの追加

ACCESS_LOCATIONSポリシーをHR.LOCATIONS表に適用した後は、その表の行にラベルを付ける必要があります。HRは、LOCATIONS表の所有者です。ポリシー・ラベルを使用してLOCATIONS表を適切に更新するために、HRには、ACCESS_LOCATIONSポリシーに対するFULLセキュリティ権限が必要です。

- アプリケーション表の所有者へのFULL権限の付与

- HR.LOCATIONSのOLS_COLUMN表の更新

アプリケーション表の所有者へのFULL権限の付与

ラベル・セキュリティの管理ユーザーLBACSYSは、必要な権限をHRに付与できます。

OLSポリシーに対するFULL権限をHRに付与する手順は、次のとおりです。

1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

2. ACCESS_LOCATIONSポリシーを選択します。

3. 「アクション」ボックスから「認可」を選択します。「実行」をクリックします。
「認可」ページが表示されます。

4. 「追加」をクリックします。
「ユーザーの作成」ページが表示されます。

5. 「データベース・ユーザー」の下の「追加」をクリックします。
「検索と選択」ウィンドウが表示されます。

6. ユーザーHRのチェック・ボックスを選択し、「選択」をクリックします。
ユーザーHRが「ユーザーの作成」ページにリストされます。

7. 「次へ」をクリックします。
「権限」ステップが表示されます。

8. 次の権限を選択します。
すべてのラベル・セキュリティ・チェックを省略(FULL)

「次へ」をクリックします。「レベル、区分およびグループ」ステップが表示されます。

9. 「次へ」をクリックします。「監査」ステップが表示されます。

10. 「次へ」をクリックします。「確認」ステップが表示されます。

11. 「終了」をクリックします。

HR.LOCATIONSのOLS_COLUMN表の更新

ここで、ユーザーHRは、適切なラベルを使用してHR.LOCATIONS表を更新できます。

HR.LOCATIONSのOLS_COLUMN表を更新する手順は、次のとおりです。

1. SQL*Plusで、ユーザーHRとして接続します。

CONNECT HR
Enter password:

HRがロックされていることを示すエラー・メッセージが表示された場合は、次の文を入力することで、アカウントのロックを解除してパスワードをリセットできます。

CONNECT system
Enter password: sys_password
ALTER USER HR ACCOUNT UNLOCK IDENTIFIED BY password
CONNECT hr
Enter password:

2. 次のUPDATE文を入力して、SENSラベルを北京、東京およびシンガポールの各都市に適用します。

UPDATE LOCATIONS
SET ols_column = CHAR_TO_LABEL('ACCESS_LOCATIONS','SENS')
WHERE UPPER(city) IN ('BEIJING', 'TOKYO', 'SINGAPORE');

3. 次のUPDATE文を入力して、CONFラベルをミュンヘン、オックスフォードおよびローマの各都市に適用します。

UPDATE LOCATIONS
SET ols_column = CHAR_TO_LABEL('ACCESS_LOCATIONS','CONF')
WHERE UPPER(city) IN ('MUNICH', 'OXFORD', 'ROME');

4. 次のUPDATE文を入力して、PUBラベルを残りの都市に適用します。

UPDATE LOCATIONS
SET ols_column = CHAR_TO_LABEL('ACCESS_LOCATIONS','PUB')
WHERE ols_column IS NULL;

5. 列が更新されたことを確認するには、次の問合せを入力します。

SELECT LABEL_TO_CHAR (OLS_COLUMN) FROM LOCATIONS;

注意:

前述の問合せでは、ラベル列名(OLS_COLUMN)を明示的に使用することで、列が非表示の場合でも、そのラベル列を表示できます。

ラベル列が非表示の場合にラベル列名を明示的に指定しないと、そのラベル列は問合せ結果に表示されません。たとえば、SELECT * FROM LOCATIONSの問合せを使用すると、非表示のラベル列は表示されません。この機能を使用すると、ラベル列をアプリケーションに対して透過的にできます。ラベル列の追加前に設計されたアプリケーションでは、ラベル列が認識されないため表示されません。

4.3.8 ステップ8: ACCESS_LOCATIONSポリシーのテスト

これまでのステップによって、ACCESS_LOCATIONSポリシーが完成し、テストできる状態になりました。ポリシーは、3人の各ユーザーとしてSQL*Plusにログインし、HR.LOCATIONS表に対してSELECTを実行することでテストできます。

ACCESS_LOCATIONSポリシーをテストする手順は、次のとおりです。

1. SQL*Plusで、ユーザーSKING(パスワードはthere4all)として接続します。

CONNNECT SKING
Enter password: there4all

2. 次の文を入力します。

COL city HEADING City FORMAT a25
COL country_id HEADING Country FORMAT a11
COL Label format a10
SELECT city, country_id, LABEL_TO_CHAR (OLS_COLUMN)
AS Label FROM hr.locations ORDER BY ols_column;

ユーザーSKINGは、PUB、CONFおよびSENSのラベルが付いているすべての行にアクセスできます。

3. ユーザーKPARTNERSおよびLDORANについて、これらのステップを繰り返します。
KPARTNERSのパスワードはeager2please、LDORANのパスワードはready2goです。

KPARTNERSはCONFおよびPUBのラベルが付いている行にアクセスでき、LDORANはPUBのラベルが付いている行にアクセスできます。

4.3.9 ステップ9: この例のコンポーネントの削除(オプション)

必要な場合は、この例で作成したコンポーネントを削除します。

この例のコンポーネントを削除する手順は、次のとおりです。

1. Database Controlで、ユーザーSYSTEMとして接続します。

2. 「スキーマ」タブをクリックします。

3. 「ユーザーおよび権限」の下の「ユーザー」をクリックします。

4. ユーザーKPARTNERSを選択し、「削除」をクリックします。

5. 「確認」ページで、「はい」をクリックします。

6. ユーザーLDORANおよびSKINGについて、ステップ4と5を繰り返します。

7. Database Controlをログアウトした後、LABCSYSユーザーとしてログインします。

8. 「サーバー」タブをクリックします。

9. 「セキュリティ」の下の「Oracle Label Security」をクリックします。

10. 「Label Securityポリシー」ページで、「名前」フィールドにACCESS%と入力し、「実行」をクリックします。

11. ACCESS_LOCATIONSが選択されていることを確認し、「削除」をクリックします。
「確認」ページが表示されます。

12. 「列の削除」を選択すると、HR.LOCATIONS表からOLS_COLUMNポリシー列も削除されます。「はい」をクリックしてポリシーを削除します。

5ラベル付きデータの処理

この章では、次の方法について説明します。

- Oracle Label Security機能を使用したラベル付きデータの管理

- セッションのセキュリティ属性値の表示

- 表示したセッション属性値の変更

この章の内容は、次のとおりです。

- ポリシーのラベル列とラベル・タグ

- ラベルの表示

- ラベルを使用したデータのフィルタリング

- ラベル付きデータの挿入

- SA_SESSIONを使用したセッション・ラベルと行ラベルの変更

注意:
このマニュアルの多くの例では、HUMAN_RESOURCESサンプル・ポリシーを使用しています。そのポリシー名はHRで、ポリシー・ラベル列はHR_LABELです。特に明記していないかぎり、各例では、Oracle Label Securityポリシーの施行がすべて有効になっている状態で、ユーザーの認証の範囲内でSQL文が行に対して実行されるものとします。

5.1 ポリシーのラベル列とラベル・タグ

この項では、表またはスキーマ内でポリシーのラベル列を作成して値を格納する方法について説明します。この項の内容は、次のとおりです。

- ポリシーのラベル列

- ラベル・タグ

5.1.1 ポリシーのラベル列

表に適用される各ポリシーにより、データベースに1列が作成されます。デフォルトでは、ポリシーのラベル列はNUMBER型です。

注意:
ポリシーの作成自体は、表やスキーマに影響しません。ポリシーは表またはスキーマにのみ適用されます。次の各項を参照してください。

- SA_SYSDBA.CREATE_POLICYを使用したポリシーの作成

- SA_POLICY_ADMIN.APPLY_TABLE_POLICYを使用したポリシーの適用

- SA_POLICY_ADMIN.APPLY_SCHEMA_POLICYを使用したポリシーの適用

ポリシーに関する各行のラベルは、文字列書式のラベル値と等価の数値を使用して、その列のタグで表されます。ラベル・タグは、ラベル作成時に管理者が手動で指定しないかぎり自動的に生成されます。

自動ラベル生成には、管理者がラベル・コンポーネントを定義するときに設定したルールが適用されます。第2章「データ・ラベルおよびユーザー・ラベル」を参照してください。

5.1.1.1 ポリシーのラベル列の非表示化

管理者は、表にHIDEオプションを適用して、ポリシーを表す列を非表示にするように決定できます。HIDEを使用するポリシーを表に適用すると、SELECT*またはDESCRIBE操作を実行するユーザーには、ポリシーのラベル列が表示されなくなります。ポリシーのラベル列が非表示でない場合、ラベル・タグはNUMBER型として表示されます。「HIDEポリシー列オプション」を参照してください。

5.1.1.2 例1: 数値列データ型(NUMBER)

SQL> describe emp;
Name                                      Null?    Type
----------------------------------------- -------- --------
EMPNO                                     NOT NULL NUMBER(4)
ENAME                                              CHAR(10)
JOB                                                CHAR(9)
MGR                                                NUMBER(4)
SAL                                                NUMBER(7,2)
DEPTNO                                    NOT NULL NUMBER(2)
HR_LABEL                                           NUMBER(10)

5.1.1.3 例2: 数値列データ型と非表示列

この例では、HR_LABEL列は表示されません。

SQL> describe emp;
Name                                      Null?    Type
----------------------------------------- -------- --------
EMPNO                                     NOT NULL NUMBER(4)
ENAME                                              CHAR(10)
JOB                                                CHAR(9)
MGR                                                NUMBER(4)
SAL                                                NUMBER(7,2)
DEPTNO                                    NOT NULL NUMBER(2)

5.1.2 ラベル・タグ

第2章「データ・ラベルおよびユーザー・ラベル」で説明したように、管理者は最初にポリシーに使用するラベル・コンポーネントのセットを定義します。ラベルの作成時に、管理者はラベルを構成するコンポーネントの有効な組合せセット、つまり、オプションで1つ以上のグループまたは区分と組み合せたレベルを指定します。ポリシー内で有効なこれらの各ラベルは、管理者により割り当てられた、または初回使用時に自動的に生成された、関連付けられている数値タグによって一意に識別されます。管理者がラベル・タグを手動で定義すると、ソートや論理比較を行うときのラベル値の順序付けを制御できるというメリットがあります。

ただし、ラベル・タグは、データベース内のすべてのポリシー間で一意であることが必要です。データベース内で複数のポリシーを使用する場合、異なるポリシー内で同じ数値ラベル・タグは使用できません。ラベル・タグはそれぞれが1つのラベルを一意に識別すること、およびデータ行に格納されるのはラベルの文字列表現ではなく、この数値タグであることに注意してください。

この項には、次の項目が含まれます。

- ラベル・タグの手動定義によるラベルの順序付け

- ラベル・タグの手動定義によるデータの操作

- 自動的に生成されるラベル・タグ

5.1.2.1 ラベル・タグの手動定義によるラベルの順序付け

ラベル・タグを手動で定義すると、管理者はラベルを意味のある方法でソートし比較できるようなデータ操作方法を実装できます。そのためには、管理者は保護されたデータに関連付けるラベルをすべて事前に定義し、各ラベルに意味のあるラベル・タグ値を割り当てます。手動で割り当てることができるラベル・タグは8桁以内です。ラベル・タグの値は1以上である必要があります。

ラベル・タグ値をラベル・コンポーネントの数値に関連付ける方法を実装すると、メリットが得られる場合があります。これにより、タグを使用してデータ行を意味のある方法でグループ化できます。ただし、このアプローチは必須ではありません。機密性の高いラベルのタグは、機密性の低いラベルのタグより大きい数値に設定することをお薦めします。

表5-1に、管理者が割り当てたラベル・タグのセットを示します。この例で、管理者の設定したラベル・タグ値が、第2章「データ・ラベルおよびユーザー・ラベル」で説明したレベル、区分および行の数値に基づいていることに注意してください。

表5-1 管理者が定義したラベル・タグ(例)

ラベル・タグ

ラベル文字列

10000

P

20000

C

21000

C:FNCL

21100

C:FNCL,OP

30000

S

31110

S:OP:WR

40000

HS

42000

HS:OP

この例では、PUBLICレベルのラベルは1、CONFIDENTIALレベルのラベルは2、SENSITIVEレベルのラベルは3、HIGHLY_SENSITIVEレベルのラベルは4で始まっています。

FINANCIAL区分を持つラベルは1000番台、OP区分を持つラベルは1100番台になっています。10の桁はグループWRなどを示します。

この他に、グループのみに基づく方法などもあります。その場合、タグは3110、3120、3130などとなります。

ただし、ラベル・タグは、個々のラベル・コンポーネントに割り当てられている数値にかかわらず、ラベル全体を識別します。ラベル・タグは、個別に評価される番号の集まりではなく、全体で1つの整数として使用されます。

5.1.2.2 ラベル・タグの手動定義によるデータの操作

管理者がラベル・タグを定義すると、ラベル・タグでラベル文字列全体(つまり、ラベル・コンポーネントの組合せ)を参照できるような便利な方法を取ることができます。たとえば、表5-1にあるように、タグ31110でラベル文字列S:OP:WR全体を表すことができます。

ラベル・タグは、データをパーティション化する便利な方法として使用できます。たとえば、範囲1000から1999内のラベルを持つすべてのデータを表領域Aに置き、範囲2000から2999内のラベルを持つすべてのデータを表領域Bに置くことができます。

この最も単純な表記法は、ラベル数が限られていて、それに対して各種操作を実行する必要がある場合にも役立ちます。ある会社が他の多数の会社の人事管理システムを管理している状況を考えます。会社YのユーザーはいずれもラベルC:ALPHA:CYを持ち、そのタグ210が設定されているとします。会社Yのアプリケーション・ユーザーの総数を判断するには、ホスト管理者は次のように入力します。

SELECT * FROM tab1
WHERE hr_label = 210;

5.1.2.3 自動的に生成されるラベル・タグ

表5-2にあるように、動的に生成されるラベル・タグは10桁で、ラベル・コンポーネントに割り当てられている番号とは無関係です。データをラベル別にグループ化する手段はありません。

表5-2 生成されたラベル・タグ(例)

ラベル・タグ

ラベル文字列

100000020

P

100000052

C

100000503

C:FNCL

100000132

C:FNCL,OP

100000003

S

100000780

S:OP:WR

100000035

HS

100000036

HS:OP

関連項目:

- SA_LABEL_ADMIN.CREATE_LABELを使用した有効なデータ・ラベルの作成

- パフォーマンス強化のためのラベル・タグ方針の作成

5.2 データ行へのラベルの割当て

挿入される行については、「ラベル付きデータの挿入」を参照してください。

既存のデータ行の場合は、ラベル付けファンクションを作成してラベルを割り当てることができます。このファンクションでは、挿入するラベルを定義する表と行の条件を正確に指定します。ファンクション名は、表またはスキーマにポリシーを適用するためのコール、または管理者によるUPDATE時に指定できます。

関連項目:

- 「ラベル付けファンクションの使用」

- SA_POLICY_ADMIN.APPLY_TABLE_POLICYを使用したポリシーの適用

- SA_POLICY_ADMIN.APPLY_SCHEMA_POLICYを使用したポリシーの適用

5.3 ラベルの表示

ラベルの検索時に、文字列値を自動的に取得することはありません。デフォルトでは、ラベル・タグの値が戻されます。2つのラベル操作ファンクションを使用すると、ラベル・タグの値と文字列表現の間で変換できます。

- CHAR_TO_LABELを使用した文字列からラベル・タグへの変換

- LABEL_TO_CHARを使用したラベル・タグから文字列への変換

5.3.1 CHAR_TO_LABELを使用した文字列からラベル・タグへの変換

文字列をラベル・タグに変換するには、CHAR_TO_LABELファンクションを使用します。このファンクションでは、指定した文字列のラベル・タグが戻されます。

構文:

FUNCTION CHAR_TO_LABEL (
policy_name     IN VARCHAR2,
label_string    IN VARCHAR2)
RETURN NUMBER;

例:

INSERT INTO emp (empno,hr_label)
VALUES (999, CHAR_TO_LABEL('HR','S:A,B:G5');

HRはラベルのポリシー名、Sは機密性レベル、A,Bは区分、G5はグループです。

5.3.2 LABEL_TO_CHARを使用したラベル・タグから文字列への変換

表またはビューを問い合せて自動的に取得される行は、表またはビュー内の行のうち、問合せの修飾を満たし、問合せを行ったユーザーのラベルに支配される行すべてです。ポリシーのラベル列が非表示に設定されていない場合は、各行のラベル・タグ値が表示されます。各ラベルの文字列値を表示するには、LABEL_TO_CHARファンクションを使用する必要があります。

すべての変換は明示的に行う必要があることに注意してください。タグと文字列表現の間の自動的なキャストはありません。

構文:

FUNCTION LABEL_TO_CHAR (
label                 IN NUMBER)
RETURN VARCHAR2;

5.3.2.1 LABEL_TO_CHARの例

以降の各例に、LABEL_TO_CHARの使用を示します。

5.3.2.1.1 例1:

表またはビューの行のラベルを取得するには、次のようにSELECT文でポリシーのラベル列を指定します。

SELECT label_to_char (hr_label) AS label, ename FROM tab1;
WHERE ename = 'RWRIGHT';

この文では次のように戻されます。

LABEL          ENAME
------------   ----------
S:A,B:G1       RWRIGHT

5.3.2.1.2 例2:

SELECT文のWHERE句でポリシーのラベル列を指定することもできます。次の文では、ポリシー・ラベルS:A,B:G1を持つすべての行が表示されます。

SELECT label_to_char (hr_label) AS label,ename FROM emp
WHERE hr_label = char_to_label ('HR', 'S:A,B:G1');

この文では次のように戻されます。

LABEL           ENAME
-------------   ---------
S:A,B:G1        RWRIGHT
S:A,B:G1        ESTANTON

また、次のように、より柔軟な文を使用して、HR_LABEL列のテキストに文字列S:A,B:G1を含むデータを検索することもできます。

SELECT label_to_char (hr_label) AS label,ename FROM emp
WHERE label_to_char (hr_label) like '%S:A,B:G1%';

LABEL_TO_CHARファンクションを使用しない場合は、ラベル・タグが表示されます。

5.3.2.1.3 例3:

次の例は、数値列データ型(NUMBER)の動的に生成されたラベル・タグですが、LABEL_TO_CHARファンクションを使用していません。LABEL_TO_CHARファンクションを使用しない場合は、ラベル・タグが表示されます。

SQL> select empno, hr_label from emp
where ename='RWRIGHT';

EMPNO      HR_LABEL
---------- ----------
7839       1000000562

5.3.2.2 ポリシーのラベル列が非表示に設定されている場合の表からのすべての列の取出し

ポリシー・ラベル列が非表示になっている場合、SELECT *コマンドを使用して表からすべての列を選択しても、ポリシー・ラベル列は自動的には戻されません。ラベルを取り出すように明示的に指定する必要があります。たとえば、DEPT表からすべての列を(ポリシーのラベル列の文字列表現を含め)取り出すには、次のように入力します。

SQL> column label format a10
SQL> select label_to_char (hr_label) as label, dept.*
2  from dept;

これらのSQL文を実行すると、次のデータが戻されます。

表5-3 サンプルSQL文から戻された非表示列のデータ

LABEL

DEPTNO

DNAME

LOC

L1

10

ACCOUNTING

NEW YORK

L1

20

RESEARCH

DALLAS

L1

30

SALES

CHICAGO

L1

40

OPERATIONS

BOSTON

これに対して、HR_LABEL列を明示的に指定しない場合は、ラベルはまったく表示されません。ポリシー列名はポリシーに基づいて設定されますが、HIDEオプションは表単位で設定されることに注意してください。

関連項目:
「HIDEポリシー列オプション」

5.4 ラベルを使用したデータのフィルタリング

SQL文の処理中に、Oracle Label Securityは第7章のOracle Label Securityポリシーの作成および第10章の表およびスキーマへのポリシーの適用で説明した作成および適用手順で、データベースに定義されているセキュリティ・ポリシーを呼び出します。SELECT文の場合、ポリシーはユーザーが表示を認可されているデータ行をフィルタします。INSERT、UPDATEおよびDELETE文の場合、Oracle Label Securityはユーザーの認証に基づいて要求された操作を許可または拒否します。

この項には、次の項目が含まれます。

- WHERE句での数値ラベル・タグの使用

- ラベル付きデータ行の順序付け

- ラベルの文字表現による順序付け

- ラベルの上限と下限の決定

- MERGE_LABELファンクションを使用したラベルのマージ

関連項目:
数値ラベル・タグに基づくデータのパーティション化

5.4.1 WHERE句での数値ラベル・タグの使用

この項では、SELECT文のWHERE句に数値ラベル・タグを使用する技法について説明します。

ラベルをNUMBER形式で使用すると、管理者はラベル・タグのリストで様々なレベルが区別されるようにラベルを設定できます。このような数値ラベル・タグの比較を、ORDER BY処理や論理演算子とともに使用できます。

たとえば、管理者がすべてのUNCLASSIFIEDラベルを1000番台、すべてのSENSITIVEラベルを2000番台、すべてのHIGHLY_SENSITIVEラベルを3000番台に割り当てている場合は、次のように入力するとすべてのSENSITIVEレコードをリスト表示できます。

SELECT * FROM emp
WHERE hr_label BETWEEN 2000 AND 2999;

すべてのSENSITIVEレコードとUNCLASSIFIEDレコードをリスト表示するには、次のように入力します。

SELECT * FROM emp
WHERE hr_label <3000;

すべてのHIGHLY_SENSITIVEレコードをリスト表示するには、次のように入力します。

SELECT * FROM emp
WHERE hr_label=3000;

注意:
このような問合せが意味を持つのは、管理者が、最初にラベルに割り当てたラベル・タグに、数値による順序付け方法を適用している場合のみであることに注意してください。この方法により、管理者はデータを簡単に送信できます。ただし、ラベル・タグの値が自動的に生成されると、タグの値とラベルの順序に本質的な関係は存在しません。

または、支配関係を使用して順序付け方法を設定することもできます。

関連項目:
支配ファンクションの使用

5.4.2 ラベル付きデータ行の順序付け

ポリシーのラベル列を参照してORDER BY句を実行すると、管理者が設定した数値ラベル・タグの値で行を順序付けできます。次に例を示します。

SELECT * from emp
ORDER BY hr_label;

この文にはファンクションは不要であることに注意してください。この文は、管理者が設定したラベル・タグを使用できるようにします。

注意:
この場合も、このような問合せが意味を持つのは、管理者が、最初にラベルに割り当てたラベル・タグに、数値による順序付け方法を適用している場合のみです。

5.4.3 ラベルの文字表現による順序付け

LABEL_TO_CHARファンクションを使用すると、ラベルの文字表現でデータ行を順序付けできます。たとえば、次の文では、ラベルのテキスト順にソートされたすべての行が戻されます。

SELECT * FROM emp
ORDER BY label_to_char (hr_label);

5.4.4 ラベルの上限と下限の決定

この項では、複数のラベルの最小の上限または最大の下限を決定するOracle Label Securityのファンクションについて説明します。2つの単一行ファンクションは、問合せから戻される各行を操作します。結果は行ごとに1つずつ戻されます。

- LEAST_UBOUNDを使用した最小の上限の検索

- GREATEST_LBOUNDを使用した最大の下限の検索

注意:
複数のラベルを取るすべてのファンクションでは、ラベルはすべて同じポリシーに属している必要があります。

5.4.4.1 LEAST_UBOUNDを使用した最小の上限の検索

LEAST_UBOUND(LUBD)ファンクションは、label1およびlabel2の最小の上限である文字列ラベル、つまり、この2つを支配している単一のラベルを戻します。最小の上限は、最上位レベル、ラベル内の区分の共用部分およびラベル内のグループの共用部分です。たとえば、HIGHLY_SENSITIVE:ALPHAおよびSENSITIVE:BETAの最小の上限は、HIGHLY_SENSITIVE:ALPHA,BETAです。

構文:

FUNCTION LEAST_UBOUND (
label1                    IN NUMBER,
label2                    IN NUMBER)
RETURN VARCHAR2;

LEAST_UBOUNDファンクションが役立つのは、異なるラベルを持つ行を結合する場合です。これは、結合された行の最高水位標ラベルを提供するためです。

次の問合せでは、各従業員のラベルを所属部署のラベルと比較し、EMP表にあるかDEPT表にあるかに関係なく上位のラベルを戻します。

SELECT ename,dept.deptno,
LEAST_UBOUND(emp.hr_label,dept.hr_label) as label
FROM emp, dept
WHERE emp.deptno=dept.deptno;

この問合せでは次のデータが戻されます。

表5-4 サンプルSQL文LEAST_UBOUNDから戻されたデータ

ENAME

DEPTNO

LABEL

KING

10

L3:M:D10

BLAKE

30

L3:M:D30

CLARK

10

L3:M:D10

JONES

20

L3:M:D20

MARTIN

30

L2:E:D30

5.4.4.2 GREATEST_LBOUNDを使用した最大の下限の検索

GREATEST_LBOUND(GLBD)ファンクションを使用すると、2つの異なるラベルがある場合、操作に関連付けることができるデータの最下位ラベルを決定できます。このファンクションは、label1およびlabel2の最大の下限である文字列ラベルを戻します。最大の下限は、最下位レベルであり、ラベルの区分とラベルのグループの共通部分です。たとえば、HIGHLY_SENSITIVE:ALPHAおよびSENSITIVEの最大の下限はSENSITIVEです。

構文:

FUNCTION GREATEST_LBOUND (
label1                  IN NUMBER,
label2                  IN NUMBER)
RETURN VARCHAR2;

5.4.5 MERGE_LABELファンクションを使用したラベルのマージ

MERGE_LABELファンクションは、2つのラベルをマージするためのユーティリティです。このファンクションは、2つのラベルの文字列書式と、マージ形式の3文字の指定を受け入れます。構文は次のとおりです。

構文:

FUNCTION merge_label (label1 IN number,
label2 IN number,
merge_format IN VARCHAR2)
RETURN number;

有効なマージ形式を次のように3文字の文字列で指定します。

<highest level or lowest level><union or intersection of compartments><union or intersection of groups>

- 1文字目には、2つのラベルの最上位レベルと最下位レベルのうち、どちらを使用してマージするかを示します。

- 2文字目には、2つのラベルにある区分の共用部分と共通部分のうち、どちらを使用してマージするかを示します。

- 3文字目には、2つのラベルにあるグループの共用部分と共通部分のうち、どちらを使用してマージするかを示します。

次の表に、MERGE_LABELのフォーマット定数の定義を示します。

表5-5 MERGE_LABELのフォーマット定数

フォーマット指定

データ型

定数

意味

フォーマットの使用位置

max_lvl_fmt

CONSTANT varchar2(1)

H

最大レベル。

第1(レベル)

min_lvl_fmt

CONSTANT varchar2(1)

L

最小レベル。

第1(レベル)

union_fmt

CONSTANT varchar2(1)

U

2つのラベルの共用部分。

第2(区分)および第3(グループ)

inter_fmt

CONSTANT varchar2(1)

I

2つのラベルの共通部分。

第2(区分)および第3(グループ)

minus_fmt

CONSTANT varchar2(1)

M

第1のラベルから第2のラベルを削除します。

第2(区分)および第3(グループ)

null_fmt

CONSTANT varchar2(1)

N

区分列に指定すると、区分は戻されません。グループ列に指定すると、グループは戻されません。

第2(区分)および第3(グループ)

たとえば、HUIの場合は、2つのラベルの最上位レベル、区分の共用部分、グループの共通部分を指定したことになります。

MERGE_LABELファンクションが特に役立つのは、開発者がLEAST_UBOUNDファンクションで意図した結果が得られない場合です。LEAST_UBOUNDファンクションをグループを含む2つのラベルに使用すると、予期したよりも機密性の低いデータ・ラベルが得られる場合があります。MERGE_LABELファンクションを使用すると、LEAST_UBOUNDファンクションで得られるグループの共用部分のかわりに、グループの共通部分を計算できます。

たとえば、グループUNITED_STATESを含むデータ・レコードのラベルと、グループUNITED_KINGDOMを含む別のデータ・レコードのラベルがあり、LEAST_UBOUNDファンクションを使用してこの2つのラベルの最小の上限を計算すると、結果として得られるラベルには、UNITED_STATESまたはUNITED_KINGDOMについて認可されているユーザーがアクセスできます。

これに対して、HUIのフォーマット句とともにMERGE_LABELファンクションを使用すると、結果的に得られるラベルには最上位レベルと区分の共用部分は含まれますが、グループは含まれません。これは、UNITED_STATESとUNITED_KINGDOMには共通部分がないためです。

5.5 ラベル付きデータの挿入

Oracle Label Securityでポリシーにより保護されている表にデータを挿入する場合は、通常、INSERT文内で数値のラベル値タグを指定する必要があります。

そのためには、必要なラベルのタグを明示的に指定するか、ラベルの文字列表現を適切なタグに明示的に変換する必要があります。これは新規ラベル・タグの生成を意味するのではなく、適切なラベル・タグの参照を意味することに注意してください。Oracle Label SecurityでOracle Internet Directoryを使用している場合、許可されるラベル(および対応するタグ)は、管理者により事前定義済でOracle Internet Directoryに存在するラベルのみです。

INSERT文でラベル値を省略できるのは、次のいずれかの場合のみです。

1. ポリシーの適用時にLABEL_DEFAULT施行オプションが指定されている場合

2. ポリシーの適用時に施行オプションが指定されておらず、ポリシーの作成時にLABEL_DEFAULTが指定されている場合

3. ポリシー適用分でラベル付けファンクションが指定されている場合

1および2の場合は、ユーザーのセッションのデフォルト行ラベルが、挿入される行のラベルとして使用されます。3の場合、挿入される行のラベルは、そのラベル付けファンクションにより作成されます。

関連項目:

- SA_POLICY_ADMIN.APPLY_TABLE_POLICYを使用したポリシーの適用

- 「SA_SYSDBA.CREATE_POLICYを使用したポリシーの作成」

- 「ラベル付けファンクションの使用」

- ポリシー施行オプションおよびラベル付きデータ(およびラベル)の読取りと書込みについては、第9章「ポリシー施行オプションとラベル付けファンクションの実装」全体を参照してください。

この項では、INSERT文でラベルを指定する様々な方法について説明します。

- CHAR_TO_LABELを使用したラベルの挿入

- 数値のラベル・タグ値を使用したラベルの挿入

- ラベルを指定しないデータの挿入

- ポリシーのラベル列が非表示になっている場合のデータの挿入

- TO_DATA_LABELを使用したラベルの挿入

5.5.1 CHAR_TO_LABELを使用したラベルの挿入

行ラベルを挿入するには、ラベル文字列を指定してから、CHAR_TO_LABELファンクションを使用してラベルに変換できます。次の例に、表empの定義を使用して、明示的なラベルでデータを挿入する方法を示します。

INSERT INTO emp (ename,empno,hr_label)
VALUES ('ESTANTON',10,char_to_label ('HR', 'SENSITIVE'));

5.5.2 数値のラベル・タグ値を使用したラベルの挿入

CHAR_TO_LABELファンクションを使用するのではなく、ラベルの数値ラベル・タグ値を使用して、データを挿入できます。たとえば、SENSITIVEの数値ラベル・タグが3000の場合は、次のようになります。

INSERT INTO emp (ename, empno, hr_label)
VALUES ('ESTANTON', 10, 3000);

5.5.3 ラベルを指定しないデータの挿入

LABEL_DEFAULTが設定されている場合、または表に適用されているラベル付けファンクションがある場合は、INSERT文でラベルを指定する必要はありません。ラベルは自動的に提供されます。次のコマンドを入力できます。

INSERT INTO emp (ename, empno)
VALUES ('ESTANTON', 10);

結果として得られる行ラベルは、デフォルト値に従って(またはラベル付けファンクションにより)設定されます。

関連項目:

- ポリシー施行オプションの概要

- ラベル管理施行オプション

- 「ラベル付けファンクションの使用」

- SA_POLICY_ADMIN.APPLY_TABLE_POLICYを使用したポリシーの適用

- SA_SYSDBA.CREATE_POLICYを使用したポリシーの作成

5.5.4 ポリシーのラベル列が非表示になっている場合のデータの挿入

ラベル列が非表示の場合、その列の存在はデータの挿入に対して透過的です。表の列を明示的にリスト表示せず、ラベル列の値を含めないINSERT文を記述できます。データのラベル付けには、セッションの行ラベルまたはラベル付けファンクション(表またはスキーマに対するポリシーの適用時に指定した場合)が使用されます。

列名を明示的に指定しなくても、表の非表示でない各列の値を指定すれば、表に挿入できます。次の例では、「例2: 数値列データ型と非表示列」で説明した表に1行を挿入する方法を示します。

INSERT INTO emp
VALUES ('196','ESTANTON',Technician,RSTOUT,50000,10);

ラベルは、次のいずれかになります。

- 指定したラベル

- 適用されているポリシーのLABEL_DEFAULTオプションで設定されるラベル

- 適用されているポリシーで指定されたラベル付けファンクションにより作成されるラベル

注意:
ポリシー・ラベル列が非表示でない場合は、INSERT文にラベル値(場合によっては、コンマで示されるnull)を明示的に含める必要があります。

5.5.5 TO_DATA_LABELを使用したラベルの挿入

注意:
Oracle Label SecurityがOracle Internet Directoryで動作するようにインストールされている場合、ラベルはOracle Internet Directoryでolsadmintoolコマンドを使用して集中管理されるため、動的ラベル生成は許可されません。付録B「Oracle Internet Directoryを使用したLabel Security用コマンドライン・ツール」を参照してください。
したがって、Oracle Label SecurityがOracle Internet Directory対応の場合、このTO_DATA_LABELファンクションは使用できず、使用するとエラー・メッセージが生成されます。

データの挿入時に新規ラベルを動的に生成する場合は、TO_DATA_LABELファンクションを使用して、有効なデータ・ラベルが生成されるように保証できます。そのためには、TO_DATA_LABELファンクションに対するEXECUTE認可が必要です。

CHAR_TO_LABELファンクションでは、トランザクションが成功するためにはラベルがすでに存在するデータ・ラベルである必要がありますが、TO_DATA_LABELにはこの要件がありません。有効なデータ・ラベルが自動的に作成されます。

次に例を示します。

INSERT INTO emp (ename, empno, hr_label)
VALUES ('ESTANTON', 10, to_data_label ('HR', 'SENSITIVE'));

注意:
TO_DATA_LABELファンクションを使用するには、個別に明示的に付与する必要があります。また、その使用は厳密に制御する必要があります。

関連項目:
ラベル付きデータの挿入、更新および削除の詳細は、第10章「表およびスキーマへのポリシーの適用」を参照してください。

5.6 SA_SESSIONを使用したセッション・ラベルと行ラベルの変更

特定のセッション中に、ユーザーは管理者により設定された認可の範囲内で各自のラベルを変更できます。

この項には、次の項目が含まれます。

- セッション・ラベルと行ラベルを変更するSA_SESSIONファンクション

- SA_SESSION.SET_LABELを使用したセッション・ラベルの変更

- SA_SESSION.SET_ROW_LABELを使用した行ラベルの変更

- SA_SESSION.RESTORE_DEFAULT_LABELSを使用したラベルのデフォルトのリストア

- SA_SESSION.SAVE_DEFAULT_LABELSを使用したラベルのデフォルトの保存

- SA_SESSIONファンクションを使用したセッション属性の表示

5.6.1 セッション・ラベルと行ラベルを変更するSA_SESSIONファンクション

次のファンクションを使用すると、ユーザーはセッション・ラベルと行ラベルを変更できます。

表5-6 セッション・ラベルを変更するファンクション

ファンクション

用途

SA_SESSION.SET_LABEL

ユーザーは、読取りアクセス権を持つ新規レベル、新規区分およびグループを設定できます。

SA_SESSION.SET_ROW_LABEL

ユーザーは新規の行に適用するデフォルトの行ラベルを設定できます。

SA_SESSION.RESTORE_DEFAULT_LABELS

ユーザーは、現行のセッション・ラベルと行ラベルを、格納されているデフォルト設定にリセットできます。

SA_SESSION.SAVE_DEFAULT_LABELS

ユーザーは、現行のセッション・ラベルと行ラベルを将来のセッションのデフォルトとして格納できます。

5.6.2 SA_SESSION.SET_LABELを使用したセッション・ラベルの変更

SET_LABELプロシージャを使用すると、現行のデータベース・セッションのラベルを設定できます。

構文:

PROCEDURE SET_LABEL (policy_name IN VARCHAR2,
label IN VARCHAR2);

パラメータ

指定

policy_name

既存のポリシーの名前

label

ラベルとして設定する値

ユーザーは、セッション・ラベルを次のように設定できます。

- 最大レベル以下で、かつ最小レベル以上のレベルに設定する。

- 認可された区分リストにある区分を含むように設定する。

- 認可されたグループ・リストにあるグループを含むように設定する。(認可グループのサブグループは、認可リストに暗黙的に含まれます。)

セッション・ラベルを変更すると、そのセッションの行ラベルの値に影響する場合があることに注意してください。セッションの行ラベルには、ユーザーが書込みアクセス権を持っている区分とグループのサブセットが含まれています。これは、セッション・ラベルと等価の場合と、等価でない場合があります。たとえば、SA_SESSION.SET_LABELコマンドを使用して現行セッション・ラベルをC:A,B:USに設定した場合に、A区分に対する書込みアクセス権しか持っていなければ、行ラベルはC:Aに設定されます。

関連項目:
SA_USER_ADMIN.SET_DEFAULT_LABEL

5.6.3 SA_SESSION.SET_ROW_LABELを使用した行ラベルの変更

SET_ROW_LABELプロシージャを使用すると、現行データベース・セッションのデフォルトの行ラベル値を設定できます。ラベルの区分とグループは、ユーザーが書込みアクセス権を持つセッション・ラベルの区分およびグループのサブセットであることが必要です。LABEL_DEFAULTオプションが設定されている場合は、ユーザーがラベルを明示的に指定しなければ、この行ラベル値が挿入時に使用されます。

構文:

PROCEDURE SET_ROW_LABEL (policy_name IN VARCHAR2,
row_label IN VARCHAR2);

パラメータ

指定

policy_name

既存のポリシーの名前

label

デフォルトの行ラベルとして設定する値

SA_SESSION.SET_ROW_LABELプロシージャを使用してデフォルトの行ラベル値を設定しない場合、この値はセッション・ラベルから自動的に導出されます。これには、セッション・ラベルのレベルと、ユーザーが書込みアクセス認可を持つセッション・ラベルの区分とグループのサブセットが含まれています。

セッション・ラベルに変更があると、行ラベルは自動的にリセットされます。たとえば、セッション・レベルをHIGHLY_SENSITIVEからSENSITIVEに変更すると、行ラベルのレベル・コンポーネントは自動的にSENSITIVEに変更されます。

ユーザーは、独自に行ラベルを設定できますが、含めることができるのは次の要素のみです。

- セッション・ラベルのレベル以下で、かつ、ユーザーの最小レベル以上のレベル。

- ユーザーが書込みアクセス権を持つように認可されているセッション・ラベルからの、区分とグループのサブセット。

ユーザーが行ラベルに無効な値の設定を試みると、操作は許可されず、その行ラベル値は変更されません。

関連項目:
SA_USER_ADMIN.SET_ROW_LABEL

5.6.4 SA_SESSION.RESTORE_DEFAULT_LABELSを使用したラベルのデフォルトのリストア

RESTORE_DEFAULT_LABELSプロシージャは、セッション・ラベルと行ラベルを、データ・ディクショナリに格納されているそれらのラベルでリストアします。このコマンドが役立つのは、SA_SESSION.SET_LABELコマンドが処理された後に値をリセットする場合です。

構文:

PROCEDURE RESTORE_DEFAULT_LABELS (policy_name in VARCHAR2);

policy_nameでは既存のポリシーの名前を指定します。

5.6.5 SA_SESSION.SAVE_DEFAULT_LABELSを使用したラベルのデフォルトの保存

SAVE_DEFAULT_LABELSプロシージャでは、現行のセッション・ラベルと行ラベルが、初期セッション・ラベルおよびデフォルトの行ラベルとして格納されます。また、現行のセッション・ラベルと行ラベルを反映するようにデフォルトを変更できます。保存されたラベルは、将来のセッションの初期デフォルト設定として使用されます。

構文:

PROCEDURE SAVE_DEFAULT_LABELS (policy_name in VARCHAR2);

policy_nameでは既存のポリシーの名前を指定します。

データベースへのログイン時には、デフォルトのセッション・ラベルと行ラベルを使用して、セッション・ラベルと行ラベルが初期化されます。管理者は最初にユーザーのOracle Label Securityのラベルを認可するときに、ユーザーのデフォルト・レベル、デフォルト区分およびデフォルト・グループも定義しています。セッション・ラベルと行ラベルを変更し、その値をデフォルト・ラベルとして保存する必要がある場合は、SA_SESSION.SAVE_DEFAULT_LABELSプロシージャを使用できます。

このプロシージャが役立つのは、複数のセッションがあり、すべての追加セッションに同じラベルが使用されるようにする必要がある場合です。現行ラベルをデフォルトとして保存し、将来のすべてのセッションに初期ラベルとして使用できます。

Oracle Formsを通じてデータベースに接続し、レポートを実行する必要がある場合を考えます。Oracle Reportsをコールする前に現行セッション・ラベルをデフォルトとして保存すると、Oracle ReportsではOracle Formsで使用中のものと確実に同じラベルで初期化されます。

注意:
SA_SESSION.SAVE_DEFAULT_LABELSプロシージャにより、管理者が設定した設定がオーバーライドされます。

5.6.6 SA_SESSIONファンクションを使用したセッション属性の表示

SA_SESSIONファンクションを使用すると、セッションのポリシー属性を表示できます。

- すべてのセキュリティ属性を戻すUSER_SA_SESSIONビュー

- 個々のセキュリティ属性を戻すファンクション

5.6.6.1 すべてのセキュリティ属性を戻すUSER_SA_SESSIONビュー

USER_SA_SESSIONビューを使用すると、セキュリティ属性の値を表示できます。このビューへのアクセスはPUBLICです。このため、現行セッションのセキュリティ属性を表示できます。次に例を示します。

表5-7 セキュリティ属性の名前と型

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

SA_USER_NAME

VARCHAR2(4000)

PRIVS

VARCHAR2(4000)

MAX_READ_LABEL

VARCHAR2(4000)

MAX_WRITE_LABEL

VARCHAR2(4000)

MIN_LEVEL

VARCHAR2(4000)

LABEL

VARCHAR2(4000)

COMP_WRITE

VARCHAR2(4000)

GROUP_WRITE

VARCHAR2(4000)

ROW_LABEL

VARCHAR2(4000)

5.6.6.2 個々のセキュリティ属性を戻すファンクション

SA_SESSIONファンクションは、唯一の入力パラメータとしてpolicy_nameを取ります。SQL文で使用できるように、VARCHAR2型の文字列値を戻します。

表5-8 セキュリティ属性を表示するSA_SESSIONファンクション

ファンクション

用途

SA_SESSION.PRIVS

現行セッションの権限セットをカンマ区切りのリスト形式で戻します。

SA_SESSION.MIN_LEVEL

セッションについて認可された最小レベルを戻します。

SA_SESSION.MAX_LEVEL

セッションについて認可された最大レベルを戻します。

SA_SESSION.COMP_READ

ユーザーが読取りを認可されている区分のカンマ区切りのリストを戻します。

SA_SESSION.COMP_WRITE

ユーザーが書込みを認可されている区分のカンマ区切りのリストを戻します。これはSA_SESSION.COMP_READのサブセットです。

SA_SESSION.GROUP_READ

ユーザーが読取りを認可されているグループのカンマ区切りのリストを戻します。

SA_SESSION.GROUP_WRITE

ユーザーが書込みを認可されているグループのカンマ区切りのリストを戻します。これはSA_SESSION.GROUP_READのサブセットです。

SA_SESSION.LABEL

ユーザーが現在作業中のセッション・ラベル(レベル、区分およびグループ)を戻します。ユーザーはSA_SESSION.SET_LABELを使用して、この値を変更できます。「SA_SESSION.SET_LABELを使用したセッション・ラベルの変更」を参照してください。

SA_SESSION.ROW_LABEL

セッションのデフォルトの行ラベル値を戻します。ユーザーはSA_SESSION.SET_ROW_LABELを使用して、この値を変更できます。「SA_SESSION.SET_ROW_LABELを使用した行ラベルの変更」を参照してください。

SA_SESSION.SA_USER_NAME

現行のOracle Label Securityセッションに対応付けられたユーザー名を戻します。

たとえば、次の文では、Human Resourcesポリシーの現行セッション・ラベルが表示されます。

SQL> select sa_session.label ('human_resources')
2  from dual;

SA_SESSION.LABEL('HUMAN_RESOURCES')
---------------------------------------------
L3:M,E

関連項目:
数値ラベル・タグとブール値を戻す他のファンクションは、「SA_UTLファンクションを使用したラベル情報の設定と戻し」を参照してください。

6 Oracle Label SecurityとOracle Internet Directoryとの併用

Oracle Label Securityメタデータを一元的なLDAPリポジトリで管理するメリットは数多くあります。ポリシーおよびユーザー・ラベルの認可は企業内で容易にプロビジョニングおよび配布が可能です。また、従業員が退職した場合は、そのラベル認可を1箇所で取り消すと、変更結果が全社に自動的に伝播します。この章では、Oracle Label SecurityとOracle Internet Directoryの統合について説明します。この章の内容は、次のとおりです。

- Oracle Internet Directoryでのラベル管理の概要

- Oracle Internet Directory対応Label Securityの構成

- Oracle Label Securityプロファイル

- Label Securityでディレクトリを使用する場合に統合される機能

- Oracle Internet Directory内のOracle Label Securityポリシー属性

- 新規データ・ラベル作成の制限

- 2つの管理者タイプ

- データベースのブートストラップ

- データベースとOracle Internet Directoryの同期化

- セキュリティ・ロールと許可されるアクション

- 置き換えられるPL/SQL文

- ポリシー管理者専用プロシージャ

6.1 Oracle Internet Directoryでのラベル管理の概要

以前のリリースのOracle Label Securityは、ポリシーおよびユーザー・ラベルの認可の集中リポジトリとしてOracle Databaseに依存していました。このアーキテクチャでは、Oracle Databaseのスケーラビリティと高可用性が活用されていましたが、Oracle Internet Directoryを含む識別情報管理インフラストラクチャは活用されていませんでした。このディレクトリはOracle Identity Managementプラットフォームの一部です。Oracle Label SecurityのインストールをOracle Internet Directoryと統合することで、ラベル認可を標準的なプロビジョニング・プロセスの一部にできます。

これらの利点は、Oracle Label Securityがユーザーに割り当てるポリシー、ユーザー・ラベルおよび権限について、ディレクトリに格納された情報にも適用されます。これらのラベルと権限は、表とスキーマのアクセス制御を定義するインストールのポリシーに固有です。サイトでOracle Internet Directoryを使用していない場合、この種の情報はデータベースにローカルに格納されます。

ディレクトリには、次のOracle Label Security情報が格納されます。

- ポリシー情報(ポリシー名、列名、ポリシー施行オプションおよび監査オプション)

- ラベルと権限を識別するユーザー・プロファイル

- ポリシー・ラベル・コンポーネント: レベル、区分、グループ

- ポリシー・データ・ラベル

データベース固有のメタデータは、ディレクトリに格納されません。次に例を示します。

- ポリシー情報が関連付けられているスキーマまたは表のリスト

- ポリシー権限が関連付けられているプログラム・ユニット

次の3つの「注意」は、Oracle Label SecurityのインストールをOracle Internet Directoryと統合する場合の重要な側面を示しています。

注意:
Oracle Label Securityのデータベース・アーキテクチャとディレクトリベース・アーキテクチャは引き続きサポートされます。ただし、単一のデータベース環境で両方のアーキテクチャを管理することはできません。管理者は、LDAP集中管理モデルを使用するか、データベース中心型のモデルを使用するかを決定する必要があります。

注意:
Oracle Label Securityポリシーをディレクトリ内で直接管理するには、新しいコマンドライン・ツールであるOracle Label Security管理ツール(olsadmintool)を使用します。詳細は、付録B「Oracle Internet Directoryを使用したLabel Security用コマンドライン・ツール」を参照してください。
このリリースから、Oracle Label Securityの管理に、Oracle Enterprise Manager Database Controlで提供されるグラフィカル・ユーザー・インタフェースも使用できるようになりました。詳細は、Oracle Enterprise Managerのヘルプを参照してください。

Oracle Internet Directoryを使用するサイトの場合、データベースはOracle Label Securityポリシー情報をディレクトリから取得します。管理者はolsadmintoolポリシー管理ツールまたはEnterprise Managerのグラフィカル・ユーザー・インタフェースを使用してディレクトリ上で直接操作し、必要に応じてメタデータを挿入、変更または削除します。エンタープライズ・ユーザーはOracle Internet Directoryに格納されている資格証明を使用して複数のデータベースにログインできるため、Oracle Label Securityポリシーの認可と権限もOracle Internet Directoryに格納するのが論理的です。これにより、管理者はこれらのメタデータをディレクトリ内で更新することで認可と権限を変更できます。

分散データベースでは、ポリシーの集中管理により、適切なポリシー情報をディレクトリ内で入手できるため、ポリシーを複製する必要がなくなります。変更はそのまま有効になり、Oracle Directory Integration Platformを使用してデータベース内のポリシー情報と同期化されます。

関連項目:
Oracle Directory Integration Platformを使用した同期化については、『Oracle Internet Directory管理者ガイド』を参照してください。

図6-1「Oracle Internet DirectoryのOracle Label Securityメタデータ記憶域」に、Oracle Internet Directoryのメタデータ記憶域の構造を示します。

図6-2「Oracle Internet Directoryを介して適用されるOracle Label Securityのポリシー」に、様々なエンタープライズ・ユーザーがアクセスするデータベースに対して、Oracle Internet Directoryに格納されている異なるポリシーを適用する状況を示します。適用されるポリシーの決定は、ユーザーおよびアクセス先データベースに対応するディレクトリ・エントリにより制御されます。

図6-1 Oracle Internet DirectoryのOracle Label Securityメタデータ記憶域

図6-2 Oracle Internet Directoryを介して適用されるOracle Label Securityのポリシー

この例では、ディレクトリには2つのOracle Label Securityポリシー(データベースDB1に適用されるAlphaとデータベースDB2に適用されるBeta)に関する情報が含まれます。どちらのポリシーも各データベースで既知ですが、適切な一方のみが各ケースに適用されます。また、Oracle Label Securityによって保護されている行にアクセスするエンタープライズ・ユーザーは、Oracle Internet DirectoryのOracle Label Security属性内のプロファイルにリストされます。

図6-2「Oracle Internet Directoryを介して適用されるOracle Label Securityのポリシー」のように、様々なデータベースとディレクトリ間の接続は、SSLまたはSASLを介して確立されます。データベースは、パスワードベース認証を使用し、既知の識別情報として常にディレクトリにバインドします。データベースとクライアント(SQL*Plusセッション、任意のPL/SQLプログラムなど)間のリンクには、SSL接続または非SSL接続を使用できます。図6-2「Oracle Internet Directoryを介して適用されるOracle Label Securityのポリシー」の例は、ユーザーがパスワード認証を介してログオンする場合を想定しています。どの接続タイプを選択するかは、エンタープライズ・ユーザー・モデルによって異なります。

Oracle Label Securityのポリシー管理ツールは、Oracle Internet Directory内のメタデータに対して直接動作します。ディレクトリ内の変更は、特定の間隔でデータベースに変更を送信するよう構成されているOracle Directory Integration and Provisioningサーバーに伝播します。

データベースは、表またはスキーマにポリシーが適用されている場合にのみ、Oracle Internet Directory内でポリシー情報を更新します。この更新により、使用中のポリシーがディレクトリから削除されないことが保証されます。

関連項目:

- エンタープライズ・ドメイン、ユーザー・モデルおよび認証アクティビティの詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』を参照してください。

- Oracle Internet Directoryの詳細は、『Oracle Internet Directory管理者ガイド』を参照してください。

6.2 Oracle Internet Directory対応Label Securityの構成

データベースの作成後、またはカスタム・データベースの作成中は、いつでもデータベースをOracle Internet Directory対応Label Security用に構成できます。Oracle Internet Directory対応のLabel Securityは、Entrerprise User Security機能に依存します。

関連項目:

- ディレクトリを使用するためのデータベースの構成の前提条件および手順は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』の「エンタープライズ・ユーザー・セキュリティの構成タスクとトラブルシューティング」を参照。

- DBCA、Database Configuration Assistantの詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』のDatabase Configuration Assistantを参照。

6.2.1 OID対応Oracle Label Securityを構成するための権限の付与

Database Configuration Assistant(DBCA)を使用してOracle Internet Directory対応のOracle Label Securityを実行するユーザーには、追加の権限が必要です。次の手順では、必要な権限と付与方法について説明します。

- Enterprise Managerを使用して、ユーザーをOracleDBCreatorsグループに追加します。

関連項目:
管理グループへのユーザーの追加の詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』のアイデンティティ管理レルム管理者の管理を参照

- ユーザーをProvisioning Adminsグループに追加します。この手順が必要なのは、DBCAによりOracle Label Security用のDIPプロビジョニング・プロファイルが作成されるためです。次の.ldifファイルとともにldapmodifyコマンドを使用し、ユーザーをProvisioning Adminsグループに追加します。

dn: cn=Provisioning Admins,cn=changelog subscriber, cn=oracle internet directory
changetype: modify
add: uniquemember
uniquemember: DN of the user who is to be added

- olsadmintoolコマンドライン・ツールを使用してユーザーをpolicyCreatorsグループに追加します。DBCAにより、Oracle Internet DirectoryからのOracle Label Securityポリシー情報を使用してデータベースがブートストラップされます。このブートストラップを実行できるのはpolicyCreatorsのみです。

- すでにDBCAを使用してデータベースがOracle Internet Directoryに登録されている場合は、Enterprise Managerを使用して、ユーザーをそのデータベースのOracleDBAdminsグループに追加します。

Oracle Internet Directory対応のOracle Label Security構成があるデータベースの登録を解除する管理者も、前述の権限を必要とすることに注意してください。

6.2.2 データベースの登録とOracle Internet Directory対応Oracle Label Securityの構成

この操作の主要タスクは次のとおりです。

6.2.2.1 タスク1: ディレクトリを使用するためのOracleホームの構成

関連項目:
『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』のディレクトリを使用するためのデータベースの構成

6.2.2.2 タスク2: OID対応Oracle Label Security用のデータベースの構成

1. DBCA(Database Configuration Assistant)を使用して、データベースをディレクトリに登録します。

関連項目:
『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』のディレクトリへのデータベースの登録に関する説明

2. データベースをディレクトリに登録した後、Label Securityを構成します。

1. DBCAを起動し、「データベース内のデータベース・オプションの構成」→「次へ」の順に選択します。

2. データベースを選択し、「次へ」をクリックします。

3. データベースの登録を解除するかどうかを確認するオプションで、「いいえ、データベースの登録を保持します。」を選択します。

4. データベースがOracle Internet Directoryに登録済の場合は、「データベース・オプション」画面で「Label Security」チェック・ボックスの横に「カスタマイズ」ボタンが表示されます。「Label Security」オプションを選択して「カスタマイズ」をクリックします。

5. この「カスタマイズ」ダイアログには、スタンドアロンOracle Label Security用とOracle Internet Directory対応Oracle Label Security用に1つずつ、2つの構成オプションが表示されます。OID対応Label Security構成をクリックし、該当する管理者のOracle Internet Directory資格証明を入力します。「OK」をクリックします。

6. 残りのDBCA手順を続行し、「終了」が表示された時点でクリックします。

注意:
Oracle Internet Directoryに登録済のデータベース上でスタンドアロンOracle Label Securityを構成できます。手順eでスタンドアロン・オプションを選択します。

Oracle Internet Directory対応Oracle Label Security用に構成する場合、DBCAではデータベース登録に加えて次の操作も実行されます。

1. Label Securityポリシーの変更をデータベースに伝播するためのプロビジョニング・プロファイルが作成されます。このDirectory Integration Platform(DIP)プロビジョニング・プロファイルは、デフォルトで有効化されます。

2. Oracle Internet Directory対応Oracle Label Securityのデータベース側に必要なパッケージがインストールされます。

3. Oracle Internet Directory内の既存のLabel Securityポリシー情報をすべて使用して、データベースがブートストラップされます。

関連項目:
詳細は、「データベースのブートストラップ」を参照してください。

6.2.2.3 タスク2: OID対応OLS用のデータベースの構成の代替方式

DBCAを1回起動して、データベースの登録とOracle Label Securityの構成を実行できます。

1. DBCAを起動します。

2. 「データベース内のデータベース・オプションの構成」を選択して「次へ」をクリックします。

3. データベースを選択し、「次へ」をクリックします。

4. 「データベースを登録する」をクリックします。

5. 該当する管理者のOracle Internet Directory資格証明と、作成されるデータベースWallet用の対応するパスワードを入力します。

6. 「データベース・オプション」画面で、「Label Security」チェック・ボックスの横に「カスタマイズ」ボタンが表示されます。「Label Security」オプションを選択して「カスタマイズ」をクリックします。
この「カスタマイズ」ダイアログ・ボックスが表示され、スタンドアロンOracle Label Security用とOracle Internet Directory対応Oracle Label Security用に1つずつ、2つの構成オプションが表示されます。

7. OID対応Label Security構成をクリックします。

8. 残りのDBCA手順を続行し、「終了」をクリックします。

6.2.2.4 タスク3: DIPパスワードと接続データの設定

1. コマンドライン・ツールoidprovtoolを使用してDIPユーザーのパスワードを設定し、そのデータベース用のDIPプロビジョニング・プロファイル内のインタフェース接続情報を新規パスワードで更新します。

関連項目
詳細は、「Oracle Directory Integration and Provisioning(DIP)プロビジョニング・プロファイル」を参照してください。

2. 作成時に、DIPプロファイルはデフォルトで3600秒のスケジュール値を使用します。これは、Oracle Label Securityの変更が1時間ごとにデータベースに伝播されることを意味します。oidprovtoolを使用して、デプロイメントの考慮事項で要求されている場合にこの値を変更できます。

データベースがOracle Internet Directory対応Oracle Label Security用に構成された後、Enterprise User Securityに関する考慮事項がさらに適用される場合があります。

関連項目:
概念、ツール、手順およびプロシージャの詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』を参照してください。

6.2.3 Oracle Internet Directory対応OLSでのデータベースの登録解除

このタスクは、DBCAを使用して次の手順で実行します。

1. Oracle Label Security用に作成されたデータベースのDIPプロビジョニング・プロファイルを削除します。

2. スタンドアロンOracle Label Security用の必須パッケージをインストールします。これにより、登録解除の終了時にOracle Internet Directory対応Oracle Label SecurityがスタンドアロンOracle Label Securityになります。

注意:
DBの登録解除に関する特殊指示は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』を参照してください。Oracle Internet Directory対応Oracle Label Securityの構成時には、特別な手順は不要です。

注意:
データベースにスタンドアロンOracle Label Securityがある場合は、Oracle Internet Directory対応Oracle Label Securityに変換できません。データベースからOracle Label Securityを削除した後に、再びDBCAを使用してOracle Internet Directory対応Oracle Label Securityを構成する必要があります。

6.3 データベースからのOracle Internet Directory対応Oracle Label Securityの削除

データベースからOracle Internet Directory対応Oracle Label Securityを削除するには、最初にDBCAを使用してデータベースの登録を解除してから、次のスクリプトを実行します。

$ORACLE_HOME/rdbms/admin/catnools.sql

6.4 Oracle Label Securityプロファイル

ユーザー・プロファイルとは、ユーザーの認証と権限のセットです。プロファイルは、ディレクトリに格納された各Oracle Label Securityポリシーの一部としてメンテナンスされます。

プロファイルに追加されたユーザーには、そのポリシーに対してプロファイルに定義されている認可と権限が付与されます。これには次の属性が含まれます。

- 5つのラベル認可

- 最大読取りラベル

- 最大書込みラベル

- 最小書込みラベル

- デフォルトの読取りラベル

- デフォルトの行ラベル

- 権限

- これらの認可が適用されるエンタープライズ・ユーザーのリスト

関連項目:

- Oracle Internet Directory内のOracle Label Securityポリシー属性

- エンタープライズ・ユーザーの作成と管理の詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』のエンタープライズ・ユーザー・セキュリティ・スタート・ガイドに関する項を参照してください。

- Oracle Label Securityのプロファイルおよびポリシーの作成と管理の詳細は、Oracle Enterprise Managerのヘルプを参照してください。

エンタープライズ・ユーザーは、1つのプロファイルにのみ所属するか、またはどのプロファイルにも所属しません。

6.5 Label Securityでディレクトリを使用する場合に統合される機能

Oracle Label SecurityとOracle Internet Directoryの統合により、次の機能が使用可能になります。

- ユーザー/管理者アクション

- Oracle Internet Directoryへの複数のOracle Label Securityポリシーの格納

- ディレクトリ内のOracle Label Securityポリシーおよびオプションの管理

- ポリシーの作成または削除

- ポリシー・オプションの変更

- 監査設定の変更

- 任意のOracle Label Securityポリシーのラベル・コンポーネントの作成

- レベル、区分またはグループの作成または削除

- レベル、区分またはグループへの数値の割当て

- レベル、区分またはグループの詳細名の変更

- 子グループの作成

- 任意のOracle Label Securityポリシーのユーザーとして構成されたエンタープライズ・ユーザーの管理

- ポリシー内のプロファイルへのエンタープライズ・ユーザーの割当てまたは削除

- エンタープライズ・ユーザーへのポリシー固有の権限の割当てまたは削除

- エンタープライズ・ユーザーに割当済のポリシー・ラベル認可の変更

- Oracle Internet Directory内でOracle Label Securityポリシーを監視および管理する統合コマンドライン・ツール・セットを使用した、すべてのユーザー/管理者アクションおよび機能の管理

- Oracle Label Securityの自動結果

- データベースのポリシー使用を、ディレクトリ定義のポリシーのみに限定します(ローカル・ポリシーは定義または適用されません)。

- Oracle Label Securityを使用して、ディレクトリ内のポリシーに対する変更をデータベースと同期化(エンタープライズ・ユーザーの再接続後に適用)します。

- エンタープライズ・ユーザーがOracle Label Securityポリシー内で構成されている場合は、変更がOracle Directory Integration Platformにより伝播された後、エンタープライズ・ユーザーがOracle Label Securityを使用してデータベースにログオンする時点で、そのユーザーのOracle Label Security属性に即時にアクセスします。これらの属性には、ユーザーのラベル認可と権限が含まれています。

6.6 Oracle Internet Directory内のOracle Label Securityポリシー属性

Oracle Internet Directoryでは、Oracle関連のメタデータはcn=OracleContextの下に格納されます。Label Security内では、各ポリシーに、図6-1「Oracle Internet DirectoryのOracle Label Securityメタデータ記憶域」に示す情報とパラメータが保持されます。

Oracle Label SecurityをOracle Internet Directoryと併用せずに使用した場合、ラベル付けファンクションによってデータ・ラベルの自動作成がサポートされます。Oracle Label SecurityをOracle Internet Directoryと併用した場合、このファンクションは、ディレクトリ内に既に定義されているデータ・ラベルを使用してラベルを作成できます。

表6-1 各ポリシーの内容

エントリのタイプ

内容

意味/使用例/参照先

ポリシー名

このポリシーの作成時に割り当てられた名前

olsadmintool createpolicyのようなolsadmintoolコマンドで使用します(付録B「Oracle Internet Directoryを使用したLabel Security用コマンドライン・ツール」を参照)。

列名

このポリシー関連のラベル値を保持する列の名前

データベースに列が追加されます。関連項目: 「ポリシーのラベル列とラベル・タグ」

「ラベル付きデータの挿入」

「HIDEポリシー列オプション」

付録E「リファレンス」

次のコマンドで使用します。

olsadmintool createpolicy

施行オプション

次のエントリの任意の組合せ

LABEL_DEFAULT、LABEL_UPDATE、CHECK_CONTROL、READ_CONTROL、WRITE_CONTROL、INSERT_CONTROL、DELETE_CONTROL、UPDATE_CONTROL、ALL_CONTROLまたはNO_CONTROL

第9章「ポリシー施行オプションとラベル付けファンクションの実装」および付録E「リファレンス」の説明を参照してください。

次のコマンドで使用します。

olsadmintool createpolicy

およびolsadmintool alterpolicy

オプション

Enabled: TRUEまたはFALSE、Type: ACCESSまたはSESSION、Success: SUCCESSFUL、UNSUCCESSFULまたはBOTH

次のコマンドで使用します。

olsadmintool audit

レベル

各レベルの名前と番号

次のコマンドで使用します。olsadmintool create/alter/droplevel

区分

各区分の名前と番号

次のコマンドで使用します。olsadmintool create/alter/drop compartment

グループ

各グループの名前、番号および親

次のコマンドで使用します。olsadmintool create/alter/dropgroup

プロファイル

最大およびデフォルトの読取りラベル、最大および最小書込みラベル、デフォルトの行ラベル、ユーザー・リストおよびこのリストからの権限セット

READ、FULL、

WRITEUP、WRITEDOWN、WRITEACROSS、

PROFILE_ACCESSまたはCOMPACCESS

ポリシーには1つ以上のプロファイルを使用して、各プロファイルを多数のユーザーに割り当てることができます。プロファイルにより、ユーザーのラベル認可を個別に設定する必要性が減少します。

同じラベルおよび権限セットを持つユーザー全員が1つのプロファイルにグループ化されます。各プロファイルは、ラベル、権限およびユーザーのそれぞれのセットを表します。ポリシー内の各プロファイルは一意です。

データ・ラベル

有効な各データ・ラベルのフルネームと番号

「新規データ・ラベル作成の制限」を参照してください。

管理者

このポリシー内でパラメータの変更を認可されている各管理者の名前

ポリシー管理者は、ポリシー内のパラメータを変更できます。ポリシーまたはポリシー管理者を作成または削除する権利があるポリシー作成者を兼務する必要はありません。「セキュリティ・ロールと許可されるアクション」を参照してください。

6.7 新規データ・ラベル作成の制限

Oracle Label SecurityをOracle Internet Directoryと併用する場合は、データ・ラベルをディレクトリ内で事前定義する必要があります。

データ・ラベルは、ラベル付けファンクションで動的に作成できません。またLabel Securityがディレクトリと統合されていない場合もデータ・ラベルを作成できない可能性があります。

6.8 2つの管理者タイプ

ポリシーには、次に示すポリシー固有の管理タスクの実行を認可されている管理者がリストされます。

- 既存のポリシー・オプションと監査設定の変更

- ポリシー監査の有効化または無効化

- レベル、区分、グループまたは子グループの作成または削除

- レベル、区分またはグループのフルネームまたは詳細名の変更

- このポリシー内での次のエンタープライズ・ユーザー設定の定義または変更

- 権限

- 最大レベルまたは最小レベル

- レベル、区分またはグループの読取り、書込みまたは行アクセス

- ラベル・プロファイル

- ポリシーからのエンタープライズ・ユーザーの削除

さらに上位の管理者をポリシー作成者と呼びます。ポリシー作成者は、Oracle Label Securityポリシーとそこに指定されているポリシー管理者を作成または削除できます。

6.9 データベースのブートストラップ

新規データベースをOracle Internet Directoryに登録した後、管理者はそのデータベースにOracle Internet Directory対応Oracle Label Securityをインストールできます。このインストール・プロセスでは、Directory Integration Platform(DIP)プロビジョニング・プロファイルが自動的に作成され、それをデータベースにダウンロードすることでポリシー情報を定期的にリフレッシュできるようになります。「Oracle Directory Integration and Provisioning(DIP)プロビジョニング・プロファイル」を参照してください。

Oracle Internet Directory対応Oracle Label Security用にデータベースを構成すると、DBCAツールではOracle Internet Directory内のポリシー情報がすべてデータベースに送られます。管理者はどの時点であっても$ORACLE_HOME/bin/olsoidsyncにあるブートストラップ・ユーティリティ・スクリプトを使用して、データベースをポリシー情報で再びブートストラップするように決定できます。必須パラメータは次のとおりです。

olsoidsync --dbconnectstring <"database connect string in host:port:sid format">
--dbuser <database user> --dbuserpassword <database user password> [-c] [-r]
[-b <admin context>] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

For example,

olsoidsync --dbconnectstring yippee:1521:ora101 --dbuser lbacsys
--dbuserpassword lbacsys -c
-b "ou=Americas,o=Oracle,c=US" -h yippee -D cn=policycreator -w Easy2rem

olsoidsyncコマンドは、Oracle Internet Directoryからポリシー情報をプルしてデータベースに移入します。ユーザーは、データベースのTNS名、データベース・ユーザー名、データベース・ユーザーのパスワード、管理コンテキスト(存在する場合)、Oracle Internet Directoryホスト名、バインドDNとバインド・パスワードおよびOracle Internet Directoryポート番号(オプション)を指定する必要があります。

オプションの-cスイッチを指定すると、既存のポリシーがデータベースからすべて削除され、Oracle Internet Directoryからのポリシー情報でリフレッシュされます。

オプションの-rスイッチを指定すると、ポリシー・メタデータがすべて削除され(ポリシー自体は削除されず)、ポリシーがOracle Internet Directoryからの新規メタデータでリフレッシュされます。

この2つのスイッチを指定しなければ、Oracle Internet Directoryから新規ポリシーが作成されるのみで、リフレッシュ中にエラーが発生すると停止します。

6.10 データベースとOracle Internet Directoryの同期化

この項の内容は次のとおりです。

- データベースとOracle Internet Directoryの同期化について

- Oracle Directory Integration and Provisioning(DIP)プロビジョニング・プロファイル

- プロビジョニング・プロファイルの無効化、変更および有効化

- Oracle Data GuardでのOracle Directory対応Oracle Label Securityの構成

6.10.1 データベースとOracle Internet Directoryの同期化について

ディレクトリ内のOracle Label Securityメタデータは、Directory Integration PlatformのOracle Directory Provisioning Integration Serviceを使用してデータベースと同期化されます。

ディレクトリ内のLabel Securityデータに対する変更は、Provisioning Integration Serviceによりプロビジョニング・イベントの形式で伝えられます。ソフトウェア・エージェントはこれらのイベントを受信し、適切なSQLまたはPL/SQL文を生成してデータベースを更新します。これらの文の処理後に、Oracle Label Securityデータ・ディクショナリは更新され、ディレクトリ内で行われた変更と一致するようになります。

Oracle Label Securityは、インストール時にProvisioning Integration Serviceに自動的にサブスクライブされます。プロビジョニング・サービスは、各データベースに関連付けられた情報をプロビジョニング・プロファイルの形式で格納します。ソフトウェア・エージェントは、ユーザーDIPの識別情報を使用してデータベースに接続し、またOracle Internet Directoryでの変更をデータベースと同期化するときにはパスワードDIPを使用します。

ユーザーDIPのパスワードに変更があった場合は、その情報をProvisioning Integration Serviceのプロビジョニング・プロファイル内で更新する必要があります。

DIPプロファイル内でデータベース接続情報を変更する手順は、次のとおりです。

1. プロビジョニング・プロファイルを無効化します。これにより、ディレクトリからデータベースへのLabel Securityの変更の伝播が一時的に停止しますが、データは消失しません。プロファイルを有効化すると、プロファイルが無効化された後にディレクトリ内で発生したLabel Securityのすべての変更がデータベースと同期化されます。

2. プロファイル内でデータベース接続情報を更新します。

3. プロファイルを有効化します。

注意:
Oracle Internet Directory対応Oracle Label Securityが正常に動作するには、データベース・キャラクタ・セットとOracle Internet Directoryに互換性がある必要があります。その場合にのみ、Oracle Internet Directory内のLabel Securityメタデータをデータベースと正常に同期化できます。
キャラクタ・セットおよびグローバリゼーション・サポート・パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』の第2章と第3章を参照してください。

関連項目:

- プロビジョニング・プロファイルの無効化、変更および有効化

- プロビジョニング・プロファイルの有効化と無効化の詳細は、『Oracle Internet Directory管理者ガイド』を参照してください。

6.10.2 Oracle Directory Integration and Provisioning(DIP)プロビジョニング・プロファイル

DIPサーバーは、各データベース用に個別に作成されたDIPプロビジョニング・プロファイルを使用して、ディレクトリ内のポリシー変更を接続先データベースと同期化します。このプロファイルは、Oracle Internet Directory対応Oracle Label Securityのインストール・プロセスの一部として自動的に作成されます。管理者は、プロビジョニング・ツールoidprovtoolとスクリプト$ORACLE_HOME/bin/oidprovtoolを使用して、データベース・プロファイルのパスワードを変更できます。この種の各プロファイルには、次の情報が含まれています。

表6-2 DIPプロビジョニング・プロファイルの要素

要素

oidprovtool起動時のこの要素の名前

LDAPホスト名

ldap_host

LDAPポート番号

ldap_port

Oracle Internet Directoryにバインドしてポリシー情報を取得するためのユーザーDNとパスワード

ldap_user

ldap_user_password

データベースDN

application_dn

組織DN、つまり変更が実行される管理コンテキスト

organization_dn

起動するコールバック・ファンクションLBACSYS.OLS_DIP_NTFY

interface_name

データベース接続情報(データベースのホスト名、データベース接続に使用するポート番号、データベースSID、データベース・ユーザー名およびパスワード)

interface_connect_info

Oracle Internet Directoryのcn=LabelSecurityの下のイベント・サブスクリプション(すべてのMODIFY、ADDおよびDELETEイベントなど)

operation

同期化の時間隔

schedule

ここでは、oidprovtoolの使用例に続いて、この例で使用しているパラメータについて説明します。

oidprovtool operation=modify ldap_host=yippee ldap_port=389
ldap_user=cn=defense_admin ldap_user_password=Easy2rem
application_dn="cn=db1,cn=OracleContext,ou=Americas,o=Oracle,c=US"
organization_dn="ou=Americas,o=Oracle,c=US" interface_name=LBACSYS.OLS_DIP_NTFY
interface_type=PLSQL interface_connect_info=yippee:1521:db1:dip:newdip schedule=60
event_subscription= "ENTRY:cn=LabelSecurity,cn=Products,cn=OracleContext,
ou=Americas,o=Oracle,c=US:ADD(*)" event_subscription=
"ENTRY:cn=LabelSecurity,cn=Products, cn=OracleContext,ou=Americas,
o=Oracle,c=US:MODIFY(*)" event_subscription="ENTRY:cn=LabelSecurity,cn=Products,
cn=OracleContext, ou=Americas,o=Oracle,c=US:DELETE"

このサンプルoidprovtoolコマンドでは、次の属性を持つ新規のDIPプロビジョニング・プロファイルが作成され、有効化されます。

- ポート389を使用するホストyippeeのOracle Internet Directory

- Oracle Internet DirectoryユーザーのバインドDN: cn=defense_admin、パスワードEasy2rem

- データベースDN: cn=db1,cn=OracleContext,ou=Americas,o=Oracle,c=US

- 組織DN(管理コンテキスト): ou=Americas,o=Oracle,c=US

- ポート1521でリスニングしているホストyippeeのデータベース

- Oracle SID: db1

- データベース・ユーザー: 新規パスワードnewdipを持つdip

- ディレクトリと接続先データベースとの同期間隔: 60秒

- cn=LabelSecurityの下のADD、MODIFYおよびDELETEイベントをすべてDIPに送信

DIPサーバーを起動するには、$ORACLE_HOME/bin/oidctlを使用します。次に例を示します。

oidctl server=odisrv connect=db2 config=0 instance=0 start

このコマンドでは、コンフィグセット0およびインスタンス番号0を使用してdb2(Oracle Internet Directoryデータベース)に接続し、DIPサーバーを起動します。

関連項目:
DIPプロビジョニング・プロファイルの詳細は、『Oracle Internet Directory管理者ガイド』を参照してください。

6.10.3 プロビジョニング・プロファイルの無効化、変更および有効化

oidprovtool modifyコマンドを使用すると、データベース・パスワードであるinterface_connect_infoのパスワードを変更できますが、最初にプロファイルを無効化する必要があります。パスワードの変更後に、プロファイルを再び有効化します。

oidprovtoolを使用し、無効化操作と次に示す最初の6つのオリジナル・パラメータを指定すると、Oracle Label Securityのプロビジョニング・プロファイルを無効化できます(他のオリジナル・パラメータは不要です)。(他のオリジナル・パラメータは不要です。)コマンドの書式は次のとおりです。

oidprovtool operation=disable ldap_host=< > ldap_port=< > ldap_user_dn=< >
ldap_user_password=< > application_dn=< >  organization_dn=< >

前項の例に示したパラメータを使用すると、このコマンドは次のようになります。

oidprovtool operation=disable ldap_host=yippee ldap_port=389

ldap_user=cn=defense_admin ldap_user_password=Easy2rem
application_dn="cn=db1,cn=OracleContext,ou=Americas,o=Oracle,c=US"
organization_dn="ou=Americas,o=Oracle,c=US"

接続情報のうちパスワードを変更するには、oidprovtoolコマンドを使用して、modify操作、最初の6つのオリジナル・パラメータおよび接続情報に指定されている新規のDIPuserパスワードを指定します。コマンドの書式は次のとおりです。

oidprovtool operation=modify  ldap_host=< > ldap_port=< >

ldap_user_dn=< >  ldap_user_password=< > application_dn=< >
organization_dn=< >   interface_connect_info=< new_connect _info >

前項の例に示したパラメータを使用すると、このコマンドは次のようになります。

oidprovtool operation=modify ldap_host=yippee ldap_port=389

ldap_user=cn=defense_admin ldap_user_password=Easy2rem
application_dn="cn=db1,cn=OracleContext,ou=Americas,o=Oracle,c=US"
organization_dn="ou=Americas,o=Oracle,c=US"
interface_connect_info=yippee:1521:db1:dip:NewestDIPpassword

同様に、次のようにoidprovtoolを使用してDirectory Integration Platformプロビジョニング・プロファイルを再び有効にできます。この場合も、目的の操作と最初の6つのオリジナル・パラメータを指定します。(他のオリジナル・パラメータは不要です。)コマンドの書式は次のとおりです。

oidprovtool operation=enable  ldap_host=< > ldap_port=< >  ldap_user_dn=< >

ldap_user_password=< > application_dn=< >   organization_dn=< >

再び前項の例に示したパラメータを使用すると、このコマンドは次のようになります。

oidprovtool operation=enable ldap_host=yippee ldap_port=389

ldap_user=cn=defense_admin ldap_user_password=Easy2rem
application_dn="cn=db1,cn=OracleContext,ou=Americas,o=Oracle,c=US"
organization_dn="ou=Americas,o=Oracle,c=US"

6.10.4 Oracle Data GuardでのOracle Directory対応Oracle Label Securityの構成

この項の内容は次のとおりです。

- Oracle Internet DirectoryでのOracle Label Securityフェイルオーバーの登録について

- 手順1: Data Guardでのディレクトリ対応Oracle Label Securityの設定

- 手順2: スイッチオーバー後のOIDプロビジョニング・プロファイルの更新

6.10.4.1 Oracle Internet DirectoryでのOracle Label Securityフェイルオーバーの登録について

この項では、プライマリ・データベースの設定方法について説明し、Oracle Internet Directory対応環境でOracle Label Securityのスタンバイ・データベースにスイッチオーバーした後で従う手順を示します。

6.10.4.2 手順1: Data Guardでのディレクトリ対応Oracle Label Securityの設定

1. データベース用にOracle Data Guardを構成します。
Oracle Data Guardのインストールの詳細は、『Oracle Data Guard Broker』を参照してください。

2. プライマリ・データベースのOracle Internet DirectoryにOracle Label Securityを登録します。
詳細は、データベースの登録とOracle Internet Directory対応Oracle Label Securityの構成を参照してください。

3. ポリシーがプライマリ・データベースに伝播されたことを確認します。

1. olsadmintoolユーティリティを使用するかOracle Enterprise Manager Cloud Controlで、Oracle Internet DirectoryにOracle Label Securityポリシーを作成します。
olsadmintoolユーティリティの使用の詳細は、付録B「Oracle Internet Directoryを使用したLabel Security用コマンドライン・ツール」を参照してください。

2. ユーザーLBACSYSとしてプライマリ・データベースに接続します。

3. DBA_SA_POLICIESデータ・ディクショナリ・ビューを問い合せて、ポリシーがプライマリ・データベースに伝播されたことを確認します。

SELECT POLICY_NAME FROM DBA_SA_POLICIES;

4. ユーザーLBACSYSとしてスタンバイ・データベースに接続し、REDOログ適用プロセスを通じてSELECT POLICY_NAME FROM DBA_SA_POLICIES;問合せを実行して、プライマリ・データベース上に伝播されたポリシーがスタンバイ・データベース上にあることを確認します。

5. OLS-OID登録の完了後に、ewallet.p12、sqlnet.oraおよびldap.oraファイルをプライマリ・データベースからスタンバイ・データベースにコピーします。

この手順は、フェイルオーバーの発生時にプライマリ・データベースがアクセス可能でない場合に役立ちます。デフォルトでは、これらのファイルは次の場所にあります。

- ウォレット・ファイルewallet.p12は、$ORACLE_BASE/admin/Oracle_SID/walletディレクトリまたは$ORACLE_HOME/admin/Oracle_SID/walletディレクトリにあります。

- sqlnet.oraは、$ORACLE_HOME/network/adminディレクトリにあります。(このファイルは、スタンバイ・データベースにコピーする前にバックアップします。)

- ldap.oraは、$ORACLE_HOME/network/adminディレクトリにあります。

6. ewallet.p12ファイルをコピーしたディレクトリに移動します。

7. 次の構文を使用して、PKCS#12ウォレット(ewallet.p12)に関連付けられたSSOウォレット・ファイル(cwallet.sso)を作成します。

orapki wallet create -wallet wallet_location -auto_login [-pwd password]

6.10.4.3 手順2: スイッチオーバー後のOIDプロビジョニング・プロファイルの更新

この手順では、スイッチオーバーを実行し、「手順1: Data Guardでのディレクトリ対応Oracle Label Securityの設定」の手順5、6および7を完了した後で、Oracle Internet Directoryのプロビジョニング・プロファイルを新しいプライマリ・データベースの接続情報で更新する準備ができます。次の手順を完了しない場合、ポリシーは新しいスタンバイ・データベースに伝播され続け、古いプライマリ・データベースは「ORA-16000 データベースは読取り専用アクセスでオープンされています。」エラーで失敗します。プロビジョニング・プロファイルを新しいプライマリ・データベース接続情報で更新した後で、ポリシーの伝播が新しいプライマリ・データベースで行われます。また、これらのポリシーはREDO適用プロセスを通じて新しいスタンバイに伝播されます。

1. プライマリまたはスタンバイ・コンピュータで、新しいプライマリ・データベースに対して次のoidprovtoolユーティリティ・コマンドを実行します。

oidprovtool operation=modify \
ldap_host=OID_Server_hostname ldap_port=OID_Server_Port \
ldap_user_dn="cn=orcladmin"  \ application_dn="LDAP_distinguised_name_of_application" \

application_dn設定は、dn=dbname, cn=oraclecontext, default_admin_contextから導出できます。ldap.oraファイルには、default_admin_context設定がリストされます。

2. プロンプトが表示されたら、LDAPユーザー・パスワードを入力します。

Please enter the LDAP password:

3. プロンプトが表示されたら、インタフェース接続情報を次の形式で入力します。

host:port:service_name:dip:password

DIPは、Oracle Label SecurityとともにインストールされるOracle Directory Integration and Provisioning (DIP)のアカウントです。このアカウントは、Oracle Internet Directory対応Oracle Label Securityのインストール・プロセスの一部として自動的に作成されます。

インタフェース接続情報がないことを指定するには、設定を省略し、[Return]を押します。

4. プロビジョニング・プロファイルの完成後に、DIPサーバーを再起動します。

6.11 セキュリティ・ロールと許可されるアクション

Oracle Internet DirectoryでOracle Label Securityのポリシーを管理するために、ディレクトリ内で特定のエンティティにアクセス制御の権利が付与されます。アクセス制御メカニズムはOracle Internet Directoryにより提供されます。

表6-3に、これらのエンティティと各エンティティが実行できるタスクの概要を示します。

表6-4「OIDでユーザー別に許可されるアクセス・レベル」には、ポリシー作成者、ポリシー管理者およびLabel Securityユーザーについて、特定のアクセス・レベルで許可または禁止される操作を示します。

表6-3 特定のエンティティが実行できるタスク

エンティティ

このエンティティが実行できるタスク

ポリシー作成者

新規ポリシーの作成(または既存のポリシーの削除)、新規ポリシー管理者の作成(または既存のポリシー管理者の削除)。

ポリシー管理者

ポリシーの場合: 既存のポリシー・オプションと監査設定の変更、ポリシー監査の有効化または無効化。

ラベル・コンポーネントの場合: フルネームまたは詳細名の変更、あるいは(グループの場合)子グループの作成または削除などによる、レベル、区分およびグループの作成、変更または削除。

エンタープライズ・ユーザーの場合: ポリシーからのエンタープライズ・ユーザーの削除、エンタープライズ・ユーザーの最大または最小レベル、読取り、書込みおよび行アクセス(区分またはグループの場合)、権限(ポリシーの場合)およびラベル・プロファイルの変更。

表6-4 OIDでユーザー別に許可されるアクセス・レベル

エントリ

ポリシー作成者

ポリシー管理者

データベース

cn=Policies

変更可能

アクセスなし

アクセスなし

cn=Admins,cn=Policy1

変更可能

アクセスなし

アクセスなし

uniqueMember: cn=Policy1

参照可能

参照可能

変更可能

cn=PolicyCreators

アクセスなし脚注1

アクセスなし

アクセスなし

cn=Levels,cn=Policy1

参照および削除可能

変更可能

アクセスなし

cn=Compartments,cn=Policy1

参照および削除可能

変更可能

アクセスなし

cn=Groups,cn=Policy1

参照および削除可能

変更可能

アクセスなし

cn=AuditOptions,cn=Policy1

参照および削除可能

変更可能

アクセスなし

cn=Profiles,cn=Policy1

参照および削除可能

変更可能

アクセスなし

cn=Labels,cn=Policy1

参照および削除可能

変更可能

アクセスなし

cn=DBServers

アクセスなし脚注2

アクセスなし

アクセスなし

脚注1 グループcn=OracleContextAdminsはグループcn=PolicyCreatorsの所有者であるため、cn=OracleContextAdminsのメンバーはcn=PolicyCreatorsを変更できます。

脚注2 グループcn=OracleDBCreatorsはグループcn=DBServersの所有者であるため、cn=OracleDBCreatorsのメンバーはcn=DBServersを変更できます。

6.11.1 Oracle Internet Directory対応Oracle Label Securityのポリシー作成者の制限

ポリシー作成者グループのメンバーが実行できるのは、Oracle Label Securityのポリシーの作成、参照および削除のみです。

このユーザーは、そのポリシーのPolicy Adminsグループに明示的に追加されていても、ラベル・コンポーネントの作成やユーザーの追加のようなポリシー管理タスクを実行できません。つまり、ポリシー作成者をポリシーの管理者にすることはできません。

6.12 置き換えられるPL/SQL文

Oracle Label SecurityでOracle Internet Directoryが有効化されている場合は、次の表に示すプロシージャが置き換えられます。これらのプロシージャの実行が許可されるのはLBACSYSのみです。

この表に示す一部のプロシージャについては、その機能が2列目に示すolsadmintoolコマンドに置き換えられます(付録E「リファレンス」を参照)。

表6-5 Oracle Internet Directoryの使用時にolsadmintoolで置き換えられるプロシージャ

無効化されるプロシージャ

代替olsadmintoolコマンド

SA_SYSDBA.CREATE_POLICY

olsadmintool createpolicy

SA_SYSDBA.ALTER_POLICY

olsadmintool alterpolicy

SA_SYSDBA.DROP_POLICY

olsadmintool droppolicy

SA_COMPONENTS.CREATE_LEVEL

olsadmintool createlevel

SA_COMPONENTS.ALTER_LEVEL

olsadmintool alterlevel

SA_COMPONENTS.DROP_LEVEL

olsadmintool droplevel

SA_COMPONENTS.CREATE_COMPARTMENT

olsadmintool createcompartment

SA_COMPONENTS.ALTER_COMPARTMENT

olsadmintool altercompartment

SA_COMPONENTS.DROP_COMPARTMENT

olsadmintool dropcompartment

SA_COMPONENTS.CREATE_GROUP

olsadmintool creategroup

SA_COMPONENTS.ALTER_GROUP

olsadmintool altergroup

SA_COMPONENTS.ALTER_GROUP_PARENT

olsadmintool altergroup

SA_COMPONENTS.DROP_GROUP

olsadmintool dropgroup

SA_USER_ADMIN.SET_LEVELS

なし

SA_USER_ADMIN.SET_COMPARTMENTS

なし

SA_USER_ADMIN.SET_GROUPS

なし

SA_USER_ADMIN.ADD_COMPARTMENTS

なし

SA_USER_ADMIN.ALTER_COMPARTMENTS

なし

SA_USER_ADMIN.DROP_COMPARTMENTS

なし

SA_USER_ADMIN.DROP_ALL_COMPARTMENTS

なし

SA_USER_ADMIN.ADD_GROUPS

なし

SA_USER_ADMIN.ALTER_GROUPS

なし

SA_USER_ADMIN.DROP_GROUPS

なし

SA_USER_ADMIN.DROP_ALL_GROUPS

なし

SA_USER_ADMIN.SET_USER_LABELS

olsadmintool createprofile、olsadmintool adduser、olsadmintool dropprofile、olsadmintool dropuser

SA_USER_ADMIN.SET_DEFAULT_LABEL

なし

SA_USER_ADMIN.SET_ROW_LABEL

なし

SA_USER_ADMIN.DROP_USER_ACCESS

olsadmintool dropuser

SA_USER_ADMIN.SET_USER_PRIVS

olsadmintool createprofile、olsadmintool adduser、olsadmintool dropprofile、olsadmintool dropuser

SA_AUDIT_ADMIN.AUDIT

olsadmintool audit

SA_AUDIT_ADMIN.NOAUDIT

olsadmintool noaudit

SA_AUDIT_ADMIN.AUDIT_LABEL

なし

SA_AUDIT_ADMIN.NOAUDIT_LABEL

なし

6.13 ポリシー管理者専用プロシージャ

次のプロシージャを実行できるのは、ポリシー管理者(Oracle Internet Directoryで定義済のエンタープライズ・ユーザー)のみです。

- SA_POLICY_ADMIN.APPLY_SCHEMA_POLICY

- SA_POLICY_ADMIN.APPLY_TABLE_POLICY

- SA_POLICY_ADMIN.DISABLE_SCHEMA_POLICY

- SA_POLICY_ADMIN.DISABLE_TABLE_POLICY

- SA_POLICY_ADMIN.ENABLE_SCHEMA_POLICY

- SA_POLICY_ADMIN.ENABLE_TABLE_POLICY

- SA_POLICY_ADMIN.GRANT_PROG_PRIVS

- SA_POLICY_ADMIN.POLICY_SUBSCRIBE

- SA_POLICY_ADMIN.POLICY_UNSUBSCRIBE

- SA_POLICY_ADMIN.REMOVE_SCHEMA_POLICY

- SA_POLICY_ADMIN.REMOVE_TABLE_POLICY

- SA_POLICY_ADMIN.SET_PROG_PRIVS

- SA_POLICY_ADMIN.REVOKE_PROG_PRIVS

第III部

Oracle Label Securityアプリケーションの管理

この部は、次の章を含んでいます。

- 第7章「Oracle Label Securityポリシーの作成」

- 第8章「ユーザーのラベルおよび権限の管理」

- 第9章「ポリシー施行オプションとラベル付けファンクションの実装」

- 第10章「表およびスキーマへのポリシーの適用」

- 第11章「トラステッド・ストアド・プログラム・ユニットの管理および使用」

- 第12章「Oracle Label Securityでの監査」

- 第13章「分散データベースでのOracle Label Securityの使用」

- 第14章「Oracle Label SecurityでのDBAファンクションの実行」

- 第15章「インバース・グループを使用した解放性」

7 Oracle Label Securityポリシーの作成

この章では、Oracle Label Securityポリシーの作成方法について説明します。この章の内容は、次のとおりです。

- Oracle Label Securityの管理タスクの概要

- Oracle Label Security管理者のロールの編成

- Oracle Label Securityの管理インタフェースの選択

- SA_SYSDBAパッケージを使用したセキュリティ・ポリシーの管理

- SA_COMPONENTSパッケージを使用したラベル・コンポーネントの定義

- SA_LABEL_ADMINパッケージを使用した有効なラベルの指定

7.1 Oracle Label Securityの管理タスクの概要

Oracle Label Securityポリシーを作成して実装するには、次のタスクを実行します。各タスクの詳細は、次の各項を参照してください。

- ステップ1: ポリシーの作成

- ステップ2: ラベル・コンポーネントの定義

- ステップ3: 有効なデータ・ラベルのセットの識別

- ステップ4: 表およびスキーマへのポリシーの適用

- ステップ5: ユーザーの認証

- ステップ6: トラステッド・プログラム・ユニットの作成と認可(オプション)

- ステップ7: 監査の構成(オプション)

7.1.1 ステップ1: ポリシーの作成

次を定義してポリシーを作成します。

- ポリシー名

- ポリシー・ラベルの列名

- ポリシーのデフォルト・オプション

Oracle Enterprise Manager Database Controlインタフェースを使用して、ポリシーを作成できます。

Oracle Enterprise Managerを使用してポリシーを作成する手順は、次のとおりです。

1. LBACSYSアカウントを使用してOracle Enterprise Manager Database Controlにログインします。

2. 「サーバー」タブをクリックします。

3. 「セキュリティ」の下の「Oracle Label Security」をクリックします。「Label Securityポリシー」ページが表示されます。

4. 「作成」をクリックし、新しいLabel Securityポリシーの作成を開始します。
「Label Securityポリシーの作成」ページが表示されます。

5. ポリシーの名前、ラベル列およびデフォルトのポリシー施行オプションを定義します。

- 名前: ポリシーの名前を入力します(例: ACCESS_LOCATIONS)。

- ラベル列: ラベル列の名前を入力します(例: OLS_COLUMN)。後でポリシーを表に適用するときに、このラベル列がその表に追加されます。デフォルトでは、ポリシーのラベル列のデータ型はNUMBER(10)です。NUMBER(10)データ型の既存の表の列をラベル列として使用することもできます。

- ラベル列の非表示: 列を非表示にする場合に選択します。ポリシーを初めて作成する場合、ポリシーの開発中は「ラベル列の非表示」を無効にできます。ポリシーが完成し使用準備が整った時点で、アプリケーションに対して透過的になるように列を非表示にします。

- 有効: ポリシーを有効または無効に切り替えます。

- 強制オプション: ポリシーの適用時に、デフォルトのポリシー施行オプションが使用されます。これらのオプションが、ポリシーを適用するアプリケーションのニーズと一致していることを確認してください。
次のオプションから選択します。

- ポリシー強制を適用しない(NO_CONTROL)

- ポリシー強制の適用
すべての問合せ用(READ_CONTROL)

INSERT操作用(INSERT_CONTROL)

UPDATE操作用(UPDATE_CONTROL)

ラベル列の更新にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)

ラベル列を更新する操作(LABEL_UPDATE)

読取りアクセスが可能になるUPDATEおよびINSERT操作(CHECK_CONTROL)

6. 「OK」をクリックします。
新しいポリシーが「Oracle Label Securityポリシー」ページに表示されます。

また、SA_SYSDBA.CREATE_POLICYコマンドライン・プロシージャを使用してポリシーを作成する方法もあります。

関連項目:
SA_SYSDBA.CREATE_POLICYを使用したポリシーの作成

7.1.2 ステップ2: ラベル・コンポーネントの定義

新規ポリシーのラベル・コンポーネントを形成するレベル、区分およびグループを定義します。

Oracle Enterprise Managerを使用してラベル・コンポーネントを作成する手順は、次のとおりです。

1. 「Oracle Label Securityポリシー」ページで、前述のステップで作成したポリシーを選択します。「編集」をクリックします。

2. 「Label Securityポリシーの編集」ページで、「ラベル・コンポーネント」タブを選択します。

3. 「レベル」の下の「5行追加」をクリックし、ポリシーのレベルを追加します。作成する各レベルに対して詳細名、短縮名および数値タグを入力します。この数値タグは、レベルの機密性に対応しています。レベルをさらに作成する場合は、「5行追加」を再度クリックします。同じ手順を使用して、区分と行を作成します。区分とグループの場合、数値タグは機密性に対応していません。
少なくとも1つのレベル(SECRETなど)を作成する必要があります。区分とグループの作成はオプションです。

レベル番号は、対応しているラベルの機密性レベルを示します。番号が大きいほど機密性が大きいことを意味します。セキュリティ・ポリシーに追加のレベルが必要になる場合に備えて、後で拡張できるような数値の範囲を選択します。たとえば、レベルをPUBLIC(7000)とSENSITIVE(8000)として作成すると、後でCONFIDENTIALという中間レベルを作成することになった場合に、このレベルに対して7500という数値を割り当てることができます。

区分は、データに関連付けられているカテゴリを識別し、レベル内にさらに細分化したレベルを提供します。たとえば、1つの表に様々な部門に対応するデータがあり、そのデータを分類するために区分が必要な場合があります。区分はオプションです。

グループは、データを所有する組織またはデータにアクセスする組織を識別します。グループは、データを制御された方法で送信したり、組織の変更に適切なタイミングで対処する場合に役立ちます。グループはオプションです。

4. 「適用」をクリックします。

また、コマンドラインからSA_COMPONENTSパッケージを使用してラベル・コンポーネントを作成する方法もあります。

関連項目:
SA_COMPONENTSパッケージを使用したラベル・コンポーネントの定義

7.1.3 ステップ3: 有効なデータ・ラベルのセットの識別

ポリシーをサポートする有効なラベルのセットを指定します。レベル、区分およびグループの可能なすべての組合せから、データに割り当てることができるラベルを定義する必要があります。

ポリシーのデータ・ラベルを作成する手順は、次のとおりです。

1. 「Label Securityポリシー」ページで、ラベルをレベルにリンクする必要のあるポリシーを選択します。

2. 「アクション」ボックスで、「データ・ラベル」を選択します。「実行」をクリックします。
「データ・ラベル」ページが表示されます。

3. 「追加」をクリックします。

「データ・ラベルの作成」ページが表示されます。

4. 次の情報を入力します。

- 数値タグ: ラベルを一意に識別する番号を入力します。この番号は、すべてのポリシーにわたって一意である必要があります。

- レベル: リストからレベルを選択します。

5. 必要に応じて、ラベルに追加する区分を選択できます。区分を追加するには、「区分」の下の「追加」をクリックします。ラベルに追加する区分を選択します。「選択」をクリックして区分を追加します。

6. 必要に応じて、ラベルに追加するグループを選択できます。グループを追加するには、「グループ」の下の「追加」をクリックします。ラベルに追加するグループを選択します。「選択」をクリックしてグループを追加します。

7. 「データ・ラベルの作成」ページの「OK」をクリックします。

データ・ラベルが「データ・ラベル」ページに表示されます。

8. 追加のデータ・ラベルを作成するには、ステップ3から7を繰り返します。

また、SA_LABEL_ADMINパッケージを使用してラベル・コンポーネントを作成する方法もあります。

データ・ラベルを実行時に動的に作成する必要のあるアプリケーションでは、TO_DATA_LABELファンクションを使用する方法もあります。

注意:
Oracle Label SecurityがOracle Internet Directoryで動作するようにインストールされている場合、ラベルはOracle Internet Directoryでolsadmintoolコマンドを使用して集中管理されるため、動的ラベル生成は許可されません。付録B「Oracle Internet Directoryを使用したLabel Security用コマンドライン・ツール」を参照してください。
したがって、Oracle Label SecurityがOracle Internet Directory対応の場合、このTO_DATA_LABELファンクションは使用できず、使用するとエラー・メッセージが生成されます。

関連項目:
SA_LABEL_ADMINパッケージを使用した有効なラベルの指定
TO_DATA_LABELを使用したラベルの挿入

7.1.4 ステップ4: 表およびスキーマへのポリシーの適用

個々のデータベース表およびスキーマに、ポリシーを適用して保護します。このプロセス中に、各表およびスキーマのポリシー施行レベルを、アプリケーションのセキュリティ要件が反映されるようにカスタマイズできます。

ポリシーをデータベース表に適用する手順は、次のとおりです。

1. 「Label Securityポリシー」ページで、表に適用する必要があるポリシーを選択します。

2. 「アクション」ボックスから「適用」を選択します。「実行」をクリックします。
「適用」ページが表示されます。

3. ポリシーを表に適用するには、「表」タブを選択します。

注意:
ポリシーをスキーマに適用する場合は「スキーマ」タブを選択します。手順は、ポリシーを表に適用する場合と同じです。

4. 「作成」をクリックします。
「表の追加」ページが表示されます。

5. 「表」ボックスの横にある懐中電灯アイコンをクリックします。

6. 「検索と選択」ウィンドウの「検索」の下に、次の情報を入力します。

- スキーマ: 表が表示されるスキーマの名前を入力します。このフィールドを空のままにすると、すべてのスキーマの表が表示されます。

- 名前: 必要に応じて表の名前を入力します。このボックスを空のままにすると、スキーマ内のすべての表が表示されます。

ワイルドカードを使用して検索範囲を絞り込むには、パーセント(%)符号を使用します。たとえば、Oの文字で開始する表をすべて検索するには、O%と入力します。

7. 表を選択し、「選択」をクリックします。
「表の追加」ページが表示されます。

8. 次の情報を入力します。

- ポリシー強制オプション: 必要に応じて施行オプションを選択します。これらのオプションは、「ステップ1: ポリシーの作成」でポリシーを作成したときに選択した施行オプションに加えて表に適用されます。
施行オプションを変更しない場合、つまり、前述のステップで作成した内容と同じ施行オプションを使用する場合は、「デフォルトのポリシー強制を使用」を選択します。施行オプションをさらに追加する場合は、リストされている他のオプションを選択します。

- Labeling Function: (オプション)新しい行または更新された行に関連付けるラベルを自動的に計算する、ラベル付けの関数を指定します。アクティブなラベル付けの関数は、ラベルを提供する他の方法よりも優先されるため、この関数は常に実行され、ポリシーに書き込まれたデータ・ラベルを提供します。

- 述語: 必要に応じて、READ_CONTROLのラベルベースの述語と(ANDまたはORを使用して)結合する追加の述語を指定します。

9. 「OK」をクリックします。

また、SA_POLICY_ADMINパッケージを使用して、表およびスキーマにポリシーを適用する方法もあります。

関連項目:
第10章「表およびスキーマへのポリシーの適用」

7.1.5 ステップ5: ユーザーの認証

個々のユーザーごとに、各ユーザーがセッション・アクセスに使用する認可を定義します。適切な認可を持っていないユーザーは、保護されているデータにアクセスできません。

オプションで、特定のユーザーがジョブの実行に必要とする特殊な権限を割り当てることができます。Oracle Label Securityの権限が必要になるのは、特殊なジョブを実行する場合のみであることに注意してください。

OLSポリシーに対してユーザーを認可する手順は、次のとおりです。

1. 「Label Securityポリシー」ページで、認可が必要なポリシーを選択します。

2. 「アクション」ボックスで、「認可」を選択します。「実行」をクリックします。
「認可」ページが表示されます。「ユーザー」タブが選択されていることを確認します。

3. 「ユーザーの追加」をクリックします。
「ユーザーの追加」ページが表示されます。

4. 次の手順でユーザーを追加します。

- 「データベース・ユーザー」については、その下の「追加」をクリックします。「検索と選択」ウィンドウで、目的のユーザーを選択して「選択」をクリックします。

- 「データベース以外のユーザー」については、その下の「5行追加」をクリックし、追加対象となるデータベース以外のユーザーのユーザー名を追加します。ほとんどのアプリケーション・ユーザーは、データベース以外のユーザーと考えられます。データベース以外のユーザーはデータベースには存在しません。ユーザー名には、Oracle Label Securityのネーミング規格を満たし、VARCHAR2(30)の長さのフィールドに収まる任意の名前を指定できます。ただし、アプリケーションがデータベースに接続する際、データベース以外のユーザーに関するセキュリティ情報は自動的に構成されないことに注意してください。この場合、アプリケーションでは、Oracle Label Securityのファンクションをコールして、実質的なデータベース・ユーザーでない特定ユーザーのラベル認可を想定する必要があります。

5. 「ユーザーの作成」ページで、認可するユーザーを選択します。「次へ」をクリックします。複数のユーザーが同じ認可を必要としている場合は、同じ認可を必要とするすべてのユーザーを選択します。「次へ」をクリックします。
「権限」ステップが表示されます。

6. ここでは、前述のステップで選択したユーザーに権限を割り当てることができます。権限によって、データベース・ユーザーはポリシーで施行される特定の制約をバイパスできます。付与する権限を選択します。「次へ」をクリックします。
ユーザーに権限を割り当てない場合は、権限を選択せずに「次へ」をクリックします。

「レベル、区分およびグループ」ステップが表示されます。

7. 次に、ユーザーのユーザー・ラベルを作成する必要があります。「レベル」の下にある懐中電灯アイコンを使用して、次のフィールドに入力する値を選択します。

- 最大レベル: このユーザーに対する読取りおよび書込みアクセスの最上位レベルを入力します。

- 最小レベル: 書込みアクセスの最下位レベルを入力します。

- デフォルト・レベル: ユーザーがログインする際のデフォルトのレベルを入力します。
最小レベル以上かつ最大レベル以下の値を指定します。

- 行レベル: ユーザーが表に書き込む際の、行に指定されるレベルを入力します。

8. 「区分」で「追加」をクリックして、ユーザー・ラベルに区分を追加します。追加する区分を選択します。「選択」をクリックします。

9. 追加する各区分については、次のプロパティを選択できます。

- 書込み: ユーザーは、その区分をラベルの一部として持つデータに書込みができます。

- デフォルト: その区分を、ユーザーのデフォルトのセッション・ラベルに追加します。

- 行: ユーザーが表に書き込む際に、その区分をデータ・ラベルに追加します。

10. 「グループ」の下の「追加」をクリックし、グループをユーザー・ラベルに追加します。グループを選択し、「選択」をクリックします。

11. 追加する各グループについては、次のプロパティを選択できます。

- 書込み: ユーザーは、そのグループをラベルの一部として持つデータに書込みができます。

- デフォルト: そのグループを、ユーザーのデフォルトのセッション・ラベルに追加します。

- 行: ユーザーが表に書き込む際に、そのグループをデータ・ラベルに追加します。

12. 「次へ」をクリックします。
「監査」ステップが表示されます。

13. ここでは、選択したユーザーに対してポリシー監査オプションを設定できます。監査オプションは、次の操作に対して設定できます。

- 適用されたポリシー:
「成功時に監査」では、表またはスキーマへのポリシー適用で、成功した適用について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

「失敗時に監査」では、表またはスキーマへのポリシーの適用で、失敗した適用について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

- 削除されたポリシー:
「成功時に監査」では、表またはスキーマからのポリシーの削除で、成功した削除について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

「失敗時に監査」では、表またはスキーマからのポリシーの削除で、失敗した削除について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

- 設定されたラベルと権限:
「成功時に監査」では、ユーザーの認証および権限の設定で、成功した設定について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

「失敗時に監査」では、ユーザーの認証および権限の設定で、失敗した設定について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

- すべてのポリシー固有の権限:
「成功時に監査」では、ポリシー権限の使用で、成功した使用について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

「失敗時に監査」では、ポリシー権限の使用で、失敗した使用について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。

14. 「次へ」をクリックします。

15. ポリシー認可設定を確認できます。ポリシー認可を作成するには、「終了」をクリックします。「戻る」をクリックして、認可設定を変更することもできます。

また、SA_POLICY_ADMINパッケージを使用してユーザーを認可する方法もあります。

関連項目:
第8章「ユーザーのラベルおよび権限の管理」

7.1.6 ステップ6: トラステッド・プログラム・ユニットの作成と認可(オプション)

トラステッド・プログラム・ユニットは、Oracle Label Security権限を付与されているファンクション、プロシージャまたはパッケージです。トラステッド・ストアド・プログラム・ユニットの作成方法は、標準的なプロシージャ、ファンクションまたはパッケージを作成する場合と同じで、CREATE PROCEDURE、CREATE FUNCTIONまたはCREATE PACKAGEおよびCREATE PACKAGE BODYの各文を使用します。プログラム・ユニットは、Oracle Label Security権限を付与するとトラステッド・プログラム・ユニットになります。

プログラム・ユニットの権限を設定する手順は、次のとおりです。

1. 「Label Securityポリシー」ページで、認可が必要なポリシーを選択します。

2. 「アクション」ボックスで、「認可」を選択します。「実行」をクリックします。
「認可」ページが表示されます。

3. 「トラステッド・プログラム・ユニット」タブをクリックします。

4. 「追加」をクリックして、プロシージャ、ファンクションまたはパッケージに対するOracle Label Security権限を追加します。
「プログラム・ユニットの作成」ページが表示されます。

5. 「プログラム・ユニット」フィールドに、権限を付与する必要があるプロシージャ、ファンクションまたはパッケージの名前を入力します。「検索」アイコンを使用して、プロシージャ、ファンクションまたはパッケージを検索することもできます。

6. プログラム・ユニットに付与する必要があるポリシー固有の権限を1つ以上選択します。「OK」をクリックします。
「認可」ページに、トラステッド・プログラム・ユニットが追加されます。

また、SA_USER_ADMINパッケージを使用してトラステッド・プログラム・ユニットを認可する方法もあります。

関連項目:
第11章「トラステッド・ストアド・プログラム・ユニットの管理および使用」

7.1.7 ステップ7: 監査の構成(オプション)

必要な場合は、管理タスクと権限の使用を監視するように構成します。

既存のOracle Label Securityポリシーの監査設定を構成する手順は、次のとおりです。

1. 「Label Securityポリシー」ページで、構成する必要があるポリシーを選択します。

2. 「編集」をクリックします。
Label Securityポリシー設定の編集ページが表示されます。

3. 「拡張」タブをクリックします。「監査」セクションの下の監査設定を編集します。

4. ユーザー・セッション・ラベルを監査表に含める場合は、「監査ラベル」の下の「ラベルを監査証跡に含める」を選択します。

5. 「監査設定」の下で、監査する「操作」を選択します。次の操作から選択できます。

- 適用されたポリシー: 表またはスキーマに対するポリシーの適用を監査します。

- 削除されたポリシー: 表またはスキーマからのポリシーの削除を監査します。

- 設定されたラベルと権限: ユーザーの認証と権限の設定を監査します。

- すべてのポリシー固有の権限: ポリシー権限の使用を監査します。

6. 「適用されたポリシー」の下の「追加」をクリックして、前述のステップで選択した「操作」に対して監査されるユーザーを追加します。
「検索と選択」ウィンドウが表示されます。

7. 追加する必要があるユーザーを選択します。「選択」をクリックします。

8. 追加するユーザーごとに、「成功時に監査」および「失敗時に監査」の値を選択します。

追加したユーザーごとに、選択した操作の成功したインスタンスの監査および失敗したインスタンスの監査を選択できます。アクセスごとに監査するか、セッションごとに監査するかも選択できます。

9. 監査する操作ごとに、ステップ5から8を繰り返します。

関連項目:
第12章「Oracle Label Securityでの監査」

7.2 Oracle Label Security管理者のロールの編成

Oracle Label Securityポリシーを管理するには、様々な方法があります。新規ポリシーの作成時にはpolicy_DBAロールが作成されます。管理タスクの実行が必要な各スタッフに、このロールを付与する必要があります。管理パッケージのEXECUTE権限をそれぞれ別のユーザーに付与すると、各管理者の権限を管理ファンクションのサブセットに制限できます。

たとえば、SA_COMPONENTSおよびSA_LABEL_ADMINに対するEXECUTE権限を1人のユーザーまたは1つ以上のロールに付与してラベル定義を管理し、SA_USER_ADMINに対するEXECUTEを別のユーザーまたはロールに付与してユーザー・ラベルと権限を管理できます。または、すべての管理パケットのEXECUTE権限をpolicy_DBAロールに付与すると、policy_DBAロールを持つすべてのユーザーが管理タスクのすべてを実行できるようになります。

7.3 Oracle Label Securityの管理インタフェースの選択

Oracle Label Securityの開発および管理タスクは、次のインタフェースのどちらでも実行できます。

- Oracle Label Securityのパッケージ

- Oracle Enterprise Manager

7.3.1 Oracle Label Securityのパッケージ

Oracle Label Securityのパッケージでは、簡単に管理できるように、直接のコマンドライン・インタフェースを提供します。管理パッケージを次に示します。

表7-1 Oracle Label Securityの管理パッケージ

パッケージ

用途

SA_SYSDBA

Oracle Label Securityポリシーの作成、変更および削除。

SA_COMPONENTS

ポリシーのレベル、区分およびグループの定義。

SA_LABEL_ADMIN

ラベルの作成など、標準的なラベルのポリシー管理タスクの実行。

SA_POLICY_ADMIN

スキーマおよび表へのポリシーの適用。

SA_USER_ADMIN

レベル、区分およびグループに関するユーザー認証とプログラム・ユニットの権限の管理。ユーザー権限も管理します。

SA_AUDIT_ADMIN

管理タスクと権限使用の監査オプションの設定。

7.3.1.1 Oracle Label Securityのデモンストレーション・ファイル

提供されるパッケージを使用してOracle Label Securityポリシーを作成および開発する方法を示すデモンストレーションについては、ORACLE_HOME/rdbms/demoディレクトリにあるolsdemo.sqlファイルを参照してください。

7.3.2 Oracle Enterprise Manager

Oracle Enterprise Manager Database Controlによって提供されるWebインタフェースを使用して、Oracle Label Securityを管理できます。図7-1に、Oracle Enterprise Managerインタフェースを示す代表的なスクリーンショットを示します。

図7-1 Enterprise Managerを使用したOracle Label Securityポリシーの構成

関連項目:

- Oracle Label Securityの管理にEnterprise Managerを使用する方法の詳細は、第4章「Oracle Label Securityスタート・ガイド」を参照してください。

- Enterprise Manager Database Controlインタフェースの使用方法の詳細は、Enterprise Managerのオンライン・ヘルプを参照してください。

7.4 SA_SYSDBAパッケージを使用したセキュリティ・ポリシーの管理

この項では、SA_SYSDBAパッケージを使用してポリシーを管理する方法について説明します。この項の内容は、次のとおりです。

- SA_SYSDBAパッケージを使用できるユーザー

- ポリシーを管理できるユーザー

- ポリシー指定に有効な文字

- SA_SYSDBA.CREATE_POLICYを使用したポリシーの作成

- SA_SYSDBA.ALTER_POLICYを使用したポリシー・オプションの変更

- SA_SYSDBA.DISABLE_POLICYを使用したポリシーの無効化

- SA_SYSDBA.ENABLE_POLICYを使用したポリシーの有効化

- SA_SYSDBA.DROP_POLICYを使用したポリシーの削除

7.4.1 SA_SYSDBAパッケージを使用できるユーザー

ユーザーがSA_SYSDBAパッケージを使用してポリシーを作成、変更および削除するには、次のロールおよび権限が必要です。

- LBAC_DBAロール

- SA_SYSDBAパッケージに対するEXECUTE権限

7.4.2 ポリシーを管理できるユーザー

ポリシーを作成すると、policy_DBAというロールが自動的に作成されます。このロールを使用して、ポリシーの管理プロシージャの実行を認可されたユーザーを制御できます。

たとえば、人事管理ポリシーHRを作成すると、HR_DBAロールが自動的に作成されます。ユーザーがどの管理パッケージを使用するにも、HR_DBAロールが必要になります。JoanがHRポリシーの管理者で、DavidがFINポリシーの管理者の場合、JoanはHR_DBAロール、DavidはFIN_DBAロールを持ちます。各ユーザーが管理できるのは、policy_DBAロールを持っているポリシーです。

ポリシーを作成するユーザーには、ADMINオプション付きのpolicy_DBAロールが自動的に付与され、このロールを他のユーザーに付与できます。

7.4.3 ポリシー指定に有効な文字

すべてのポリシー指定に有効な文字には、英数字、アンダースコアおよびデータベースのキャラクタ・セットからの有効な文字が含まれます。

7.4.4 SA_SYSDBA.CREATE_POLICYを使用したポリシーの作成

CREATE_POLICYプロシージャを使用してOracle Label Securityの新規ポリシーを作成し、ポリシー固有の列名を定義し、デフォルトのポリシー・オプション・セットを指定します。

構文:

PROCEDURE CREATE_POLICY (
policy_name       IN VARCHAR2,
column_name       IN VARCHAR2 DEFAULT NULL,
default_options   IN VARCHAR2 DEFAULT NULL);

表7-2 SA_SYSDBA.CREATE_POLICYのパラメータ

パラメータ名

説明

policy_name

データベース内で一意のポリシー名を指定します。policy_nameは30文字以内ですが、最初の26文字のみが有効です。2つのポリシーでpolicy_nameの最初の26文字に同じ値を指定することはできません。

column_name

ポリシーで保護されている表に追加する列の名前を指定します。NULLを指定すると、デフォルト名SA_LABELが使用されます。2つのOracle Label Securityポリシーが同じ列名を共有することはできません。

default_options

ポリシーを適用し、表またはスキーマ固有のオプションを指定しない場合に使用するデフォルト・オプションを指定します。これには、施行オプションとラベル列を非表示にするオプションが含まれます。

関連項目:

- 表のポリシー施行オプションについては、「SA_POLICY_ADMIN.APPLY_TABLE_POLICYを使用したポリシーの適用」を参照してください。

- HIDEについては、「ポリシー・オプションの選択」および「HIDEポリシー列オプション」を参照してください。

- 「インバース・グループでのSA_SYSDBA.CREATE_POLICY」

7.4.5 SA_SYSDBA.ALTER_POLICYを使用したポリシー・オプションの変更

ALTER_POLICYプロシージャを使用して、ポリシーのデフォルト・オプションを設定し、変更します。

構文:

PROCEDURE ALTER_POLICY (
policy_name       IN  VARCHAR2,
default_options   IN  VARCHAR2 DEFAULT NULL);

表7-3 SA_SYSDBA.ALTER_POLICYのパラメータ

パラメータ名

説明

policy_name

ポリシー名を指定します。

default_options

ポリシーを適用し、表またはスキーマ固有のオプションを指定しない場合に使用するデフォルト・オプションを指定します。これには、施行オプションとラベル列を非表示にするオプションが含まれます。

7.4.6 SA_SYSDBA.DISABLE_POLICYを使用したポリシーの無効化

DISABLE_POLICYプロシージャを使用して、データベースから削除せずにポリシーの施行をオフにします。それ以降のデータベースへのすべてのアクセスには、ポリシーは施行されません。

ポリシーを無効化すると、そのポリシーで保護されている表およびスキーマにはアクセス制御が施行されなくなります。管理者は、ポリシーが無効化されている間も、引き続き管理操作を実行できます。

構文:

PROCEDURE DISABLE_POLICY (policy_name IN VARCHAR2);

表7-4 SA_SYSDBA.DISABLE_POLICYのパラメータ

パラメータ名

説明

policy_name

無効化するポリシーを指定します。

注意:
この機能はきわめて強力であり、慎重に使用する必要があります。ポリシーを無効化すると、データベースのすべての接続ユーザーが、通常はポリシーで保護されている全データにアクセスできるようになります。したがって、サイトではこの機能の使用に関するガイドラインを設定する必要があります。

通常は、データを管理するためにポリシーを無効化しないでください。ただし、管理者は、アプリケーションのデバッグ・タスクを実行するために、ポリシーを無効化することが必要となる場合があります。この場合は、データベースをシングル・ユーザー・モードで実行してください。たとえば、開発環境では、ポリシーをオンにせずにデータ処理操作を監視することが必要な場合があります。ポリシーを再び有効化すると、選択したすべての施行オプションも再び有効になります。

7.4.7 SA_SYSDBA.ENABLE_POLICYを使用したポリシーの有効化

ENABLE_POLICYプロシージャを使用して、ポリシーで保護されている表およびスキーマにアクセス制御を施行します。ポリシーは、作成時に自動的に有効化されます。作成または有効化した後は、ポリシーで保護されている表に対する以降のすべてのアクセスに対して、そのポリシーが施行されます。

構文:

PROCEDURE ENABLE_POLICY (policy_name IN VARCHAR2);

表7-5 SA_SYSDBA.ENABLE_POLICYのパラメータ

パラメータ名

説明

policy_name

有効化するポリシーを指定します。

7.4.8 SA_SYSDBA.DROP_POLICYを使用したポリシーの削除

DROP_POLICYプロシージャを使用して、ポリシーおよび対応付けられているユーザー・ラベルとデータ・ラベルすべてをデータベースから削除します。そのポリシーは、システム全体からパージされます。オプションで、そのポリシーにより制御されているすべての表からラベル列を削除することもできます。

構文:

PROCEDURE DROP_POLICY (policy_name IN VARCHAR2,
drop_column  BOOLEAN DEFAULT FALSE);

表7-6 SA_SYSDBA.DROP_POLICYのパラメータ

パラメータ名

説明

policy_name

削除するポリシーを指定します。

drop_column

保護されている表からポリシー列を削除する必要があることを示します(TRUE)。

7.5 SA_COMPONENTSパッケージを使用したラベル・コンポーネントの定義

このパッケージでは、Oracle Label Securityのラベルのコンポーネント定義を管理します。各ポリシーでは、それぞれ異なる方法でコンポーネントを定義します。この項の内容は、次のとおりです。

- SA_COMPONENTS.CREATE_LEVELを使用したレベルの作成

- SA_COMPONENTS.ALTER_LEVELを使用したレベルの変更

- SA_COMPONENTS.DROP_LEVELを使用したレベルの削除

- SA_COMPONENTS.CREATE_COMPARTMENTを使用した区分の作成

- SA_COMPONENTS.ALTER_COMPARTMENTを使用した区分の変更

- SA_COMPONENTS.DROP_COMPARTMENTを使用した区分の削除

- SA_COMPONENTS.CREATE_GROUPを使用したグループの作成

- SA_COMPONENTS.ALTER_GROUPを使用したグループの変更

- SA_COMPONENTS.ALTER_GROUP_PARENTを使用したグループの親の変更

- SA_COMPONENTS.DROP_GROUPを使用したグループの削除

関連項目:

- 第2章「データ・ラベルおよびユーザー・ラベル」

- 設定したラベル定義を表示する方法は、「Oracle Label Securityビューの使用」を参照してください。

7.5.1 オーバーロードされるプロシージャの使用

Oracle Label Securityでは、オーバーロードされるサブプログラム名を使用できます。つまり、様々な数、順序またはデータ型ファミリの仮パラメータを持つ複数の異なるプロシージャに同じ名前を使用できます。

たとえば、SA_COMPONENTS.ALTER_LEVELプロシージャを次のようにコールできます。

PROCEDURE ALTER_LEVEL (policy_name IN VARCHAR2,
level_num       IN INTEGER,
new_short_name  IN VARCHAR2 DEFAULT NULL,
new_long_name   IN VARCHAR2 DEFAULT NULL);

または、次のようにコールすることもできます。

PROCEDURE ALTER_LEVEL (policy_name IN VARCHAR2,
short_name      IN VARCHAR2,

new_long_name IN VARCHAR2);

この2つのプロシージャの処理は同じであるため、同じ名前を与えるのが論理的な方法です。PL/SQLでは、この2つのうちどちらのプロシージャをコールするかが、仮パラメータをチェックすることで判断されます。前述の例では、PL/SQLで使用されるinitializeのバージョンは、プロシージャのコール時にlevel_numパラメータとshort_nameパラメータのどちらを指定したかに応じて異なります。

7.5.2 SA_COMPONENTS.CREATE_LEVELを使用したレベルの作成

CREATE_LEVELプロシージャを使用してレベルを作成し、その短縮名と詳細名を指定します。level_numパラメータに割り当てる数値により、機密性のランキングが決定されます(つまり、番号が小さいほど機密性の低いデータを示します)。

構文:

PROCEDURE CREATE_LEVEL (policy_name IN VARCHAR2,
level_num         IN INTEGER,
short_name        IN VARCHAR2,
long_name         IN VARCHAR2);

表7-7 SA_COMPONENTS.CREATE_LEVELのパラメータ

パラメータ名

説明

policy_name

ポリシーを指定します。

level_num

レベル番号(0から9999)を指定します。

short_name

レベルを表す短縮名(30文字以内)を指定します。

long_name

レベルを表す詳細名(80文字以内)を指定します。

7.5.3 SA_COMPONENTS.ALTER_LEVELを使用したレベルの変更

ALTER_LEVELプロシージャを使用して、レベルに関連付けられている短縮名および詳細名を変更します。

レベル番号は、一度定義すると変更できません。既存のラベルでレベルが使用されている場合、その短縮名は変更できませんが、その詳細名は変更できます。

構文:

PROCEDURE ALTER_LEVEL (policy_name IN VARCHAR2,
level_num       IN INTEGER,
new_short_name  IN VARCHAR2 DEFAULT NULL,
new_long_name   IN VARCHAR2 DEFAULT NULL);

PROCEDURE ALTER_LEVEL (policy_name IN VARCHAR2,
short_name      IN VARCHAR2,
new_long_name   IN VARCHAR2);

表7-8 SA_COMPONENTS.ALTER_LEVELのパラメータ

パラメータ名

説明

policy_name

ポリシーを指定します。

level_num

変更するレベル番号を指定します。

short_name

レベルを表す短縮名(30文字以内)を指定します。

new_short_name

レベルを表す新規の短縮名(30文字以内)を指定します。

new_long_name

レベルを表す新規の詳細名(80文字以内)を指定します。

7.5.4 SA_COMPONENTS.DROP_LEVELを使用したレベルの削除

DROP_LEVELプロシージャを使用してレベルを削除します。既存のラベルに使用されているレベルは削除できません。

構文:

PROCEDURE DROP_LEVEL (policy_name IN VARCHAR2,
level_num   IN INTEGER);

PROCEDURE DROP_LEVEL (policy_name IN VARCHAR2,
short_name  IN VARCHAR2);

表7-9 SA_COMPONENTS.DROP_LEVELのパラメータ

パラメータ名

説明

policy_name

ポリシーを指定します。

level_num

ポリシーの既存レベル番号を指定します。

short_name

レベルを表す短縮名(30文字以内)を指定します。

7.5.5 SA_COMPONENTS.CREATE_COMPARTMENTを使用した区分の作成

CREATE_COMPARTMENTプロシージャを使用して区分を作成し、その短縮名と詳細名を指定します。comp_numパラメータにより、区分がラベルの文字列表現にリスト表示される順序が決定されます。

構文:

PROCEDURE CREATE_COMPARTMENT (policy_name IN VARCHAR2,
comp_num    IN INTEGER,
short_name  IN VARCHAR2,
long_name   IN VARCHAR2);

表7-10 SA_COMPONENTS.CREATE_COMPARTMENTのパラメータ

パラメータ名

説明

policy_name

ポリシーを指定します。

comp_num

区分番号(0から9999)を指定します。

short_name

区分を表す短縮名(30文字以内)を指定します。

long_name

区分を表す詳細名(80文字以内)を指定します。

7.5.6 SA_COMPONENTS.ALTER_COMPARTMENTを使用した区分の変更

ALTER_COMPARTMENTプロシージャを使用して、区分に関連付けられている短縮名および詳細名を変更します。

comp_numパラメータは、一度設定すると変更できません。既存のラベルでcomp_numパラメータが使用されている場合、その短縮名は変更できませんが、その詳細名は変更できます。

構文:

PROCEDURE ALTER_COMPARTMENT (policy_name IN VARCHAR2,
comp_num          IN INTEGER,
new_short_name    IN VARCHAR2 DEFAULT NULL,
new_long_name     IN VARCHAR2 DEFAULT NULL);

PROCEDURE ALTER_COMPARTMENT (policy_name IN VARCHAR2,
short_name        IN VARCHAR2,
new_long_name     IN VARCHAR2);

表7-11 SA_COMPONENTS.ALTER_COMPARTMENTのパラメータ

パラメータ名

説明

policy_name

ポリシーを指定します。

comp_num

変更する区分番号を指定します。

short_name

変更する区分の短縮名(30文字以内)を指定します。

new_short_name

区分の新規の短縮名(30文字以内)を指定します。

new_long_name

区分の新規の詳細名(80文字以内)を指定します。

7.5.7 SA_COMPONENTS.DROP_COMPARTMENTを使用した区分の削除

DROP_COMPARTMENTプロシージャを使用して区分を削除します。既存のラベルで区分が使用されている場合、それは削除できません。

構文:

PROCEDURE DROP_COMPARTMENT (policy_name IN VARCHAR2,
comp_num    IN INTEGER);

PROCEDURE DROP_COMPARTMENT (policy_name IN VARCHAR2,
short_name  IN VARCHAR2);

表7-12 SA_COMPONENTS.DROP_COMPARTMENTのパラメータ

パラメータ名

説明

policy_name

ポリシーを指定します。

comp_num

ポリシーの既存の区分番号を指定します。

short_name

ポリシーの既存の区分の短縮名を指定します。

7.5.8 SA_COMPONENTS.CREATE_GROUPを使用したグループの作成

CREATE_GROUPプロシージャを使用してグループを作成し、その短縮名と詳細名、およびオプションで親グループを指定します。

構文:

PROCEDURE CREATE_GROUP (policy_name IN VARCHAR2,
group_num   IN INTEGER,
short_name  IN VARCHAR2,
long_name   IN VARCHAR2,
parent_name IN VARCHAR2 DEFAULT NULL);

表7-13 SA_COMPONENTS.CREATE_GROUPのパラメータ

パラメータ名

説明

policy_name

ポリシーを指定します。

group_num

グループ番号(0から9999)を指定します。

short_name

グループを表す短縮名(30文字以内)を指定します。

long_name

グループを表す詳細名(80文字以内)を指定します。

parent_name

既存グループの短縮名を親グループとして指定します。NULLを指定すると、このグループはトップレベル・グループになります。

グループ番号は、ラベルの選択時にグループが表示される順序に影響することに注意してください。

関連項目:
グループ

7.5.9 SA_COMPONENTS.ALTER_GROUPを使用したグループの変更

ALTER_GROUPプロシージャを使用して、グループに関連付けられている短縮名および詳細名を変更します。

group_numパラメータは、一度設定すると変更できません。既存のラベルでグループが使用されている場合、その短縮名は変更できませんが、その詳細名は変更できます。

構文:

PROCEDURE ALTER_GROUP (policy_name IN VARCHAR2,
group_num      IN INTEGER,
new_short_name IN VARCHAR2 DEFAULT NULL,
new_long_name  IN VARCHAR2 DEFAULT NULL);

PROCEDURE ALTER_GROUP (policy_name IN VARCHAR2,
short_name     IN VARCHAR2,
new_long_name  IN VARCHAR2);

表7-14 SA_COMPONENTS.ALTER_GROUPのパラメータ

パラメータ名

説明

policy_name

ポリシーを指定します。

group_num

変更する既存のグループ番号を指定します。

short_name

変更する既存のグループの短縮名を指定します。

new_short_name

グループを表す新規の短縮名(30文字以内)を指定します。

new_long_name

グループを表す新規の詳細名(80文字以内)を指定します。

7.5.10 SA_COMPONENTS.ALTER_GROUP_PARENTを使用したグループの親の変更

ALTER_GROUP_PARENTプロシージャを使用して、特定のグループに関連付けられている親グループを変更します。

構文:

PROCEDURE ALTER_GROUP_PARENT (policy_name IN VARCHAR2,
group_num   IN INTEGER,
parent_name IN VARCHAR2);

PROCEDURE ALTER_GROUP_PARENT (policy_name IN VARCHAR2,
group_num   IN INTEGER,
parent_num  IN INTEGER);

PROCEDURE ALTER_GROUP_PARENT (policy_name IN VARCHAR2,
short_name  IN VARCHAR2,
parent_name IN VARCHAR2);

表7-15 SA_COMPONENTS.ALTER_GROUP_PARENTのパラメータ

パラメータ名

説明

policy_name

ポリシーを指定します。

group_num

変更する既存のグループ番号を指定します。

short_name

変更する既存のグループの短縮名を指定します。

parent_num

既存グループの番号を親グループとして指定します。

parent_name

既存グループの短縮名を親グループとして指定します。

7.5.11 SA_COMPONENTS.DROP_GROUPを使用したグループの削除

DROP_GROUPプロシージャを使用してグループを削除します。既存のラベルでグループが使用されている場合、それは削除できません。

構文:

PROCEDURE DROP_GROUP (policy_name IN VARCHAR2,
group_num   IN INTEGER);

PROCEDURE DROP_GROUP (policy_name IN VARCHAR2,
short_name  IN VARCHAR2);

表7-16 SA_COMPONENTS.DROP_GROUPのパラメータ

パラメータ名

説明

policy_name

ポリシーを指定します。

group_num

ポリシーの既存のグループの番号を指定します。

short_name

既存のグループの短縮名を指定します。

7.6 SA_LABEL_ADMINパッケージを使用した有効なラベルの指定

SA_LABEL_ADMINパッケージは、ポリシーで使用されるラベルを管理する管理インタフェースを提供します。そのために、ユーザーはSA_LABEL_ADMINパッケージに対するEXECUTE権限を持ち、policy_DBAロールを付与されている必要があります。

この項の内容は、次のとおりです。

- SA_LABEL_ADMIN.CREATE_LABELを使用した有効なデータ・ラベルの作成

- SA_LABEL_ADMIN.ALTER_LABELを使用したラベルの変更

- SA_LABEL_ADMIN.DROP_LABELを使用したラベルの削除

7.6.1 SA_LABEL_ADMIN.CREATE_LABELを使用した有効なデータ・ラベルの作成

SA_LABEL_ADMIN.CREATE_LABELプロシージャを使用して、有効なデータ・ラベルを作成します。長さ1から8桁のラベル・タグ値を手動で指定する必要があります。

構文:

PROCEDURE CREATE_LABEL (
policy_name IN VARCHAR2,
label_tag   IN INTEGER,
label_value IN VARCHAR2,
data_label  IN BOOLEAN DEFAULT TRUE);

表7-17 SA_LABEL_ADMIN.CREATE_LABELのパラメータ

パラメータ名

説明

policy_name

既存のポリシーの名前を指定します。

label_tag

ラベルのソート順を他のポリシー・ラベルとの相対で表す一意の整数値(0から99999999)を指定します。

label_value

作成するラベルの文字列表現を指定します。

data_label

ラベルを行データのラベル付けに使用できる場合はTRUEです。この値を使用し、ラベルをデータに有効として定義します。

ラベルを指定するときには、レベル、区分およびグループの短縮名を使用します。

有効なラベルを識別するときには、表中のデータのラベル付けに使用できるレベル、区分およびグループに可能なすべての組合せを指定します。

注意:
TO_DATA_LABELプロシージャを使用して新規ラベルを作成すると、10桁のシステム生成ラベル・タグが自動的に生成されます。
ただし、Oracle Label SecurityがOracle Internet Directoryで動作するようにインストールされている場合、ラベルはOracle Internet Directoryでolsadmintoolコマンドを使用して集中管理されるため、動的ラベル生成は許可されません。付録B「Oracle Internet Directoryを使用したLabel Security用コマンドライン・ツール」を参照してください。

したがって、Oracle Label SecurityがOracle Internet Directory対応の場合、TO_DATA_LABELファンクションは使用できず、使用するとエラー・メッセージが生成されます。

関連項目:
ポリシーのラベル列とラベル・タグ

7.6.2 SA_LABEL_ADMIN.ALTER_LABELを使用したラベルの変更

ALTER_LABELプロシージャを使用して、ラベル・タグに関連付けられている文字列ラベルの定義を変更します。ラベル・タグ自体は変更できないことに注意してください。

ラベル・タグに関連付けられている文字列を変更すると、行のデータの機密性もそれに応じて変更されます。たとえば、ラベル・タグ値4001に関連付けられているラベル文字列TS:AをラベルTS:Bに変更すると、そのデータへのアクセス権もそれに応じて変更されます。これは、ラベル・タグ値(4001)に変更がない場合も同じです。この方法で、すべての行を更新せずにデータの機密性を変更できます。

変更するラベルを指定するときには、ラベル・タグまたは文字列値で参照できることを確認してください。

構文:

PROCEDURE ALTER_LABEL (
policy_name       IN VARCHAR2,
label_tag         IN INTEGER,
new_label_value   IN VARCHAR2 DEFAULT NULL,
new_data_label    IN BOOLEAN  DEFAULT NULL);

PROCEDURE ALTER_LABEL (
policy_name       IN VARCHAR2,
label_value       IN VARCHAR2,
new_label_value   IN VARCHAR2 DEFAULT NULL,
new_data_label    IN BOOLEAN  DEFAULT NULL);

表7-18 SA_LABEL_ADMIN.ALTER_LABELのパラメータ

パラメータ名

説明

policy_name

既存のポリシーの名前を指定します。

label_tag

変更するラベルに割り当てられている整数タグを識別します。

label_value

変更するラベルの既存の文字列表現を識別します。

new_label_value

ラベル値の新規の文字列表現を指定します。NULLを指定すると、既存の値は変更されません。

new_data_label

ラベルを行データのラベル付けに使用できる場合はTRUEです。NULLを指定すると、既存の値は変更されません。

7.6.3 SA_LABEL_ADMIN.DROP_LABELを使用したラベルの削除

SA_LABEL_ADMIN.DROP_LABELプロシージャを使用して、指定したポリシーのラベルを削除します。それ以後のラベルへの参照(データ行内、ユーザー・ラベル内またはプログラム・ユニット・ラベル内)では、無効なラベルによるエラーが発生します。

構文:

PROCEDURE DROP_LABEL (
policy_name       IN VARCHAR2,
label_tag         IN INTEGER);

PROCEDURE DROP_LABEL (
policy_name       IN VARCHAR2,
label_value       IN VARCHAR2);

表7-19 SA_LABEL_ADMIN.DROP_LABELのパラメータ

パラメータ名

説明

policy_name

既存のポリシーの名前を指定します。

label_tag

削除するラベルに割り当てられている整数タグを指定します。

label_value

削除するラベルの文字列値を指定します。

注意:

データベース内で使用中のラベルは削除しないでください。

このプロシージャを使用するのは、データを移入する前のラベルの設定中のみです。使用するラベルを意図せずに削除した場合は、ポリシーを無効化し、問題を解決し、ポリシーを再び有効化すればリカバリできます。

8 ユーザーのラベルおよび権限の管理

この章では、ユーザーのラベルおよび権限をOracle Label Securityパッケージを使用して管理する方法を説明します。これらの管理には、Oracle Enterprise Manager Database Controlで提供されるWebインタフェースを使用することもできます。この方法については、第4章「Oracle Label Securityスタート・ガイド」で説明しています。

この章には、次の項が含まれます。

- ユーザーのラベルおよび権限の管理の概要

- SA_USER_ADMINを使用したコンポーネント別のユーザー・ラベルの管理

- SA_USER_ADMINを使用したラベル文字列別のユーザー・ラベルの管理

- SA_USER_ADMIN.SET_USER_PRIVSを使用したユーザー権限の管理

- SA_SESSION.SET_ACCESS_PROFILEを使用したラベルおよび権限の設定

- SA_SESSION.SA_USER_NAMEを使用したユーザー名の戻し

- Oracle Label Securityビューの使用

8.1 ユーザーのラベルおよび権限の管理の概要

ユーザーのラベルと権限を管理するには、SA_USER_ADMINパッケージに対するEXECUTE権限を持ち、policy_DBAロールを付与されている必要があります。

SA_USER_ADMINパッケージには、Oracle Label Securityユーザーのセキュリティ属性を管理するためのファンクションが用意されています。また、ユーザーのレベル、区分およびグループを指定するなど、ユーザー・ラベルをコンポーネント別に管理できるように複数のプロシージャが含まれています。さらに、コンポーネントではなくラベル全体の文字列表現を受け入れるプロシージャもあります。レベル、区分およびグループのパラメータでは、各コンポーネントに対して定義された短縮名が使用されることに注意してください。

すべてのラベルおよび権限情報は、Oracle Label Securityのデータ・ディクショナリ表に格納されます。ユーザーがデータベースに接続すると、Oracle Label Securityのデータ・ディクショナリに格納されている情報に基づいてそのセッション・ラベルが確立されます。

ユーザーを複数のポリシーに基づいて認可できることに注意してください。

8.2 SA_USER_ADMINを使用したコンポーネント別のユーザー・ラベルの管理

次のSA_USER_ADMINプロシージャを使用すると、ユーザー・ラベルをラベル・コンポーネント別に管理できます。

- SA_USER_ADMIN.SET_LEVELS

- SA_USER_ADMIN.SET_COMPARTMENTS

- SA_USER_ADMIN.SET_GROUPS

- SA_USER_ADMIN.ADD_COMPARTMENTS

- SA_USER_ADMIN.ALTER_COMPARTMENTS

- SA_USER_ADMIN.DROP_COMPARTMENTS

- SA_USER_ADMIN.DROP_ALL_COMPARTMENTS

- SA_USER_ADMIN.ADD_GROUPS

- SA_USER_ADMIN.ALTER_GROUPS

- SA_USER_ADMIN.DROP_GROUPS

- SA_USER_ADMIN.DROP_ALL_GROUPS

8.2.1 SA_USER_ADMIN.SET_LEVELS

SET_LEVELSプロシージャでは、ユーザーに最小レベルと最大レベルを割り当てて、そのユーザーのセッション・ラベルと行ラベルのデフォルト値を識別します。

- min_levelがNULLの場合は、ポリシーに定義されている最下位レベルに設定されます。

- def_levelを指定しない場合は、max_levelに設定されます。

- row_levelを指定しない場合は、def_levelに設定されます。

構文:

PROCEDURE SET_LEVELS (policy_name IN VARCHAR2,
user_name        IN VARCHAR2,
max_level        IN VARCHAR2,
min_level        IN VARCHAR2 DEFAULT NULL,
def_level        IN VARCHAR2 DEFAULT NULL,
row_level        IN VARCHAR2 DEFAULT NULL);

表8-1 SA_USER_ADMIN.SET_LEVELSのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

max_level

読取りアクセスと書込みアクセスの最上位レベルです。

min_level

書込みアクセスの最下位レベルです。

def_level

デフォルト・レベル(最小レベル以上、かつ最大レベル以下)を指定します。

row_level

行レベル(最小レベル以上、かつデフォルト・レベル以下)を指定します。

8.2.2 SA_USER_ADMIN.SET_COMPARTMENTS

SET_COMPARTMENTSプロシージャでは、ユーザーに区分を割り当てて、そのユーザーのセッション・ラベルと行ラベルのデフォルト値を識別します。

- write_compsがNULLの場合は、read_compsに設定されます。

- def_compsがNULLの場合は、read_compsに設定されます。

- row_compsがNULLの場合は、書込みアクセスが認可されているdef_comps内のコンポーネントに設定されます。

レベルが設定されているユーザーのみが、認可された区分を確立できます。

書込み区分を指定する場合は、読取り区分のサブセットにする必要があります。(書込み区分は、ユーザーが書込みアクセス権を必要とする区分です。)

構文:

PROCEDURE SET_COMPARTMENTS (policy_name IN VARCHAR2,
user_name     IN VARCHAR2,
read_comps    IN VARCHAR2,
write_comps   IN VARCHAR2 DEFAULT NULL,
def_comps     IN VARCHAR2 DEFAULT NULL,
row_comps     IN VARCHAR2 DEFAULT NULL);

表8-2 SA_USER_ADMIN.SET_COMPARTMENTSのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

read_comps

読取りアクセスが認可されている区分のカンマ区切りのリストです。

write_comps

書込みアクセスが認可されている区分のカンマ区切りのリストです(read_compsのサブセット)。

def_comps

デフォルトの区分を指定します。この区分はread_compsのサブセットであることが必要です。

row_comps

行の区分を指定します。この区分は、write_compsおよびdef_compsのサブセットであることが必要です。

8.2.3 SA_USER_ADMIN.SET_GROUPS

SET_GROUPSプロシージャでは、ユーザーにグループを割り当てて、そのユーザーのセッション・ラベルと行ラベルのデフォルト値を識別します。

- write_groupsがNULLの場合は、read_groupsに設定されます。

- def_groupsがNULLの場合は、read_groupsに設定されます。

- row_groupsがNULLの場合は、書込みアクセスが認可されているdef_groups内のグループに設定されます。

レベルが設定されているユーザーのみが、認可されたグループを確立できます。

構文:

PROCEDURE SET_GROUPS (policy_name IN VARCHAR2,
user_name        IN VARCHAR2,
read_groups      IN VARCHAR2,
write_groups     IN VARCHAR2 DEFAULT NULL,
def_group        IN VARCHAR2 DEFAULT NULL,
row_groups       IN VARCHAR2 DEFAULT NULL);

表8-3 SA_USER_ADMIN.SET_GROUPSのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

read_groups

読取りが認可されているグループのカンマ区切りのリストです。

write_groups

書込みが認可されているグループのカンマ区切りのリストです。このグループはread_groupsのサブセットであることが必要です。

def_groups

デフォルトのグループを指定します。このグループは次のサブセットであることが必要です。

read_groups

row_groups

行グループを指定します。このグループは次のサブセットであることが必要です。

write_groupsおよびdef_groups

8.2.4 SA_USER_ADMIN.ALTER_COMPARTMENTS

ALTER_COMPARTMENTSプロシージャは、リストにある各区分について、書込みアクセス、デフォルトのラベル・インジケータおよび行ラベル・インジケータを変更します。

構文:

PROCEDURE ALTER_COMPARTMENTS (policy_name IN VARCHAR2,
user_name    IN VARCHAR2,
comps        IN VARCHAR2,
access_mode  IN VARCHAR2 DEFAULT NULL,
in_def       IN VARCHAR2 DEFAULT NULL,
in_row       IN VARCHAR2 DEFAULT NULL);

表8-4 SA_USER_ADMIN.ALTER_COMPARTMENTSのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

comps

変更する区分のカンマ区切りのリストです。

access_mode

認可するアクセスのタイプを指定できる文字列値を含む、2つのパブリック変数の一方です。変数名、値および意味は次のとおりです。

SA_UTL.READ_ONLY READ_ONLY: 書込みアクセス権がないことを示します。

SA_UTL.READ_WRITE READ_WRITE: 書込みが認可されることを示します。

access_modeがNULLの場合、区分のaccess_modeは変更されません。

in_def

指定した区分がデフォルト区分内にあることが必要かどうか(Y/N)を指定します。

in_defがNULLの場合、区分のin_defは変更されません。

in_row

指定した区分が行ラベル内にあることが必要かどうか(Y/N)を指定します。

in_rowがNULLの場合、区分のin_rowは変更されません。

in_defがNの場合、in_rowをYにすることはできません。これは、行ラベル区分はセッション・ラベル区分のサブセットにする必要があるためです。

8.2.5 SA_USER_ADMIN.ADD_COMPARTMENTS

このプロシージャでは、ユーザーの認証に区分を追加し、その区分について、読取りとともに書込みも認可するかどうかを指定します。

構文:

PROCEDURE ADD_COMPARTMENTS (policy_name IN VARCHAR2,
user_name      IN VARCHAR2,
comps          IN VARCHAR2,
access_model   IN VARCHAR2 DEFAULT NULL,
in_def         IN VARCHAR2 DEFAULT NULL,
in_row         IN VARCHAR2 DEFAULT NULL);

表8-5 SA_USER_ADMIN.ADD_COMPARTMENTSのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

comps

追加する読取り区分のカンマ区切りのリストです。

access_mode

認可するアクセスのタイプを指定できる文字列値を含む、2つのパブリック変数の一方です。変数名、値および意味は次のとおりです。

SA_UTL.READ_ONLY READ_ONLY: 書込みアクセス権がないことを示します。

SA_UTL.READ_WRITE READ_WRITE: 書込みが認可されることを示します。

access_modeがNULLの場合は、SA_UTL.READ_ONLYに設定されます。

in_def

指定した区分がデフォルト区分内にあることが必要かどうか(Y/N)を指定します。

in_defがNULLの場合はYに設定されます。

in_row

指定した区分が行ラベル内にあることが必要かどうか(Y/N)を指定します。

in_rowがNULLの場合はNに設定されます。

8.2.6 SA_USER_ADMIN.DROP_COMPARTMENTS

DROP_COMPARTMENTSプロシージャでは、指定した区分をユーザーの認証から削除します。

構文:

PROCEDURE DROP_COMPARTMENTS (policy_name IN VARCHAR2,
user_name       IN VARCHAR2,
comps           IN VARCHAR2);

表8-6 SA_USER_ADMIN.DROP_COMPARTMENTSのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

comps

削除する区分のカンマ区切りのリストです。

8.2.7 SA_USER_ADMIN.DROP_ALL_COMPARTMENTS

DROP_ALL_COMPARTMENTSプロシージャでは、すべての区分をユーザーの認証から削除します。

構文:

PROCEDURE DROP_ALL_COMPARTMENTS (policy_name IN VARCHAR2,
user_name IN VARCHAR2);

表8-7 SA_USER_ADMIN.DROP_ALL_COMPARTMENTSのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

8.2.8 SA_USER_ADMIN.ADD_GROUPS

ADD_GROUPSプロシージャでは、ユーザーにグループを追加し、そのグループについて、読取りとともに書込みも認可するかどうかを指定します

構文:

PROCEDURE ADD_GROUPS (policy_name IN VARCHAR2,
user_name         IN VARCHAR2,
groups            IN VARCHAR2,
access_mode       IN VARCHAR2 DEFAULT NULL,
in_def            IN VARCHAR2 DEFAULT NULL,
in_row            IN VARCHAR2 DEFAULT NULL);

表8-8 SA_USER_ADMIN.ADD_GROUPSのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

groups

追加する読取りグループのカンマ区切りのリストです。

access_mode

認可するアクセスのタイプを指定できる文字列値を含む、2つのパブリック変数の一方です。変数名、値および意味は次のとおりです。

SA_UTL.READ_ONLY READ_ONLY: 書込みアクセス権がないことを示します。

SA_UTL.READ_WRITE READ_WRITE: 書込みが認可されることを示します。

access_modeがNULLの場合は、SA_UTL.READ_ONLYに設定されます。

in_def

指定したグループがデフォルト・グループ内にあることが必要かどうか(Y/N)を指定します。

in_defがNULLの場合はYに設定されます。

in_row

指定したグループが行ラベル内にあることが必要かどうか(Y/N)を指定します。

in_rowがNULLの場合はNに設定されます。

8.2.9 SA_USER_ADMIN.ALTER_GROUPS

ALTER_GROUPSプロシージャは、リストにあるグループごとに、書込みアクセス、デフォルトのラベル・インジケータおよび行ラベル・インジケータを変更します。

構文:

PROCEDURE ALTER_GROUPS (policy_name IN VARCHAR2,
user_name        IN VARCHAR2,
groups           IN VARCHAR2,
access_mode      IN VARCHAR2 DEFAULT NULL,
in_def           IN VARCHAR2 DEFAULT NULL,
in_row           IN VARCHAR2 DEFAULT NULL);

表8-9 SA_USER_ADMIN.ALTER_GROUPSのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

groups

変更するグループのカンマ区切りのリストです。

access_mode

認可するアクセスのタイプを指定できる文字列値を含む、2つのパブリック変数です。変数名、値および意味は次のとおりです。

SA_UTL.READ_ONLY READ_ONLY: 書込みアクセス権がないことを示します。

SA_UTL.READ_WRITE READ_WRITE: 書込みが認可されることを示します。

access_modeがNULLの場合、グループのaccess_modeは変更されません。

in_def

指定したグループがデフォルト・グループ内にあることが必要かどうか(Y/N)を指定します。

in_defがNULLの場合、グループのin_defは変更されません。

in_row

指定したグループが行ラベル内にあることが必要かどうか(Y/N)を指定します。

in_rowがNULLの場合、グループのin_rowは変更されません。

in_defがNの場合、in_rowをYにすることはできません。これは、行ラベル・グループはセッション・ラベル・グループのサブセットにする必要があるためです。

8.2.10 SA_USER_ADMIN.DROP_GROUPS

DROP_GROUPSプロシージャでは、指定したグループをユーザーの認証から削除します。

構文:

PROCEDURE DROP_GROUPS (policy_name IN VARCHAR2,
user_name   IN VARCHAR2,
groups      IN VARCHAR2);

表8-10 SA_USER_ADMIN.DROP_GROUPSのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

groups

削除するグループのカンマ区切りのリストです。

8.2.11 SA_USER_ADMIN.DROP_ALL_GROUPS

DROP_ALL_GROUPSプロシージャでは、すべてのグループをユーザーの認証から削除します。

構文:

PROCEDURE DROP_ALL_GROUPS (policy_name IN VARCHAR2,
user_name  IN VARCHAR2);

表8-11 SA_USER_ADMIN.DROP_ALL_GROUPSのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

8.3 SA_USER_ADMINを使用したラベル文字列別のユーザー・ラベルの管理

次のSA_USER_ADMINプロシージャを使用すると、ラベル文字列全体を指定してユーザー・ラベルを管理できます。

- SA_USER_ADMIN.SET_USER_LABELS

- SA_USER_ADMIN.SET_DEFAULT_LABEL

- SA_USER_ADMIN.SET_ROW_LABEL

- SA_USER_ADMIN.SET_DEFAULT_LABEL

8.3.1 SA_USER_ADMIN.SET_USER_LABELS

SET_USER_LABELSプロシージャでは、個々のコンポーネントではなくラベル・セットを使用して、ユーザーのレベル、区分およびグループを設定します。

構文:

PROCEDURE SET_USER_LABELS (
policy_name      IN VARCHAR2,
user_name        IN VARCHAR2,
max_read_label   IN VARCHAR2,
max_write_label  IN VARCHAR2 DEFAULT NULL,
min_write_label  IN VARCHAR2 DEFAULT NULL,
def_label        IN VARCHAR2 DEFAULT NULL,
row_label        IN VARCHAR2 DEFAULT NULL);

表8-12 SA_USER_ADMIN.SET_USER_LABELSのパラメータ

パラメータ

意味

max_read_label

ユーザーが認可される最大読取りラベルの初期化に使用するラベル文字列を指定します。この文字列は、ユーザーの最大レベル、読取りアクセスが認可される区分およびグループで構成されます。

max_write_label

ユーザーが認可される最大書込みラベルの初期化に使用するラベル文字列を指定します。この文字列は、ユーザーの最大レベル、書込みアクセスが認可される区分およびグループで構成されます。max_write_labelを指定しない場合は、max_read_labelに設定されます。

min_write_label

ユーザーが認可される最小書込みラベルの初期化に使用するラベル文字列を指定します。この文字列にはレベルのみが含まれ、区分やグループは含まれません。min_write_labelを指定しない場合は、ポリシーに定義されている最下位レベルに設定され、区分やグループは含まれません。

def_label

レベル、区分、グループなど、ユーザーのセッション・ラベルの初期化に使用するラベル文字列(max_read_labelのサブセット)を指定します。default_labelを指定しない場合は、max_read_labelに設定されます。

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

row_label

プログラムの行ラベルの初期化に使用するラベル文字列を指定します。この文字列には、レベル、区分およびグループ、つまりmax_write_labelおよびdef_labelのサブセットが含まれます。row_labelを指定しない場合は、def_labelに設定され、書込みアクセスが認可される区分とグループのみが含まれます。

関連項目:
SET_PROG_PRIVSを使用したプログラム・ユニット権限の管理

8.3.2 SA_USER_ADMIN.SET_DEFAULT_LABEL

SET_DEFAULT_LABELプロシージャでは、ユーザーの初期セッション・ラベルを指定のラベルに設定します。

構文:

PROCEDURE SET_DEFAULT_LABELS (
policy_name  IN VARCHAR2,
user_name    IN VARCHAR2,
def_label    IN VARCHAR2);

表8-13 SA_USER_ADMIN.SET_DEFAULT_LABELのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

def_label

ユーザーのデフォルト・ラベルの初期化に使用するラベル文字列を指定します。このラベルには、読取りアクセスが認可されている区分とグループであれば、どれでも含めることができます。

行ラベルが新規の書込みラベルで支配されていれば、ユーザーはセッション・ラベルを次のように設定できます。

- 各自の最大ラベル以下で、かつ各自の最小ラベル以上のレベルに設定する。

- 認可された区分リストにある区分を含むように設定する。

- 認可されたグループ・リストにあるグループを含むように設定する。(認可グループのサブグループは、認可リストに暗黙的に含まれます。)

行ラベルは、セッション・ラベルのリセットによって得られる新規の書込みラベルで支配される必要があります。この条件に該当しない場合は、SET_DEFAULT_LABELプロシージャが失敗します。

たとえば、現行の行ラベルがS:A,Bで、両方の区分への書込みアクセス権を持っているとします。新規のデフォルト・ラベルをC:A,Bに設定する操作を試みると、SET_LABELプロシージャは失敗します。これは、新規の書込みラベルはC:A,Bとなり、現行の行ラベルを支配しないためです。

この場合にセッション・ラベルを正常にリセットするには、最初に行ラベルをリセット後のセッション・ラベルで支配されるように下位の値にする必要があります。

関連項目:
SA_SESSIONを使用したセッション・ラベルと行ラベルの変更
セッション・ラベルおよびインバース・グループ

8.3.3 SA_USER_ADMIN.SET_ROW_LABEL

SET_ROW_LABELプロシージャでは、ユーザーの初期の行ラベルを指定のラベルに設定します。

構文:

PROCEDURE SET_ROW_LABEL (
policy_name   IN VARCHAR2,
user_name     IN VARCHAR2,
row_label     IN VARCHAR2);

表8-14 SA_USER_ADMIN.SET_ROW_LABELのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

row_label

ユーザーの行ラベルの初期化に使用するラベル文字列を指定します。ラベルには、書込みアクセスが認可されるデフォルト・ラベルからの区分とグループのみを含める必要があります。

ユーザーは、独自に行ラベルを設定できますが、含めることができるのは次の要素のみです。

- セッション・ラベルのレベル以下で、かつ、ユーザーの最小レベル以上のレベル。

- ユーザーが書込みアクセス権を持つように認可されているセッション・ラベルからの、区分とグループのサブセット。

ユーザーが行ラベルに無効な値の設定を試みると、操作は許可されず、その行ラベル値は変更されません。

関連項目:
SA_SESSION.SET_ROW_LABELを使用した行ラベルの変更

8.3.4 SA_USER_ADMIN.DROP_USER_ACCESS

DROP_USER_ACCESSプロシージャでは、指定したユーザーからOracle Label Securityのすべての認可と権限を削除します。このプロシージャは、コマンドラインから発行する必要があります。

構文:

PROCEDURE DROP_USER_ACCESS (
policy_name      IN VARCHAR2,
user_name        IN VARCHAR2);

表8-15 SA_USER_ADMIN.DROP_USER_ACCESSのパラメータ

パラメータ

意味

policy_name

ポリシーを指定します。

user_name

ユーザー名を指定します。

8.4 SA_USER_ADMIN.SET_USER_PRIVSを使用したユーザー権限の管理

SET_USER_PRIVSプロシージャでは、ユーザーに対してポリシー固有の権限を設定します。これらの権限は、現行セッションでは有効になりません。ユーザーの次回のログイン時に有効になります。既存の権限は、すべて新しい権限セットで置き換えられます。権限パラメータの値がNULLの場合は、そのユーザーのポリシーに対する権限が削除されます。

ユーザーにポリシー権限を割り当てるには、SA_USER_ADMINパッケージに対するEXECUTE権限を持ち、policy_DBAロールを付与されている必要があります。

構文:

PROCEDURE SET_USER_PRIVS (
policy_name     IN VARCHAR2,
user_name       IN VARCHAR2,
privileges      IN VARCHAR2);

表8-16 SA_USER_ADMIN.SET_USER_PRIVSのパラメータ

パラメータ

意味

policy_name

既存のポリシーの名前を指定します。

user_name

権限を付与するユーザーの名前です。

privileges

ポリシー固有の権限をカンマで区切って文字列として指定します。

関連項目:
SET_PROG_PRIVSを使用したプログラム・ユニット権限の管理

8.5 SA_SESSION.SET_ACCESS_PROFILEを使用したラベルおよび権限の設定

SET_ACCESS_PROFILEプロシージャでは、データベース・セッションのOracle Label Securityでの認可と権限を、指定したユーザーの認証と権限に設定します。(元のユーザーは引き続きPROFILE_ACCESS権限を持つことに注意してください。)

SA_SESSION.SET_ACCESS_PROFILEプロシージャを実行するユーザーは、PROFILE_ACCESS権限を持つ必要があります。ログインしたデータベース・ユーザー(OracleユーザーID)は変わらないことに注意してください。そのユーザーには、指定のユーザーの認証と権限のみが想定されます。これに対して、Oracle Label Securityのユーザー名は変更されます。

この管理プロシージャは、次のように様々なタスクに役立ちます。

- SET_ACCESS_PROFILEを使用すると、管理者は特定ユーザーの認証と権限の設定結果を確認できます。

- アプリケーションがラベル付きデータにアクセスするには、プロキシ・アカウントをアプリケーション・ユーザーとして接続(その識別情報を想定)させる必要があります。プロキシ・アカウントは、SET_ACCESS_PROFILE権限を使用して、アプリケーション・ユーザーのかわりに操作できます。

構文:

PROCEDURE SET_ACCESS_PROFILE (policy_name IN VARCHAR2
user_name   IN VARCHAR2);

表8-17 SA_SESSION.SET_ACCESS_PROFILEのパラメータ

パラメータ

意味

policy_name

既存のポリシーの名前

user_name

認可と権限を想定する必要があるユーザーの名前

8.6 SA_SESSION.SA_USER_NAMEを使用したユーザー名の戻し

SA_USER_NAMEファンクションは、SET_ACCESS_PROFILEプロシージャで設定された(またはログイン時に設定された)現行のOracle Label Securityユーザーの名前を戻します。これにより、現行ユーザーの識別情報をOracleログイン名ではなくOracle Label Securityに関連付けて判断できます。

構文:

FUNCTION SA_USER_NAME (policy_name IN VARCHAR2)
RETURN VARCHAR2;

表8-18 SA_SESSION.SA_USER_NAMEのパラメータ

パラメータ

意味

policy_name

既存のポリシーの名前

8.7 Oracle Label Securityビューの使用

この項では、管理者によるユーザー認証と権限の割当ての表示に使用できるビューについて説明します。

- すべてのユーザーのセキュリティ属性を表示するビュー: DBA_SA_USERS

- ユーザー認証をコンポーネント別に表示するビュー

8.7.1 すべてのユーザーのセキュリティ属性を表示するビュー: DBA_SA_USERS

DBA_SA_USERSビューには権限、レベル、区分およびグループに割り当てられた値がすべて表示されます。これらの値はSA_USER_ADMINコマンドライン・インタフェースを通じて入力したものです。値は次のとおりです。

USER_PRIVILEGES

MAX_READ_LABEL

MAX_WRITE_LABEL

MIN_WRITE_LABEL

DEFAULT_READ_LABEL

DEFAULT_WRITE_LABEL

DEFAULT_ROW_LABEL

USER_LABELS

MAX_READ_LABEL

MAX_WRITE_LABEL

MIN_WRITE_LABEL

DEFAULT_READ_LABEL

DEFAULT_WRITE_LABEL

DEFAULT_ROW_LABEL

この情報はデータ・ディクショナリ表に格納され、ユーザーのログイン時にセッション・ラベルと行ラベルの設定に使用されます。

注意:
DBA_SA_USERSのUSER_LABELSフィールドは下位互換性のために残され、次のリリースでは削除されます。

8.7.2 ユーザー認証をコンポーネント別に表示するビュー

次のビューには、ラベルの各コンポーネントが個別に表示されます。

表8-19 Oracle Label Securityビュー

ビュー

内容

DBA_SA_USER_LEVELS

ユーザーに割り当てられているレベル、つまり、最小レベル、最大レベル、デフォルト・レベルおよび行ラベルのレベルが表示されます。

DBA_SA_USER_COMPARTMENTS

ユーザーに割り当てられている区分が表示されます。

DBA_SA_USER_GROUPS

ユーザーに割り当てられているグループが表示されます。

9ポリシー施行オプションとラベル付けファンクションの実装

この章では、Oracle Label Securityのポリシーの施行をカスタマイズする方法と、ラベル付けファンクションを実装する方法について説明します。この章の内容は、次のとおりです。

- ポリシー・オプションの選択

- ラベル付けファンクションの使用

- ポリシー・オプションとラベル付けファンクションを使用したラベル付きデータの挿入

- ポリシー・オプションとラベル付けファンクションを使用したラベル付きデータの更新

- ポリシー・オプションとラベル付けファンクションを使用したラベル付きデータの削除

- Oracle Label SecurityのポリシーとSQL述語の使用

9.1 ポリシー・オプションの選択

この項では、ポリシー・オプションの概要と使用方法について説明します。

- ポリシー施行オプションの概要

- HIDEポリシー列オプション

- ラベル管理施行オプション

- アクセス制御施行オプション

- オーバーライド施行オプション

- ポリシー施行オプションの使用時のガイドライン

- Oracle Label Securityのポリシー施行からの除外

9.1.1 ポリシー施行オプションの概要

管理者は、Oracle Label Securityで使用可能なすべての施行制御オプションから、特定のアプリケーションのニーズを満たすオプションを選択する必要があります。これは、公開、変更または誤用に対するデータの機密性レベルを識別することの他、この種のデータへのアクセスや変更が必要なユーザー、またはその権限を持つユーザーを識別することを意味します。ポリシー施行オプションを使用すると、管理者はユーザーがデータまたはラベルの読取りや書込みができるかどうかを詳細にチューニングできます。

これらのオプションは、次のように3つのレベルで機能します。

表9-1 ポリシー施行オプションが有効な場合

オプションの設定レベル

このレベルで設定されたオプションがユーザー操作に影響する場合

ポリシー・レベル

... ポリシーが表またはスキーマに適用されている場合のみ

スキーマ・レベル

... ユーザーがこのスキーマで操作する場合

表レベル

... ユーザーがこの表で操作する場合

表またはスキーマにポリシーを適用する場合は、その表またはスキーマの使用を制限する施行オプションを指定できます。適用時に施行オプションを指定しなければ、そのポリシーの作成時に指定したデフォルトの施行オプションが自動的に使用されます。

関連項目:

- SA_POLICY_ADMIN.APPLY_TABLE_POLICYを使用したポリシーの適用

- SA_SYSDBA.CREATE_POLICYを使用したポリシーの作成

これらのオプションにより、ポリシーの施行はREADアクセス、WRITEアクセスおよびラベル変更に関するセキュリティ要件にあわせてカスタマイズされます。また、ラベル列を表示するか非表示にするかも指定できます。保護されている表については、必要なポリシー・オプションのみを指定して一部またはすべてを施行するように選択できます。

オプションで、各表にラベル付けファンクションを割り当てることができます。これにより、その表で挿入または更新される行のラベルが決まります。オプションで、表のSQL述語を指定して、ラベルに基づいてユーザーがアクセス可能な行を制御できます。

関連項目:

- ラベル付けファンクションの使用

- Oracle Label SecurityのポリシーとSQL述語の使用

Oracle Label Securityのポリシー施行オプションを適用すると、表示、挿入、更新または削除のためにアクセスできる行が制御されます。

表9-2「ポリシー施行オプション」に、次の3つのカテゴリのオプションを示します。

- ラベル管理オプション。挿入または更新される行に書き込まれるデータ・ラベルが、そのラベルに対して設定されているポリシーに違反しないことを保証します。

- アクセス制御オプション。SELECT、UPDATE、INSERTまたはDELETE操作で、ラベルが設定済ポリシーを満たしている行のみにアクセスできることを保証します。

- オーバーライド・オプション。他のすべての施行オプションを一時停止または適用できます。

表9-2 ポリシー施行オプション

施行のタイプ

オプション

説明

ラベル管理施行オプション

LABEL_DEFAULT

INSERT時にラベルを明示的に指定しないかぎり、セッションのデフォルトの行ラベル値が使用されます。

LABEL_UPDATE

ポリシーの施行は、行に連結されたラベルの値を設定または変更するUPDATE操作に適用されます。WRITEUP、WRITEDOWNおよびWRITEACROSS権限は、LABEL_UPDATE操作がアクティブな場合にのみ施行されます。

CHECK_CONTROL

新規の行ラベルが読取りアクセス可能になるように、INSERTおよびUPDATE文にREAD_CONTROLポリシーの施行を適用します。

アクセス制御施行オプション

READ_CONTROL

すべての問合せにポリシーの施行を適用します。SELECT、UPDATEおよびDELETE操作のためにアクセスできるのは、認可された行のみになります。

WRITE_CONTROL

行のデータをINSERT、UPDATEおよびDELETEできるかどうかを決定します。このオプションがアクティブな場合は、INSERT_CONTROL、UPDATE_CONTROLおよびDELETE_CONTROLが施行されます。

INSERT_CONTROL

図3-8「書込みアクセス権のラベル評価プロセス」に示した書込みアクセスのアルゴリズムに従って、INSERT操作にポリシーの施行を適用します。

DELETE_CONTROL

図3-8「書込みアクセス権のラベル評価プロセス」に示した書込みアクセスのアルゴリズムに従って、DELETE操作にポリシーの施行を適用します。

UPDATE_CONTROL

図3-8「書込みアクセス権のラベル評価プロセス」に示した書込みアクセスのアルゴリズムに従って、行内のデータ列に対するUPDATE操作にポリシーの施行を適用します。

オーバーライド施行オプション

ALL_CONTROL

すべての施行オプションを適用します。

NO_CONTROL

施行オプションを適用しません。ただし、ラベル付けファンクションやSQL述語は適用できます。

Oracle Label Securityが表に適用される場合でも、一部のDML操作は適用されるポリシーの対象ではない場合があることに注意してください。管理者が設定するポリシー強制オプションにより、SQL処理動作と、保護された表に対する問合せに対して認可済ユーザーが実際に参照できる内容の両方が決まります。特に注記がないかぎり、この章ではALL_CONTROLがアクティブであり、すべての強制オプションが有効であることを想定します。ユーザーが認可されていない操作を実行しようとすると、エラー・メッセージが表示され、SQL文が失敗します。

関連項目:
INVERSE_GROUP施行オプションを指定したインバース・グループの実装

Oracle Label Securityのポリシーの設計と実装で有効に使用するには、これらのポリシー施行オプションの相互関係と各オプションで制御されるSQL文を理解しておくことが重要です。

表9-2「ポリシー施行オプション」に、これらの相互関係を示します。

表9-3 ポリシー施行オプションの制御対象

ポリシーで指定するオプション

制御されるSQL操作

使用する条件とその効果

READ_CONTROL

SELECT、UPDATEおよびDELETE

認可された行(*)にのみアクセスできます。

WRITE_CONTROL

INSERT、UPDATEおよびDELETE

(a) 認可された行(**)にのみアクセスできます。

(b) LABEL_UPDATEがアクティブでないかぎり、データ・ラベルは書込み可能です。

次の3つのオプションにWRITE_CONTROLが必要

INSERT_CONTROL

INSERT

UPDATE_CONTROL

UPDATE

DELETE_CONTROL

DELETE

CHECK_CONTROL

新規の行ラベルが読取りアクセス可能になるように、INSERTおよびUPDATE文にREAD_CONTROLポリシーの施行を適用します。

アクセス制御施行オプション

すべての問合せにポリシーの施行を適用します。操作のためにアクセスできるのは、認可された行のみになります。

行のデータを操作できるかどうかを決定します。このオプションがアクティブな場合に施行されます。

INSERT_CONTROL

図3-8「書込みアクセス権のラベル評価プロセス」に示した書込みアクセスのアルゴリズムに従って、INSERT操作にポリシーの施行を適用します。

DELETE_CONTROL

図3-8「書込みアクセス権のラベル評価プロセス」に示した書込みアクセスのアルゴリズムに従って、DELETE操作にポリシーの施行を適用します。

UPDATE_CONTROL

図3-8「書込みアクセス権のラベル評価プロセス」に示した書込みアクセスのアルゴリズムに従って、行内のデータ列に対するUPDATE操作にポリシーの施行を適用します。

オーバーライド施行オプション

ALL_CONTROL

すべての施行オプションを適用します。

NO_CONTROL

施行オプションを適用しません。ただし、ラベル付けファンクションやSQL述語は適用できます。

(*) 次の3つの条件がすべて満たされている場合は、行に対するREADアクセスが認可されます(ユーザーの最小レベル) < = (データ行のレベル) < = (セッション・レベル)であること。(いずれかのデータ・グループ)が(いずれかのユーザー・グループまたは子グループ)の子であること。(すべてのデータ区分)が(ユーザーのデータ区分)にも含まれていること。図3-7「読取りアクセス権のラベル評価プロセス」を参照してください。

(**) 次の3つの条件がすべて満たされている場合は、行に対するREADアクセスが認可されます(ユーザーの最小レベル) < = (データ行のレベル) < = (セッション・レベル)であること。(いずれかのデータ・グループ)が(いずれかのユーザー・グループまたは子グループ)の子であること。(すべてのデータ区分)が(ユーザーのデータ区分)にも含まれていること。図3-7「読取りアクセス権のラベル評価プロセス」を参照してください。

9.1.2 HIDEポリシー列オプション

HIDEポリシー構成オプションを指定できるのは、表にOracle Label Securityのポリシーを初めて適用するとき(つまり、表にポリシー列を追加するとき)です。このようにすると、ポリシーのラベルを含む列は表示されません。

関連項目:
SA_POLICY_ADMIN.APPLY_TABLE_POLICYを使用したポリシーの適用

ポリシーを適用した後は、DROP_COLUMNパラメータをTRUEに設定してそのポリシーを削除しないかぎり、列の非表示(または表示)ステータスは変更できません。その後は、ポリシーを新規の非表示ステータスで再適用できます。

関連項目:
SA_POLICY_ADMIN.REMOVE_TABLE_POLICYを使用したポリシーの削除

INSERT文の場合、非表示のラベル列の値は、全列挿入には不要です。

SELECT文では、非表示のラベル列の値が自動的に戻されることはありません。この種の値は明示的に取得する必要があります。

表に対するDESCRIBEでは、ラベル列を表示できる場合と表示できない場合があります。管理者がHIDEオプションを設定すると、ラベル列は表示されなくなります。ポリシーにHIDEが指定されていない場合は、SELECTへの応答時にラベル列が表示されます。

関連項目:
ポリシーのラベル列が非表示に設定されている場合の表からのすべての列の取出し

9.1.3 ラベル管理施行オプション

行の挿入または更新時に書き込まれるデータ・ラベルは、3つのラベル施行オプションにより制御されます。表またはスキーマに適用されるポリシーでこれらのオプションが指定されていると、各オプションはこの項で説明される場合に適用されます。

行を挿入するユーザーは、各自のラベル認可の範囲内で任意のデータ・ラベルを指定できます。ユーザーが書き込む行のラベルを指定しない場合、LABEL_DEFAULTにより指定されます。更新はLABEL_UPDATEにより制限できます。ラベル付けファンクションを使用する挿入または更新では、データ・ラベルがユーザーの認証の範囲外に割り当てられるのを防止するため、CHECK-CONTROLが必要な場合があります。この種のラベルがあると、書き込んだ行にアクセスするのを防ぎ、データを不適切に使用可能にしてしまう可能性があります。

これらのオプションは、表に対して有効になっているラベル付けファンクションによりオーバーライドされます。ファンクション名は、表にポリシーを適用するコールで指定できます。管理者がポリシーの適用時にラベル付けファンクションに名前を指定しても、そのポリシーを無効化または削除すると、ファンクションは適用されなくなります。

関連項目:

- 表またはスキーマに対するポリシーの適用(または削除)については、第10章「表およびスキーマへのポリシーの適用」を参照してください。

- 「SA_SYSDBA.DISABLE_POLICYを使用したポリシーの無効化」

9.1.3.1 LABEL_DEFAULT: セッションのデフォルト行ラベルの使用

更新後の行には元のラベルが使用されるため、ラベル値を指定せずに行を更新できます。ただし、ラベル付けファンクションが有効であるか、表にLABEL_DEFAULTが適用されていないかぎり、新規の行を挿入するには有効なラベルを指定する必要があります。LABEL_DEFAULTが設定されている場合は、ユーザーのセッションのデフォルト行ラベルが新規行ラベルとして使用されます。

LABEL_DEFAULTもラベル付けファンクションも有効でない場合に行のINSERTを試みると、エラーが発生します。

ラベル付けファンクションが表に対して有効になっている場合は、LABEL_DEFAULTオプションがオーバーライドされることに注意してください。

9.1.3.2 LABEL_UPDATE: データ・ラベルの変更

行を更新するユーザーは、通常、そのラベルを各自が認可されているラベル範囲内で変更できます。ただし、LABEL_UPDATEが適用されている場合にラベルを変更するには、WRITEUP、WRITEDOWNおよびWRITEACROSSのうち1つ以上の権限が必要です。

LABEL_UPDATEオプションでは、ラベルに影響する更新操作でのみ呼び出されるOracle AFTER行トリガーを使用します。ラベル付けファンクションが表に対して有効になっている場合は、LABEL_UPDATEオプションがオーバーライドされることに注意してください。

関連項目:
特殊な行ラベル権限

9.1.3.3 CHECK_CONTROL: データ・ラベルのチェック

挿入または更新される行がラベル付けファンクションからラベルを取得する場合、そのラベルはユーザーの認証の範囲外になり、以降、そのユーザーがアクセスできなくなる可能性があります。

CHECK_CONTROLが設定されている場合は、新規ラベルにREAD_CONTROLが適用され、このユーザーが操作後も挿入または更新された行の読取りを認可されることが保証されます。設定されていない場合は、INSERTまたはUPDATE操作が取り消され、無効になります。

つまり、行に施行されているポリシーにオプションとしてCHECK_CONTROLが含まれている場合、その行を変更するユーザーは操作後も引き続き行にアクセスできる必要があります。CHECK_CONTROLがあると、ユーザーまたはラベル付けファンクションは、アクセスを禁止されているレベル、グループまたは区分を含めるために行ラベルを変更できなくなります。

CHECK_CONTROLにより、表に対して有効になっているラベル付けファンクションがオーバーライドされることに注意してください。

9.1.4 アクセス制御施行オプション

アクセス制御オプションは、SELECT、UPDATE、INSERTまたはDELETE操作のためにアクセスできる行を、ラベルが設定済のポリシーを満たしている行のみに制限します。

- READ_CONTROL: データの読取り

- WRITE_CONTROL: データの書込み

- INSERT_CONTROL、UPDATE_CONTROLおよびDELETE_CONTROL

9.1.4.1 READ_CONTROL: データの読取り

READ_CONTROLでは、図3-7「読取りアクセス権のラベル評価プロセス」のように、Oracleの仮想プライベート・データベース(VPD)テクノロジを使用して、読取りアクセス調整アルゴリズムが施行されます。

READ_CONTROLにより、SELECT、UPDATEおよびDELETE操作のためにセッションでアクセスできるレコードのセットが制限されます。READ_CONTROLがアクティブでない場合は、ポリシーで保護されている表の行にもすべてのユーザーがアクセスできます。

9.1.4.2 WRITE_CONTROL: データの書込み

WRITE_CONTROLでは、図3-8「書込みアクセス権のラベル評価プロセス」のように、OracleのAFTER行トリガーを使用して、書込みアクセス調整アルゴリズムが施行されます。WRITE_CONTROLオプションを指定してOracle Label Securityのポリシーを表に適用すると、トリガーが生成されてアルゴリズムが施行されます。

注意:
WRITE_CONTROLの保護の実装は、どの書込み操作の場合も同じですが、すべての書込みオプションを全体に適用する必要はありません。WRITE_CONTROLのかわりに対応するポリシー施行オプション(INSERT_CONTROL、UPDATE_CONTROLおよびDELETE_CONTROL)を使用すると、WRITE_CONTROLをINSERT、UPDATEおよびDELETE操作に選択的に適用できます。

WRITE_CONTROLをオンにしても、LABEL_UPDATEを指定しなければ、ユーザーはデータとラベルの両方を変更できます。行ラベルの更新を制御する必要がある場合は、ポリシーの作成時にWRITE_CONTROLのみでなくLABEL_UPDATEオプションも指定してください。

9.1.4.3 INSERT_CONTROL、UPDATE_CONTROLおよびDELETE_CONTROL

この3つのオプションでは、図3-8「書込みアクセス権のラベル評価プロセス」に示した書込みアクセスのアルゴリズムに従って、行内のデータ列に対する対応する操作にポリシーの施行を適用します。

WRITE_CONTROLを指定すると、すべてのINSERT、UPDATEおよびDELETE操作が制限されます。ただし、次の例外があります。

- INSERT_CONTROLを指定すると、INSERTは制限されますが、UPDATEやDELETEは制限されません。

- UPDATE_CONTROLを指定すると、UPDATEは制限されますが、INSERTやDELETEは制限されません。

- DELETE_CONTROLを指定すると、DELETEは制限されますが、INSERTやUPDATEは制限されません。

関連項目:
INSERTについては、「ポリシー・オプションとラベル付けファンクションを使用したラベル付きデータの挿入」を参照してください。
UPDATEについては、「ポリシー・オプションとラベル付けファンクションを使用したラベル付きデータの更新」を参照してください。

DELETEについては、「ポリシー・オプションとラベル付けファンクションを使用したラベル付きデータの削除」を参照してください。

9.1.5 オーバーライド施行オプション

ALL_CONTROLではすべてのラベル管理およびアクセス制御施行オプションが適用されますが、NO_CONTROLではどちらも適用されません。どちらの場合も、ラベル付けファンクションとSQL述語は適用できます。ALL_CONTROLオプションはコマンドラインでのみ使用できることに注意してください。

NO_CONTROLを指定してポリシーを適用すると、表にポリシーのラベル列が追加されますが、ラベル値はNULLになります。アクセス制御は表には機能しないため、必要に応じてラベルの入力に進むことができます。その後、必要なポリシー施行オプションを設定できます。

NO_CONTROLオプションは、データに適切にラベル付けするラベル付けファンクションが有効になっているが、ユーザー全員がすべてのデータにアクセスできるようにする必要がある場合に役立ちます。

9.1.6 ポリシー施行オプションの使用時のガイドライン

スキーマまたは表に対するポリシーの施行をカスタマイズするには、Oracle Enterprise Managerを使用する方法(第4章および第7章を参照)とSA_POLICY_ADMINパッケージを使用する方法(第8章を参照)があります。

関連項目:

- 「認可レベル」

- 「Oracle Enterprise Manager」

- 第10章「表およびスキーマへのポリシーの適用」

この項では、サポートされるキーワードについて説明します。

ポリシーの作成時にデフォルト・オプションの文字列を指定すると、スキーマまたは表オプションが指定されていないポリシーの適用時に使用できることに注意してください。

表にポリシーを適用してから、その表を含むスキーマに適用しても、表に対するオプションはスキーマ・ポリシーの影響を受けません。表に最初に適用されたポリシーのオプションが引き続き有効となります。

一般に、管理者はLABEL_DEFAULTポリシー・オプションを使用します。これにより、ユーザーによって書き込まれたデータは、そのユーザーの行ラベルでラベル付けされます。または、ラベル付けファンクションを使用してデータにラベル付けできます。この2つの選択肢のいずれも使用されていない場合、ラベルをすべてのINSERT文で指定する必要があります。(更新では行の元のラベルが保持されます。)

次の表に、Oracle Label Securityのポリシーを実装する場合に役立つポリシー施行オプションの組合せを示します。この表のように、通常はREAD_CONTROLおよびWRITE_CONTROLを施行し、複数の可能な組合せの中から選択して書込み時のデータ・ラベルを設定します。

表9-4 ポリシー施行オプションの組合せ案

オプション

アクセス施行

READ_CONTROL、WRITE_CONTROL、LABEL_DEFAULT

セッション・ラベルに基づく読取りアクセスと書込みアクセス。デフォルト・ラベルを指定すると、ユーザーはデータとラベルの両方を挿入/更新できます。

READ_CONTROL、WRITE_CONTROL、ラベル付けファンクション

セッション・ラベルに基づく読取りアクセスと書込みアクセス。ユーザーは、行データのみ設定/変更できます。すべての行ラベルは、ラベル付けファンクションによって明示的に設定されます。

新規ラベル(挿入または更新時)を参照可能なラベルの範囲に限定するには、CHECK_CONTROLを追加します。

READ_CONTROL、WRITE_CONTROL、LABEL_UPDATE

セッション・ラベルに基づく読取りアクセスと書込みアクセス。ただし、ユーザーは権限が付与されていないラベルは変更できません。

新規ラベル(挿入または更新時)を参照可能な範囲に限定するには、CHECK_CONTROLを追加します。

9.1.7 Oracle Label Securityのポリシー施行からの除外

1. Oracle Label Securityは、ダイレクト・パス・エクスポート中には施行されません。

関連項目:
Oracle Label Securityでのエクスポート・ユーティリティの使用

2. 設計上、Oracle Label SecurityのポリシーはスキーマSYS内のオブジェクトには適用できません。したがって、SYSユーザーとDBA権限でデータベースに接続するユーザー(CONNECT AS SYSDBAなど)によるアクションには、Oracle Label Securityのポリシーは適用されません。DBAは、データベースを管理できる必要があります。Oracle Label Securityのポリシーが適用されているため、表の一部のエクスポートなどを行っても意味がありません。そのため、データベース・ユーザーSYSは、エクスポート・モード、つまりデータベースからのデータ抽出にアプリケーションを使用するかユーティリティを使用するかに関係なく、Oracle Label Securityの施行から常に除外されます。

関連項目:
DBA関連のその他の考慮事項については、第14章「Oracle Label SecurityでのDBAファンクションの実行」を参照してください。

3. 同様に、直接またはデータベース・ロールを通じてEXEMPT ACCESS POLICY権限を付与されたデータベース・ユーザーは、データベースへのアクセスやそのデータの更新に使用されるエクスポート・モード、アプリケーションまたはユーティリティにかかわらず、READ_CONTROLやCHECK_CONTROLなどの一部のOracle Label Securityポリシーの強制制御から除外されます。表9-2「ポリシー強制オプション」を参照してください。次のポリシー強制オプションは、EXEMPT ACCESS POLICYが付与されている場合も有効です。

- INSERT_CONTROL、UPDATE_CONTROL、DELETE_CONTROL、WRITE_CONTROL、LABEL_UPDATEおよびLABEL_DEFAULT。

- Oracle Label SecurityのポリシーでALL_CONTROLオプションが指定されている場合は、READ_CONTROLとCHECK_CONTROLを除くすべての施行制御が適用されます。

EXEMPT ACCESS POLICYはきわめて強力な権限であり、慎重に管理する必要があります。

この権限は、SELECT、INSERT、UPDATE、DELETEなどの標準のOracle Databaseオブジェクト権限の強制に影響しません。これらの権限は、ユーザーがEXEMPT ACCESS POLICY権限を付与されている場合にも施行されます。

9.1.8 表およびスキーマに対するポリシー・オプションの表示

次のビューを使用すると、表およびスキーマに現在適用されているポリシー施行オプションを表示できます。

- DBA_SA_TABLE_POLICIES

- DBA_SA_SCHEMA_POLICIES

9.2 ラベル付けファンクションの使用

アプリケーション開発者は、ラベル付けファンクションを作成できます。この種のプログラムでは、コンテキスト変数(日付やユーザー名)およびデータ値など、リソースの様々な配列を使用し、ラベルを計算して戻すことができます。

次の各項では、ラベル付けファンクションの使用方法について説明します。

- Oracle Label Securityでのデータ行のラベル付け

- Oracle Label Securityのポリシーでのラベル付けファンクション

- ポリシー用のラベル付けファンクションの作成

- ポリシーでのラベル付けファンクションの指定

9.2.1 Oracle Label Securityでのデータ行のラベル付け

挿入または更新対象のデータにラベルを付けるには、次の3つの方法があります。

- 表へのINSERTまたはUPDATEごとにラベルを明示的に指定します。

- LABEL_DEFAULTオプションを設定します。これにより、INSERT文またはUPDATE文に明示的な行ラベルが含まれていない場合は、セッションの行ラベルが使用されます。

- ラベル付けファンクションを作成します。これは、INSERT文またはUPDATE文ごとに、ユーザーの認証から独立して自動的にコールされます。

データのラベル付けルールを実装できるように、ラベル付けファンクションを作成するアプローチをお薦めします。ラベル付けファンクションを指定すると、Oracle Label Securityでは、ラベルが計算されるように、そのファンクションのコールがINSERTおよびUPDATEトリガーに埋め込まれます。

たとえば、ラベル付けファンクションmy_labelを作成し、新規行のうちCOL1およびCOL2の内容を使用し、行に該当するラベルを計算して戻します。これにより、INSERT文またはUPDATE文に次の参照を挿入できます。

my_label(:new.col1,:new.col2) J

ラベル付けファンクションを指定しない場合は、LABEL_DEFAULTオプションを指定します。どちらも使用しない場合は、各INSERT文またはUPDATE文でラベルを明示的に指定する必要があります。

9.2.2 Oracle Label Securityのポリシーでのラベル付けファンクション

ラベル付けファンクションを使用すると、アプリケーション・コンテキストから得られる情報をラベル割当てルールで考慮できます。たとえば、ユーザーが連結されているIPアドレスをラベル付けの考慮点として使用できます。この方法では、様々な場合にSYS_CONTEXTを使用できます。

注意:
SQL文が無効な場合は、表またはポリシーにラベル付けファンクションを適用するとエラーが発生します。表に使用する前に、ラベル付けファンクションを詳細にテストする必要があります。

ラベル付けファンクションにより、LABEL_DEFAULTおよびLABEL_UPDATEオプションがオーバーライドされます。

ラベル付けファンクションは、BEFORE行トリガーのコンテキスト内でコールされます。これにより、データ・レコードの新旧の値と新旧のラベルを渡すことができます。

ラベル付けファンクションは、ユーザーが明示的なラベルを渡すことができるように構成できます。

すべてのラベル付けファンクションは、戻り値の型をLBACSYS.LBAC_LABELデータ型にする必要があります。TO_LBAC_DATA_LABELファンクションを使用すると、ラベルを文字列書式からLBACSYS.LBAC_LABEL型に変換できます。LBACSYSには、ラベル付けファンクションに対するEXECUTE権限が必要であることに注意してください。ラベル付けファンクションの所有者は、GRANTオプションでTO_LBAC_DATA_LABELファンクションに対するEXECUTE権限を付与されている必要があります。

注意:
LBACSYSは、Oracle Label Securityに不透明型を提供する一意のスキーマです。詳細は、第14章「Oracle Label SecurityでのDBAファンクションの実行」を参照してください。

9.2.3 ポリシー用のラベル付けファンクションの作成

次の例に、ラベル付けファンクションの作成方法を示します。

SQL> CREATE OR REPLACE FUNCTION sa_demo.gen_emp_label
(Job varchar2,
Deptno number,
Total_sal number)
Return LBACSYS.LBAC_LABEL
as
i_label varchar2(80);
Begin
/************* Determine Class Level *************/
if total_sal > 2000 then
i_label := 'L3:';
elsif total_sal > 1000 then
i_label := 'L2:';
else
i_label := 'L1:';
end if;

/************* Determine Compartment *************/
IF Job in ('MANAGER','PRESIDENT') then
i_label := i_label||'M:';
else
i_label := i_label||'E:';
end if;
/************* Determine Groups *************/
i_label := i_label||'D'||to_char(deptno);
return TO_LBAC_DATA_LABEL('human_resources',i_label);
End;
/

注意:
Oracle Label SecurityがOracle Internet Directoryで直接動作するように構成されている場合、ラベルはOracle Internet Directoryでolsadmintoolコマンドを使用して集中管理されるため、動的ラベル生成は無効になります。付録B「Oracle Internet Directoryを使用したLabel Security用コマンドライン・ツール」を参照してください。このため、ラベル・ファンクションがOracle Internet Directoryでまだ設定されていない文字列値を使用してデータ・ラベルを生成する場合は、エラー・メッセージが表示されます。

9.2.4 ポリシーでのラベル付けファンクションの指定

次の例では、前項の例のsa_demo.gen_emp_labelを使用してラベル付けファンクションの指定方法を示します。

sa_policy_admin.remove_table_policy('human_resources','sa_demo','emp');
sa_policy_admin.apply_table_policy (

POLICY_NAME => 'human_resources',
SCHEMA_NAME => 'sa_demo',
TABLE_NAME  => 'emp',
TABLE_OPTIONS => 'READ_CONTROL,WRITE_CONTROL,CHECK_CONTROL',
LABEL_FUNCTION => 'sa_demo.gen_emp_label(:new.job,:new.deptno,:new.sal)',
PREDICATE => NULL);

9.3 ポリシー・オプションとラベル付けファンクションを使用したラベル付きデータの挿入

この項では、施行オプションとラベル付けファンクションがラベル付きデータの挿入に与える影響について説明します。

- 施行制御オプションとINSERTの評価

- ラベル付けファンクションが指定されている場合のラベルの挿入

- 宣言参照整合性が有効になっている表への子行の挿入

9.3.1 施行制御オプションとINSERTの評価

認可に基づいてデータの挿入または更新を試みた場合、その結果はアクティブになっているポリシー施行制御に応じて異なります。

- INSERT_CONTROLがアクティブな場合、挿入できるのは書込み認可の範囲内でラベルが付いている行のみです。読み取れるが書込み認可が与えられていないデータの更新を試みると、エラーが発生します。たとえば、区分AおよびBを読み取ることができても、書き込めるのが区分Aのみであれば、区分Bを指定してデータの挿入を試みると文は失敗します。

- INSERT_CONTROLがアクティブでない場合は、挿入する行で任意の有効なラベルを使用できます。

- CHECK_CONTROLオプションがアクティブな場合は、ラベルがラベル付けファンクションにより生成される場合も、挿入できるのは読取りが認可されているラベル付きの行のみです。

9.3.2 ラベル付けファンクションが指定されている場合のラベルの挿入

ラベル付けファンクションは、ユーザーが入力するラベルより優先されます。管理者が自動ラベル付けファンクションを設定している場合、ユーザーが入力したデータ・ラベルは無効です(ラベル付けファンクション自体でユーザーが提案したラベルを使用する以外)。新規の行ラベルは、常にアクティブなラベル付けファンクション(存在する場合)により決定されます。

ラベル付けファンクションでは、挿入する行のラベルを、その行を書き込むユーザーが表示できる範囲外の値に設定できることに注意してください。このようなファンクションが使用されている場合、ユーザーは行を挿入できますが、その行の表示は認可されません。この状況は、ポリシーにCHECK_CONTROLオプションを指定することで防止できます。このオプションがアクティブな場合、新規のデータ・ラベルはユーザーの読取り認可と比較チェックされ、読取り認可がなければユーザーは挿入を実行できません。

9.3.3 宣言参照整合性が有効になっている表への子行の挿入

親表が宣言参照整合性によって保護されている場合、子行の挿入は、親行が表示可能であるという要件によって制約されます。ユーザーは、挿入操作を成功させるには親行を参照できる必要があります。つまり、ユーザーには親行に対する読取りアクセス権が必要です。

親表に対するREAD_CONTROLがアクティブになっている場合、ユーザーには親行に対するSELECT操作を認可できるだけの読取り認可が必要です。たとえば、部門20を読み取ることができないユーザーは、部門20の子行を挿入できません。ユーザーが表またはスキーマに対するFULLまたはREAD権限を持っている場合は、すべてのレコードが参照可能になることに注意してください。

9.4 ポリシー・オプションとラベル付けファンクションを使用したラベル付きデータの更新

Oracle Label Securityでの更新ルールは、ユーザーがその行を変更する認可を受けているかぎり、挿入の場合とほとんど同じです。この項には、次の項目が含まれます。

- CHAR_TO_LABELを使用したラベルの更新

- 施行制御オプションとUPDATEの評価

- ラベル付けファンクションが指定されている場合のラベルの更新

- 宣言参照整合性が有効になっている表の子行の更新

9.4.1 CHAR_TO_LABELを使用したラベルの更新

行のラベルをSENSITIVEからCONFIDENTIALに変更する必要がある場合は、次のようにCHAR_TO_LABELファンクションを使用できます。

UPDATE emp
SET hr_label = char_to_label ('HR', 'CONFIDENTIAL')
WHERE ename = 'ESTANTON';

9.4.2 施行制御オプションとUPDATEの評価

認可に基づいてデータの更新を試みた場合、その結果はアクティブになっている施行制御に応じて異なります。

- UPDATE_CONTROLがアクティブな場合、更新できるのは書込み認可の範囲内のラベルが付いている行のみです。読取りはできても書込みの認可が与えられていないデータを更新しようとすると、エラーが発生します。たとえば、区分AおよびBを読み取ることができても、書き込めるのは区分Aのみであるとします。この場合、区分Bを指定してデータの更新を試みると、文は失敗します。

- UPDATE_CONTROLがアクティブでない場合は、読取りアクセス権を持っているすべての行を更新できます。

- LABEL_UPDATEがアクティブな場合、ラベルを、機密性レベルの上げ下げ、あるいはグループまたは区分の変更によって変更するには、適切な権限(WRITEUP、WRITEDOWNまたはWRITEACROSS)が必要です。

- LABEL_UPDATEがアクティブでなく、UPDATE_CONTROLがアクティブである場合は、書込み認可の範囲内の新しいラベル値にラベルを更新できます。

- CHECK_CONTROLがアクティブな場合、書き込めるのは、読取り認可を受けているラベルのみです。

次の図に、LABEL_UPDATEのラベル評価プロセスを示します。

図9-1 LABEL_UPDATEのラベル評価プロセス

9.4.3 ラベル付けファンクションが指定されている場合のラベルの更新

ラベル付けファンクションは、ユーザーが入力するラベルより優先されます。管理者が自動ラベル付けファンクションを設定している場合、ユーザーが入力したラベルは無効です(ラベル付けファンクション自体でユーザーが提案したラベルを使用する以外)。新規の行ラベルは、常にアクティブなラベル付けファンクション(存在する場合)により決定されます。

セキュリティ管理者は、更新する行のラベルをユーザーが表示できる範囲外の値に設定するように、ラベル付けファンクションを設定できることに注意してください。この場合、ユーザーは行を更新できますが、その行の表示を認可されません。CHECK_CONTROLオプションがオンに設定されている場合、このような更新は実行できません。CHECK_CONTROLオプションでは、新規ラベルに対する読取り認可が検証されます。

9.4.4 宣言参照整合性が有効になっている表の子行の更新

参照整合性制約を持つ表に子行がある場合、正常に更新するには、親行が表示可能である(つまり、ユーザーが親行を参照できる)必要があります。親表のREAD_CONTROLがオンになっている場合、ユーザーは、親行に対するSELECTが認可されるだけの読取り認可を持っている必要があります。

たとえば、親表の部門20を読み取ることができないユーザーは、従業員の部門を子表で部門20に更新することはできません。(ユーザーがFULLまたはREAD権限を持っている場合は、すべてのレコードが参照可能です。)

関連項目:
『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』

9.5 ポリシー・オプションとラベル付けファンクションを使用したラベル付きデータの削除

この項では、ラベル付きデータの削除について説明します。

- DELETE_CONTROLオプションがアクティブな場合、削除できるのは書込み認可の範囲内の行のみです。

- DELETE_CONTROLがアクティブでない場合、削除できるのは読取り可能な行のみです。

- DELETE_CONTROLがアクティブで、宣言参照整合性がカスケード削除で定義されている場合は、削除するすべての行に対する書込み認可が必要で、認可がない場合は文が失敗します。

子行が連結されている親行は、書込み認可に関係なく削除できません。この種の親行を削除するには、先に子行をそれぞれ削除する必要があります。DELETE_CONTROLがアクティブになっている子行が1つでもある場合、子行を削除するには書込み権限が必要です。

たとえば、ユーザーがUNCLASSIFIEDで、次の3行がある場合を考えます。

行

表

機密性

親行:

DEPT

UNCLASSIFIED

子行:

EMP

UNCLASSIFIED

子行:

EMP

UNCLASSIFIED

この場合、UNCLASSIFIEDユーザーは親行を削除できません。

DELETE_RESTRICTがアクティブな場合、DELETE_CONTROLは無効です。DELETE_RESTRICTは常に施行されます。ユーザーの認証とデータのラベルによっては、行に子行がないように見えるのに、実際には子行があり、ユーザーはそれを参照できない場合があります。子行を参照できなくても、そのユーザーは親行を削除できません。

関連項目:
『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』

9.6 Oracle Label SecurityのポリシーとSQL述語の使用

SQL述語を使用すると拡張性が得られ、データ・アクセス・ルールを選択的に施行できます。

この項には、次の項目が含まれます。

- SQL述語を使用したOracle Label Securityのポリシーの変更

- 複数のSQL述語を使用したOracle Label Securityのポリシーの効果

9.6.1 SQL述語を使用したOracle Label Securityのポリシーの変更

SQL述語は、オプションのANDまたはORで始まる条件です。READ_CONTROLアクセス調整用に追加できます。たとえば、次の述語は、COL1に基づくアプリケーション固有のテストを追加して、セッションにその行へのアクセス権があるかどうかを判断します。

AND my_function(col1)=1

ポリシーとユーザー指定の述語を組み合せた結果により、ユーザーが読み取れるラベルが制限されます。したがって、この組合せはCHECK_CONTROLによりユーザーが変更を許可されるラベルとデータに影響することになります。たとえば、OR句を使用すると、ユーザーが読み取れる行数が増えます。

SQL述語が役立つのは、ラベルベースのフィルタリングの実行を回避する必要がある場合です。ある種の状況では、SQL述語を使用すると表に行レベルのセキュリティを簡単に実装できます。SQL述語をREAD_CONTROLのかわりに使用すると、SELECT、UPDATEおよびDELETE操作の対象データにフィルタが適用されます。

同様に、通常、Web対応の人事管理アプリケーションでは、従業員表の行にアクセスするユーザーはマネージャであることが必要です。このような場合、ユーザー・ラベルは従業員の行のラベルを支配する必要があります。次のようなSQL述語を追加すると、従業員は従業員表内で各自のレコードを表示する必要がある場合に、ラベルベースのフィルタリングをバイパスできます。(ORは、ラベル・ポリシーが適用されるか、またはこの文が適用されるようにするために使用されます。)

OR SYS_CONTEXT ('USERENV', 'SESSION_USER') = employee_name

この述語により、各従業員が自分のレコードにアクセスできるように、アクセス制御を追加できます。

この種の述語をREAD_CONTROLと併用するか、READ_CONTROLが実装されていない場合にもスタンドアロン述語として使用できます。

注意:
アプリケーションに実装する前に、述語によりセキュリティの目標が達成されるかどうかを確認してください。
Oracle Label Securityの述語で構文エラーが発生した場合、ポリシーを表に適用しようとしたときにエラーは発生しません。かわりに、その表の参照を初めて試みるときに、述語エラー・メッセージが表示されます。

9.6.2 複数のSQL述語を使用したOracle Label Securityのポリシーの効果

Oracle Label Securityのポリシーを使用して表に適用された述語は、他のOracle Label SecurityのポリシーまたはOracleのファイングレイン・アクセス・コントロール/VPDポリシーにより適用できる他の述語に追加されます。各述語は、まとめてANDされます。

SCOTTスキーマにあるEMP表に次の述語が適用されているとします。

- deptno=10など、Oracle VPDポリシーにより生成された述語

- label=100など、次のようなユーザー指定述語とともにOracle Label Securityのポリシーにより生成されたラベルベースの述語

OR SYS_CONTEXT ('USERENV', 'SESSION_USER') = ename

正: これらの述語は、次のようにまとめてANDされます。

WHERE deptno=10 AND (label=100 OR SYS_CONTEXT ('USERENV', 'SESSION_USER') = ename)

誤: 述語は次の方法では結合されません。

WHERE deptno=10 AND label=100 OR SYS_CONTEXT ('USERENV', 'SESSION_USER') = ename

10 表およびスキーマへのポリシーの適用

この章では、表およびスキーマに対するポリシーを管理するためのSA_POLICY_ADMINパッケージについて説明します。この章の内容は、次のとおりです。

- ポリシー管理用語

- Oracle Internet Directory対応Oracle Label Securityでのポリシーのサブスクライブ

- 表およびスキーマのポリシー管理ファンクション

- SA_POLICY_ADMINを使用した表のポリシーの管理

- SA_POLICY_ADMINを使用したスキーマに対するポリシーの管理

10.1 ポリシー管理用語

表にポリシーを適用する場合、ポリシーは自動的に有効になります。ポリシーを無効にすると保護がオフになりますが、ポリシーは表に適用されたままになります。ポリシーを有効にすると、特定の表またはスキーマに対するそのポリシーの保護がオンになり、強制されます。

ポリシーを削除すると、表またはスキーマから完全に削除されます。ただし、ポリシーのラベル列およびそのラベルは、明示的に削除しないかぎり表に残ります。

今後スキーマに作成できる表のデフォルトのポリシー強制オプションを変更できます。ただし、この変更は、スキーマにある既存の表のポリシー施行オプションには反映されません。

既存の表の強制オプションを変更するには、最初に表からポリシーを削除し、目的の変更を行ってから、ポリシーを表に再適用します。

関連項目:
ポリシー・オプションの選択

10.2 Oracle Internet Directory対応Oracle Label Securityでのポリシーのサブスクライブ

Oracle Internet Directory対応Oracle Label Securityでは、ポリシーを(APPLY_TABLE_POLICYまたはAPPLY_SCHEMA_POLICYにより)適用する前にサブスクライブする必要があります。スタンドアロンOracle Label Securityインストールでは、後者のファンクションを直接使用できるため、サブスクライブする必要はありません。

ポリシーをサブスクライブするには、次の項で説明するようにSA_POLICY_ADMIN.POLICY_SUBSCRIBEを使用します。

これらのポリシーを削除するには、適用先の表またはスキーマからポリシーを削除し、サブスクライブを取り消す必要があります。

ポリシーのサブスクライブを取り消すには、以降の項で説明するようにSA_POLICY_ADMIN.POLICY_UNSUBSCRIBEを使用します。

10.2.1 SA_POLICY_ADMIN.POLICY_SUBSCRIBEを使用したポリシーへのサブスクライブ

Oracle Internet Directory対応Oracle Label Security構成では、POLICY_SUBSCRIBEプロシージャを使用して、APPLY_TABLE_POLICYおよびAPPLY_SCHEMA_POLICYで使用できるようにポリシーにサブスクライブします。このプロシージャは、そのポリシーを表またはスキーマに適用する前にコールする必要があります。サブスクライブは1回のみで、表またはスキーマ内でポリシーを使用するたびにサブスクライブする必要はありません。

10.2.1.1 構文

PROCEDURE POLICY_SUBSCRIBE(
policy_name     IN VARCHAR2);

policy_nameには既存のポリシーを指定します。

注意:
このプロシージャをポリシーの使用前にコールする必要があるのは、Oracle Internet Directory対応Oracle Label Security構成の場合のみです。スタンドアロンOracle Label Securityの場合は、APPLY_TABLE_POLICYおよびAPPLY_SCHEMA_POLICYでポリシーを直接使用でき、サブスクライブは不要です。

10.2.1.1.1 例:

次の文では、表およびスキーマに適用して使用できるように、データベースをHUMAN_RESOURCESポリシーにサブスクライブします。

SA_POLICY_ADMIN.POLICY_SUBSCRIBE('human_resources');

10.2.2 SA_POLICY_ADMIN.POLICY_UNSUBSCRIBEを使用したポリシーへのサブスクライブ取消し

Oracle Internet Directory対応Oracle Label Security構成では、POLICY_UNSUBSCRIBEプロシージャを使用してポリシーのサブスクライブを取り消します。このプロシージャを使用できるのは、ポリシーが使用されていない場合、つまり、表またはスキーマに適用されていない場合のみです(表またはスキーマに適用されている場合にサブスクライブを取り消すには、すべての適用先から削除する必要があります)。(表またはスキーマに適用されている場合は、すべての表またはスキーマから削除してから、サブスクライブ解除する必要があります。)Oracle Internet Directoryでポリシーを削除できるのは(付録Bのolsadmintool droppolicy)、そのOracle Internet Directoryに登録したデータベースでサブスクライブされていない場合のみです。

10.2.2.1 構文

PROCEDURE POLICY_UNSUBSCRIBE(
policy_name  IN VARCHAR2);

policy_nameには既存のポリシーを指定します。

10.2.2.1.1 例:

次の文では、HUMAN_RESOURCESポリシーに対するデータベースのサブスクライブを取り消します。

SA_POLICY_ADMIN.POLICY_UNSUBSCRIBE('human_resources');

10.3 表およびスキーマのポリシー管理ファンクション

Oracle Label Securityのポリシーの管理には、次の2組のファンクションを使用できます。

- 表レベルでポリシーを管理するファンクション

- スキーマ・レベルでポリシーを管理するファンクション

スキーマ・レベルのファンクションは、便宜のために用意されています。ただし、表レベルで実行する管理操作により、スキーマ・レベルで実行した操作がオーバーライドされることに注意してください。

表10-1 ポリシー管理ファンクション

用途

表レベルのファンクション

スキーマレベルのファンクション

ポリシーの適用

APPLY_TABLE_POLICY

APPLY_SCHEMA_POLICY

ポリシーの変更

該当なし

ALTER_SCHEMA_POLICY

ポリシーの無効化

DISABLE_TABLE_POLICY

DISABLE_SCHEMA_POLICY

ポリシーの再有効化

ENABLE_TABLE_POLICY

ENABLE_SCHEMA_POLICY

ポリシーの削除

REMOVE_TABLE_POLICY

REMOVE_SCHEMA_POLICY

10.4 SA_POLICY_ADMINを使用した表のポリシーの管理

表のポリシーを管理するには、SA_POLICY_ADMINパッケージに対するEXECUTE権限を持ち、policy_DBAロールを付与されている必要があります。この項の内容は、次のとおりです。

- SA_POLICY_ADMIN.APPLY_TABLE_POLICYを使用したポリシーの適用

- SA_POLICY_ADMIN.REMOVE_TABLE_POLICYを使用したポリシーの削除

- SA_POLICY_ADMIN.DISABLE_TABLE_POLICYを使用したポリシーの無効化

- SA_POLICY_ADMIN.ENABLE_TABLE_POLICYを使用したポリシーの再有効化

10.4.1 SA_POLICY_ADMIN.APPLY_TABLE_POLICYを使用したポリシーの適用

APPLY_TABLE_POLICYプロシージャを使用して、指定したポリシーを表に追加します。ポリシーのラベル列が存在しない場合は表に追加され、NULLに設定されます。ポリシーは、適用すると自動的に有効化されます。表のオプション、ラベル付けファンクションまたは述語を変更するには、最初にポリシーを削除してから再適用する必要があります。

10.4.1.1 構文

PROCEDURE APPLY_TABLE_POLICY (
policy_name       IN VARCHAR2,
schema_name       IN VARCHAR2,
table_name        IN VARCHAR2,
table_options     IN VARCHAR2 DEFAULT NULL,
label_function    IN VARCHAR2 DEFAULT NULL,
predicate         IN VARCHAR2 DEFAULT NULL);

パラメータ

指定

policy_name

既存のポリシーです。

schema_name

表を含むスキーマです。

table_name

ポリシーで制御する表です。

table_options

表に使用するポリシー施行オプションのカンマ区切りのリストです。NULLの場合は、ポリシーのデフォルト・オプションが使用されます。

label_function

デフォルトとして使用するラベル値を戻すファンクションをコールする文字列です。たとえば、my_label(:new.dept,:new.status)を指定すると、行のDEPT列とSTATUS列の新規の値に基づいてラベルが計算されます。

predicate

READ_CONTROLのラベルベースの述語と(ANDまたはORを使用して)結合する追加の述語です。

10.4.1.1.1 例:

次の文では、SA_DEMOスキーマのEMP表にHUMAN_RESOURCESポリシーを適用します。

SA_POLICY_ADMIN.APPLY_TABLE_POLICY('human_resources',

'sa_demo','emp','no_control');

10.4.2 SA_POLICY_ADMIN.REMOVE_TABLE_POLICYを使用したポリシーの削除

REMOVE_TABLE_POLICYプロシージャでは、指定したポリシーを表から削除します。ポリシーの述語とDMLトリガーが表から削除され、ポリシーのラベル列をオプションで削除できます。ポリシーは、それにより保護されているスキーマに属する表から削除できます。

10.4.2.1 構文

PROCEDURE REMOVE_TABLE_POLICY (
policy_name        IN VARCHAR2,
schema_name        IN VARCHAR2,
table_name         IN VARCHAR2,
drop_column      IN BOOLEAN DEFAULT FALSE);

パラメータ

指定

policy_name

既存のポリシーです。

schema_name

表を含むスキーマです。

table_name

表です。

drop_column

列を削除するかどうかを指定します。TRUEの場合はポリシーの列が表から削除され、それ以外の場合は削除されません。

10.4.2.1.1 例:

次の文では、SA_DEMOスキーマのEMP表からHUMAN_RESOURCESポリシーを削除します。

SA_POLICY_ADMIN.REMOVE_TABLE_POLICY('human_resources','sa_demo','emp');

10.4.3 SA_POLICY_ADMIN.DISABLE_TABLE_POLICYを使用したポリシーの無効化

DISABLE_TABLE_POLICYプロシージャでは、施行オプション、ラベル付けファンクションまたは述語の値を変更せずに、指定した表のポリシーの施行を無効化します。RLS述語とDMLトリガーは表から削除されます。

10.4.3.1 構文

PROCEDURE DISABLE_TABLE_POLICY (
policy_name      IN VARCHAR2,
schema_name      IN VARCHAR2,
table_name       IN VARCHAR2);

パラメータ

指定

policy_name

既存のポリシーです。

schema_name

表を含むスキーマです。

table_name

表です。

10.4.3.1.1 例:

次の文では、SA_DEMOスキーマのEMP表に対するHUMAN_RESOURCESポリシーを無効化します。

SA_POLICY_ADMIN.DISABLE_TABLE_POLICY('human_resources','sa_demo','emp');

10.4.4 SA_POLICY_ADMIN.ENABLE_TABLE_POLICYを使用したポリシーの再有効化

ENABLE_TABLE_POLICYプロシージャでは、RLS述語とDMLトリガーを再適用して、指定した表に対する現行の施行オプション、ラベル付けファンクションおよび述語を再有効化します。

10.4.4.1 構文

PROCEDURE ENABLE_TABLE_POLICY (
policy_name     IN VARCHAR2,
schema_name     IN VARCHAR2,
table_name      IN VARCHAR2);

パラメータ

指定

policy_name

既存のポリシーです。

schema_name

表を含むスキーマです。

table_name

表です。

10.4.4.1.1 例:

次の文では、SA_DEMOスキーマのEMP表に対するHUMAN_RESOURCESポリシーを再有効化します。

SA_POLICY_ADMIN.ENABLE_TABLE_POLICY('human_resources','sa_demo','emp');

10.5 SA_POLICY_ADMINを使用したスキーマに対するポリシーの管理

スキーマのポリシーを管理するには、SA_POLICY_ADMINパッケージに対するEXECUTE権限を持ち、policy_DBAロールを付与されている必要があります。

この項には、次の項目が含まれます。

- SA_POLICY_ADMIN.APPLY_SCHEMA_POLICYを使用したポリシーの適用

- 施行オプションの変更: SA_POLICY_ADMIN.ALTER_SCHEMA_POLICY

- SA_POLICY_ADMIN.REMOVE_SCHEMA_POLICYを使用したポリシーの削除

- SA_POLICY_ADMIN.DISABLE_SCHEMA_POLICYを使用したポリシーの無効化

- SA_POLICY_ADMIN.ENABLE_SCHEMA_POLICYを使用したポリシーの再有効化

- スキーマに対するポリシーの問題

10.5.1 SA_POLICY_ADMIN.APPLY_SCHEMA_POLICYを使用したポリシーの適用

ポリシーは、個々の表に適用するだけでなくスキーマ・レベルでも適用できます。APPLY_SCHEMA_POLICYプロシージャでは、指定したポリシーをスキーマ内の既存の(まだポリシーが適用されていない)すべての表に適用し、各表に対するポリシーを有効化します。その後は、スキーマに新規の表が作成されるたびに、スキーマのデフォルト・オプションを使用して、その表に自動的にポリシーが適用されます。スキーマ内の既存の表で、すでにポリシーが適用されているものは変更されません。

10.5.1.1 構文

PROCEDURE APPLY_SCHEMA_POLICY (
policy_name        IN VARCHAR2,
schema_name        IN VARCHAR2,
default_options    IN VARCHAR2 DEFAULT NULL);

パラメータ

指定

policy_name

既存のポリシーです。

schema_name

表を含むスキーマです。

default_options

スキーマ内の表に使用するデフォルト・オプションです。

default_optionsパラメータをNULLにすると、ポリシーのデフォルト・オプションを使用してポリシーがスキーマ内の表に適用されます。

10.5.2 施行オプションの変更: SA_POLICY_ADMIN.ALTER_SCHEMA_POLICY

ALTER_SCHEMA_POLICYプロシージャでは、ポリシーのデフォルト施行オプションを変更します。スキーマ内で新規に作成した表には、新規の施行オプションが自動的に適用されます。スキーマ内の既存の表は影響を受けません。

10.5.2.1 構文

PROCEDURE ALTER_SCHEMA_POLICY (
policy_name         IN VARCHAR2,
schema_name         IN VARCHAR2,
default_options     IN VARCHAR2);

パラメータ

指定

policy_name

既存のポリシーです。

schema_name

表を含むスキーマです。

default_options

スキーマ内の新規の表に使用するデフォルト・オプションです。

スキーマではなく表に対する施行オプションを変更するには、最初に表からポリシーを削除し、必要な変更を行ってから、ポリシーを再適用する必要があります。

スキーマに対する施行オプションを変更すると、変更結果は次回にそのスキーマに表を作成するときに有効になります。したがって、スキーマ内の表ごとに異なるポリシー施行オプションが有効になる場合があります。

10.5.3 SA_POLICY_ADMIN.REMOVE_SCHEMA_POLICYを使用したポリシーの削除

REMOVE_SCHEMA_POLICYプロシージャでは、指定したポリシーをスキーマから削除します。ポリシーはスキーマ内のすべての表から削除され、オプションでポリシーのラベル列がすべての表から削除されます。

10.5.3.1 構文

PROCEDURE REMOVE_SCHEMA_POLICY (
policy_name     IN VARCHAR2,
schema_name     IN VARCHAR2,
drop_column     IN BOOLEAN DEFAULT FALSE);

パラメータ

指定

policy_name

既存のポリシーです。

schema_name

表を含むスキーマです。

drop_column

TRUEの場合は、ポリシーの列が表から削除されます。それ以外の場合、列は残ります。

10.5.4 SA_POLICY_ADMIN.DISABLE_SCHEMA_POLICYを使用したポリシーの無効化

DISABLE_SCHEMA_POLICYプロシージャでは、施行オプション、ラベル付けファンクションまたは述語の値を変更せずに、指定したスキーマ内のすべての表に対するポリシーの施行を無効化します。RLS述語とDMLトリガーは、スキーマ内のすべての表から削除されます。

10.5.4.1 構文

PROCEDURE DISABLE_SCHEMA_POLICY (
policy_name    IN VARCHAR2,
schema_name    IN VARCHAR2);

パラメータ

指定

policy_name

既存のポリシーです。

schema_name

表を含むスキーマです。

10.5.5 SA_POLICY_ADMIN.ENABLE_SCHEMA_POLICYを使用したポリシーの再有効化

ENABLE_SCHEMA_POLICYプロシージャでは、RLS述語とDMLトリガーを再適用して、指定したスキーマ内の表に対する現行の施行オプション、ラベル付けファンクションおよび述語を再有効化します。

10.5.5.1 構文

PROCEDURE ENABLE_TABLE_POLICY (
policy_name    IN VARCHAR2,
schema_name    IN VARCHAR2);

パラメータ

指定

policy_name

既存のポリシーです。

schema_name

表を含むスキーマです。

これは1つの表に対するポリシーを有効化しているように見えますが、スキーマ内のすべての表が対象となります。

10.5.6 スキーマに対するポリシーの問題

スキーマでOracle Label Securityのポリシーを使用する場合は、次の側面に注意してください。

- ポリシーを空のスキーマに適用すると、そのスキーマ内で表を作成するたびにポリシーが適用されます。ポリシーをスキーマに適用すると、選択したデフォルト・オプションは追加するすべての表に適用されます。

- 保護を解除するために表からポリシーを削除してから、SA_POLICY_ADMIN.ENABLE_SCHEMA_POLICYを実行しても、その表の保護は解除されたままになります。表を再び保護する場合は、その表にポリシーを適用するか、スキーマにポリシーを再適用する必要があります。

すでにポリシーで保護されている表を含むスキーマにポリシーを適用すると、将来のすべての表には、ポリシーの適用時に指定した新規オプションが設定されます。既存の表に設定されていたオプションは変更されません。

11トラステッド・ストアド・プログラム・ユニットの管理および使用

この章では、トラステッド・ストアド・プログラム・ユニットを使用してシステム・セキュリティを強化する方法について説明します。この章の内容は、次のとおりです。

- トラステッド・ストアド・プログラム・ユニットの概要

- SET_PROG_PRIVSを使用したプログラム・ユニット権限の管理

- トラステッド・ストアド・プログラム・ユニットの作成およびコンパイル

- SA_UTLファンクションを使用したラベル情報の設定と戻し

11.1 トラステッド・ストアド・プログラム・ユニットの概要

Oracle Databaseストアド・プロシージャ、ファンクションおよびパッケージは、コンパイルされた形式でデータベースに格納されているPL/SQL文のセットです。ファンクションとプロシージャの唯一の違いは、ファンクションは値を戻すのに対して、プロシージャは値を戻さないことです。トラステッド・ストアド・プログラム・ユニットは、Oracle Databaseの他のストアド・プログラム・ユニットと同様で、基礎となるロジックは同じです。

パッケージは、使用するカーソルおよび変数とともにユニットとして格納されるプロシージャとファンクションのセットです。 パッケージは、パッケージ仕様部とパッケージ本体という2つの部分で構成されています。パッケージ仕様部では、パッケージに含まれるパブリック・プロシージャ、ファンクションおよび変数の外部定義を宣言します。パッケージ本体には、プロシージャとファンクションの実際のテキストと、プライベートなプロシージャおよび変数が含まれています。

トラステッド・ストアド・プログラム・ユニットは、1つ以上のOracle Label Security権限を付与されたストアド・プロシージャ、ファンクションまたはパッケージです。通常、トラステッド・ストアド・プログラム・ユニットは、ユーザーが権限を付与されている操作を制御された方法で実行したり、複数のラベルのデータを更新できるようにするために使用されます。これは、ユーザーに対して認可の範囲を超えるデータへのアクセスを許可する場合に最適なアプローチです。

トラステッド・ストアド・プログラム・ユニットは、権限の使用に対するファイングレイン・コントロールを提供します。多数のユーザーに潜在的に権限を付与できますが、アプリケーションについて設定したセキュリティ・ポリシーに違反する可能性があるため、権限の付与には細心の注意を払う必要があります。ユーザーに権限を割り当てるのではなく、権限を必要とするアプリケーション操作を識別し、それをトラステッド・プログラム・ユニットとして実装できます。このようなストアド・プログラム・ユニットに権限を付与すると、実際にはユーザーが必要とするOracle Label Security権限を制限することになります。このアプローチは、最小限の権限の原理を採用しています。

たとえば、ラベルCONFIDENTIALを持つユーザーがSENSITIVE行へのデータの挿入を必要とする場合は、ユーザーがアクセスするトラステッド・ストアド・プログラムにWRITEUP権限を付与できます。これにより、ユーザーはトラステッド・ストアド・プログラムを使用して、CONFIDENTIALレベルでタスクを実行できます。

すべてのアクションは、ユーザーにかわってトラステッド・プログラム・ユニットにより実行されます。そのため、セキュリティ・ポリシーをモジュールに効率的にカプセル化し、それが有効かどうかを検証できます。

11.1.1 トラステッド・ストアド・プログラム・ユニットの動作

トラステッド・ストアド・プログラム・ユニットは、独自の権限とコール元のラベルを使用して実行されます。このようにして、ユーザーのラベルで制約されている行セットに対して、権限が付与されている操作を実行できます。

Oracle Databaseシステムおよびオブジェクト権限は、ロールにバンドルすることを意図しています。ユーザーには、必要に応じてロール権限が付与されます。これに対して、Oracle Label Security権限の割当て対象となるのは、ユーザーまたはストアド・プログラム・ユニットのみです。この種のトラステッド・ストアド・プログラム・ユニットは、Oracle Label Security権限の使用を制御するという点で、ロールよりも管理しやすいメカニズムを提供します。

11.1.2 トラステッド・ストアド・プログラム・ユニットの例

READ権限を持つトラステッド・ストアド・プログラム・ユニットは、データベース内で保護されていないすべてのデータと、このポリシーにより保護されているすべてのデータを読み取ることができます。たとえば、購買予測レポートの作成を担当するユーザーを考えます。このユーザーは、すべての発注金額の集計操作を実行する必要があります。これは、そのユーザーのラベルで個々の発注書へのアクセスが認可されているかどうかには関係ありません。この例で集計プロシージャを作成する構文は、次のとおりです。

CREATE FUNCTION sum_purchases RETURN NUMBER IS
psum NUMBER;
BEGIN
SELECT SUM(amount) INTO psum
FROM purchase_orders;
RETURN psum;
END sum_purchases;

これにより、プログラム・ユニットは、エンド・ユーザーが収集できない情報を収集し、集計により使用可能にできます。

SUM_PURCHASESを実行するには、ユーザーにこのプロシージャに対する標準Oracle Database EXECUTEオブジェクト権限が付与されている必要があります。

関連項目:
第3章「アクセス制御および権限」

11.2 SET_PROG_PRIVSを使用したプログラム・ユニット権限の管理

ストアド・プログラム・ユニットに権限を付与するには、policy_DBAロールと、SA_USER_ADMINパッケージに対するEXECUTE許可が必要です。Oracle Label Security権限を管理するには、SA_USER_ADMINパッケージを使用する方法と、Oracle Enterprise Managerを使用する方法があります。

SA_USER_ADMIN.SET_PROG_PRIVSプロシージャを使用して、プログラム・ユニットについてポリシー固有の権限を設定します。privilegesパラメータがNULLの場合は、ポリシーに対するプログラム・ユニットの権限が削除されます。

構文:

PROCEDURE SET_PROG_PRIVS (
policy_name           IN VARCHAR2,
schema_name           IN VARCHAR2,
program_unit_name     IN VARCHAR2,
privileges            IN VARCHAR2);

パラメータ

指定

policy_name

既存のポリシーの名前です。

program_unit_name

権限を付与するプログラム・ユニットを指定します。

privileges

ポリシー固有の権限をカンマで区切って文字列として指定します。

たとえば、SUM_PURCHASESファンクションにREAD権限を付与するには、次のように入力します(「トラステッド・ストアド・プログラム・ユニットの例」を参照)。

EXECUTE sa_user_admin.set_prog_privs (
'HR','myschema','sum_purchases','READ');

SUM_PURCHASESプロシージャがコールされると、現行ユーザーのOracle Label Security権限に加えてREAD権限で実行されます。このテクニックを使用すると、ユーザーには、個々の従業員の給与を知らせずに、会社全体の給与の合計値を検索するように許可できます。

警告:
トラステッド・ストアド・プログラム・ユニットを作成する場合は、Oracle Label Security管理者に、付与された権限を慎重に検討して評価するように指示してください。たとえば、トラステッド・パッケージ内のプロシージャが、権限を付与されているデータベース操作を実行し、パッケージのパブリック変数の結果またはステータス情報を書き込まないようにします。これにより、サイトのOracle Label Securityポリシーに違反が発生しないことが確実になります。

11.3 トラステッド・ストアド・プログラム・ユニットの作成およびコンパイル

この項には、次の項目が含まれます。

- トラステッド・ストアド・プログラム・ユニットの作成

- トラステッド・ストアド・プログラム・ユニットの権限の設定

- トラステッド・ストアド・プログラム・ユニットの再コンパイル

- トラステッド・ストアド・プログラム・ユニットの再作成

- トラステッド・ストアド・プログラム・ユニットの実行

11.3.1 トラステッド・ストアド・プログラム・ユニットの作成

トラステッド・ストアド・プログラム・ユニットの作成方法は、標準的なプロシージャ、ファンクションまたはパッケージを作成する場合と同じで、CREATE PROCEDURE、CREATE FUNCTIONまたはCREATE PACKAGEおよびCREATE PACKAGE BODYの各文を使用します。プログラム・ユニットは、Oracle Label Security権限を付与するとトラステッド・プログラム・ユニットになります。

関連項目:
『Oracle Database SQL言語クイック・リファレンス』

11.3.2 トラステッド・ストアド・プログラム・ユニットの権限の設定

開発者がストアド・プログラム・ユニットを作成すると、Oracle Label Security管理者はコードが正しいかどうかを検証してから、ストアド・プログラム・ユニットに必要な権限を付与できます。トラステッド・ストアド・プログラム・ユニットが再作成または置換されると、その権限は削除されます。Oracle Label Security管理者はコードを再検証し、権限を再び付与する必要があります。

11.3.3 トラステッド・ストアド・プログラム・ユニットの再コンパイル

トラステッド・ストアド・プログラム・ユニットの再コンパイルを自動的に行うか手動で(ALTER PROCEDUREを使用して)行うかは、Oracle Label Security権限には影響しません。ただし、再コンパイル後はプログラム・ユニットに対するEXECUTE権限を再び付与する必要があります。

11.3.4 トラステッド・ストアド・プログラム・ユニットの再作成

Oracle Label Security権限は、トラステッド・ストアド・プログラム・ユニットに対してCREATE OR REPLACE操作を実行すると取り消されます。これにより、プロシージャでOracle Label Security権限が誤用される可能性が限定されます。Oracle Label Security権限が取り消されても、プロシージャ、ファンクションまたはパッケージは引き続き実行できることに注意してください。

プロシージャ、ファンクションまたはパッケージを再作成する場合は、そのテキストを慎重に検討する必要があります。再作成後のプログラム・ユニットがサイトのOracle Label Securityポリシーに違反しないことが確実であれば、必要な権限を再び付与できます。

トラステッド・ストアド・プログラム・ユニットを頻繁に置換する必要のある開発環境(本番システムの最初の数か月など)では、必要に応じて適切なOracle Label Security権限を付与できるようにスクリプトを作成することをお薦めします。

11.3.5 トラステッド・ストアド・プログラム・ユニットの実行

Oracle Label Securityでは、(表およびスキーマへのアクセスに関する)プロシージャ・コールのすべての標準Oracle Databaseコントロールはまだ有効です。Oracle Label Securityは、行へのアクセスを制御することで、これらのセキュリティ・メカニズムを補完します。トラステッド・ストアド・プログラム・ユニットの実行時に有効なポリシー権限は、コール側ユーザーの権限とプログラム・ユニットの権限との共用部分です。トラステッド・ストアド・プログラム・ユニットが別のトラステッド・プログラム・ユニットまたは非トラステッド・プログラム・ユニットをコールすると、コールされたプログラム・ユニットはコール側のプログラム・ユニットと同じ権限で実行されます。

非トラステッド・ストアド・プログラム・ユニットとトラステッド・ストアド・プログラム・ユニットが連なって実行される場合、最初のトラステッド・プログラム・ユニットによって、それ以降の順序でコールされるプログラム・ユニット全体の権限が決まります。次の順序を考えてみます。

プロシージャA(非トラステッド)
WRITEUP権限を持つプロシージャB
WRITEDOWN権限を持つプロシージャC
プロシージャD(非トラステッド)
プロシージャBは順序内の最初のトラステッド・プロシージャのため、プロシージャB、CおよびDはすべてWRITEUP権限で実行されます。順序が終了すると、プロシージャBに関する権限は後続のプロシージャには無効になります。

注意:
トラステッド・プログラム・ユニットに発生した未処理例外は、Oracle Label Securityにより捕捉されます。これは、ユーザーにエラー・メッセージが表示されない場合があることを意味します。このため、権限を付与する前に、常にすべてのプログラム・ユニットを細部に至るまでテストし、デバッグする必要があります。

11.4 SA_UTLファンクションを使用したラベル情報の設定と戻し

SA_UTLパッケージには、PL/SQLプログラムで使用できるように複数のファンクションが用意されています。これらのファンクションは、セッションのセキュリティ属性の現在の値に関する情報を、数値のラベル値書式で戻します。これらのファンクションは、非トラステッド・プログラム・ユニットにも使用できますが、主としてトラステッド・ストアド・プログラム・ユニット用です。

これらはパブリック・ファンクションであり、policy_DBAロールがなくても使用できることに注意してください。また、各ファンクションには、同じラベルを文字列書式で戻すパラレルのSA_SESSIONファンクションがあります。

- SA_UTLを使用したセッション・ラベルと行ラベルの表示

- 表の行データの読取り権限と更新権限のチェック

- SA_UTLを使用したセッション・ラベルと行ラベルの設定

- 最大の下限と最小の上限の戻し

関連項目:
SA_SESSIONファンクションを使用したセッション属性の表示

11.4.1 SA_UTLを使用したセッション・ラベルと行ラベルの表示

SA_UTLには、セッション・ラベルと行ラベルを表示するための次のプロシージャが用意されています。

11.4.1.1 SA_UTL.NUMERIC_LABEL

このプロシージャは、現行セッション・ラベルを戻します。入力パラメータとしてポリシー名を取り、NUMBER値を戻します。

SA_UTL.NUMERIC_LABEL (policy_name) RETURN NUMBER;

11.4.1.2 SA_UTL.NUMERIC_ROW_LABEL

このプロシージャは、現行の行ラベルを戻します。入力パラメータとしてポリシー名を取り、NUMBER値を戻します。

SA_UTL.NUMERIC_ROW_LABEL (policy_name) RETURN NUMBER;

11.4.1.3 SA_UTL.DATA_LABEL

このファンクションは、ラベルがデータ・ラベルの場合はTRUEを戻します。

FUNCTION DATA_LABEL(label IN NUMBER)
RETURN BOOLEAN;

11.4.2 表の行データの読取り権限と更新権限のチェック

SA_UTLには、ポリシーのラベル付きデータに対する現行セッションのユーザー権限をチェックするための次のファンクションが用意されています。

11.4.2.1 SA_UTL.CHECK_READ

このファンクションを使用して、ユーザーがポリシーで保護されている表の行を読み取ることができるかどうかをチェックします。ユーザーが表の行を読み取ることができる場合は1が戻されます。ユーザーが表の行を読み取ることができない場合は0(ゼロ)が戻されます。入力値はポリシー名と行のデータ・ラベルです。

FUNCTION CHECK_READ (
policy_name     IN VARCHAR2,
label       IN NUMBER)
RETURN NUMBER;

注意:
表のデータを読み取るには、ユーザーにその表に対する読取り権限が必要です。

11.4.2.2 SA_UTL.CHECK_WRITE

このファンクションを使用して、ユーザーがポリシーで保護されている表の行データの挿入、更新または削除を実行できるかどうかをチェックします。ユーザーが表の行に書き込むことができる場合は1が戻されます。ユーザーが表の行に書き込むことができない場合は0(ゼロ)が戻されます。入力値はポリシー名と行のデータ・ラベルです。

FUNCTION CHECK_WRITE (
policy_name     IN VARCHAR2,
label       IN NUMBER)
RETURN NUMBER;

注意:
表にデータを書き込むには、ユーザーにその表に対する更新権限が必要です。

11.4.2.3 SA_UTL.CHECK_LABEL_CHANGE

このファンクションを使用して、ユーザーがポリシーで保護されている表の行に対するデータ・ラベルを変更できるかどうかをチェックします。ユーザーがデータ・ラベルを変更できる場合は1が戻されます。ユーザーがデータ・ラベルを変更できない場合は0(ゼロ)が戻されます。入力値は、ポリシー名、現在のデータ・ラベルおよび新しいデータ・ラベルです。

FUNCTION CHECK_LABEL_CHANGE (
policy_name     IN VARCHAR2,
current_label   IN NUMBER,
new_label       IN NUMBER)
RETURN NUMBER;

注意:
表にデータを書き込むには、ユーザーにその表に対する更新権限が必要です。

11.4.3 SA_UTLを使用したセッション・ラベルと行ラベルの設定

これらのプロシージャは、入力値として、文字列ではなく数値ラベルを使用します。これと同じファンクションを文字列書式で実行するSA_SESSIONプロシージャを使用できます。

11.4.3.1 SA_UTL.SET_LABEL

このプロシージャを使用して、現行データベース・セッションのラベルを設定します。セッションの書込みラベルと行ラベルは、書込みアクセスが認可されているラベルの区分とグループのサブセットに設定されます。

PROCEDURE SET_LABEL (policy_name IN VARCHAR2,
label IN NUMBER);

パラメータ

指定

policy_name

既存のポリシーの名前

label

セッション・ラベルとして設定するラベル

11.4.3.2 SA_UTL.SET_ROW_LABEL

このプロシージャを使用して、現行データベース・セッションの行ラベルを設定します。ラベルの区分とグループは、書込みアクセスが認可されているセッション・ラベルの区分およびグループのサブセットであることが必要です。

PROCEDURE SET_ROW_LABEL (policy_name IN VARCHAR2,
row_label IN NUMBER);

パラメータ

指定

policy_name

既存のポリシーの名前

row_label

セッションのデフォルト行ラベルとして設定するラベル

関連項目:
SA_SESSIONを使用したセッション・ラベルと行ラベルの変更

11.4.4 最大の下限と最小の上限の戻し

最大の下限と最小の上限を戻すファンクションを使用できます。

11.4.4.1 GREATEST_LBOUND

このファンクションは、2つのラベルの引数の最大の下限であるラベルを戻します。

構文:

FUNCTION GREATEST_LBOUND (label1 IN NUMBER,
label2 IN NUMBER)
RETURN NUMBER;

11.4.4.2 LEAST_UBOUND

このファンクションは、ラベルの引数の最小の上限であるOracle Label Securityのラベルを戻します。

構文:

FUNCTION LEAST_UBOUND (label1 IN NUMBER,
label2 IN NUMBER)
RETURN NUMBER;

関連項目:
「ラベルの上限と下限の決定」を参照してください。前述のファンクションは第4章で説明したファンクションと同じですが、文字列ではなく番号を戻します。

12Oracle Label Securityでの監査

Oracle Database監査機能では、実行する操作に責任を持つデータベース・ユーザーを保持できます。特定のデータベース・オブジェクト、操作、ユーザーおよび権限を追跡できます。Oracle Label Securityはこの機能を補完するために、独自の管理操作とポリシー権限の使用を追跡します。また、ポリシー監査オプションを設定および変更するためのSA_AUDIT_ADMINパッケージも用意されています。

この章では、Oracle Label Securityの監査機能の使用方法について説明します。この章の内容は、次のとおりです。

- Oracle Label Securityの監査の概要

- システム単位の監査の有効化: AUDIT_TRAIL初期化パラメータ

- Oracle Label Security用の監査証跡ビューの作成および削除

- Oracle Label Securityの監査のヒント

12.1 Oracle Label Securityの監査の概要

Oracle Label Securityの監査は標準Oracle Database監査を補完するために、独自の管理操作とポリシー権限の使用を追跡します。SA_AUDIT_ADMINパッケージまたはOracle Enterprise Managerを使用して、Oracle Label Securityポリシーの監査オプションを設定および変更できます。

新規ポリシーを作成すると、そのポリシーのラベル列がデータベースの監査証跡に追加されます。ラベル列は、監査機能が有効か無効か、およびデータベースの監査とオペレーティング・システムの監査のどちらを使用するかに関係なく作成されます。監査表にレコードが書き込まれるたびに、各ポリシーはそのレコードについてセッション・ラベルを示すラベルを提供します。管理者は監査ビューを作成し、これらのラベルを表示できます。監査表では、ラベルは行へのアクセスを制御するのではなく、行の機密性を記録するのみであることに注意してください。

指定した監査オプションは、現行セッションではなく後続のセッションにのみ適用されます。監査オプションは、監査が無効化されている場合にも指定できます。このように指定するのみではオーバーヘッドは発生しません。Oracle Label Security監査を有効にすると、オプションが有効になり、標準Oracle Database監査によって作成されたオーバーヘッド以外のオーバーヘッドが生成されます。

Oracle Label Securityでは、オペレーティング・システムの監査証跡に書き込まれる監査データ用のラベルは提供されないことに注意してください。Oracle Label Securityのすべての監査レコードは、オペレーティング・システムの監査が有効化されている場合にも、データベースの監査証跡に直接書き込まれます。監査が無効化されている場合、Oracle Label Securityの監査レコードは生成されません。

12.2 システム単位の監査の有効化: AUDIT_TRAIL初期化パラメータ

Oracle Label Securityで監査レコードを生成するには、最初にデータベースのパラメータ・ファイルでOracle Database AUDIT_TRAIL 初期化パラメータを設定してシステム全体の監査を有効にする必要があります。このパラメータは、次のいずれかの値に設定できます。

表12-1 AUDIT_TRAILパラメータの設定

設定

説明

DB

データベース監査を有効化し、すべての監査レコードをデータベースの監査証跡に送ります。このアプローチを選択するようにお薦めします。

AUDIT_TRAILをDBに設定しても、一部のレコードは常にオペレーティング・システムの監査証跡に送られることに注意してください。これには、STARTUPおよびSHUTDOWN文や、CONNECT AS SYSOPERまたはSYSDBAが含まれます。

DB, EXTENDED

AUDIT_TRAIL=DBに設定した場合のアクションをすべて実行し、AUD$表のSqlBindおよびSqlText CLOB型の列を移入します。

OS

オペレーティング・システムの監査を有効化します。これにより、ほとんどのOracle Database監査レコードがデータベースではなくオペレーティング・システムに送られます。レコードには、Oracle Label Securityラベルは含まれません。これに対して、Oracle Label Securityの監査はすべてラベルとともにデータベースに送られます。

AUDIT_TRAILをOSに設定した場合、Oracle Label Security固有の監査レコードはデータベース監査証跡に書き込まれ、他のOracle Database監査レコードはオペレーティング・システム監査証跡(オペレーティング・システム・データにポリシー列はありません)に書き込まれます。

NONE

監査を無効化します。これはデフォルトです。

パラメータ・ファイルの編集後に、データベース・インスタンスを再起動して、指定したデータベースの監査を有効化または無効化します。

監査オプションを設定する前に、AUDIT_TRAILパラメータを設定してください。このパラメータを設定しなくても、監査オプションは設定できます。ただし、このパラメータを設定してデータベース・インスタンスを再起動するまで、監査レコードはデータベースに書き込まれません。

関連項目:
システム単位の監査の有効化と無効化、監査オプションの設定および監査証跡の管理の詳細は、『Oracle Database管理者ガイド』を参照してください。
初期化パラメータの編集方法は、『Oracle Databaseリファレンス』を参照してください。

システム単位のAUDITおよびNOAUDITの機能の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

12.3 SA_AUDIT_ADMINを使用したOracle Label Securityの監査の有効化

システム単位の監査を有効化した後に、SA_AUDIT_ADMINプロシージャを使用してOracle Label Securityの監査を有効化または無効化できます。Oracle Label Securityの監査を使用するには、policy_typeロールが必要です。

- Oracle Label Securityの監査オプション

- SA_AUDIT_ADMIN.AUDITを使用したOracle Label Securityの監査の有効化

- SA_AUDIT_ADMIN.NOAUDITを使用したOracle Label Securityの監査の無効化

- DBA_SA_AUDIT_OPTIONSビューを使用した監査オプションの検査

12.3.1 Oracle Label Securityの監査オプション

AUDITおよびNOAUDITオプションは、次のとおりです。

表12-2 Oracle Label Securityの監査オプション

オプション

説明

APPLY

表およびスキーマに対する指定したOracle Label Securityポリシーの適用を監査します。

REMOVE

表およびスキーマからの指定したOracle Label Securityポリシーの削除を監査します。

SET

ユーザー認証およびユーザーとプログラムの権限の設定を監査します。

PRIVILEGES

ポリシー固有のすべての権限の使用を監査します。

12.3.2 SA_AUDIT_ADMIN.AUDITを使用したOracle Label Securityの監査の有効化

AUDITプロシージャを使用して、ポリシー固有の監査を有効化します。

構文:

PROCEDURE AUDIT (
policy_name     IN VARCHAR2,
users           IN VARCHAR2 DEFAULT NULL,
option          IN VARCHAR2 DEFAULT NULL,
type            IN VARCHAR2 DEFAULT NULL,
success         IN VARCHAR2 DEFAULT NULL);

パラメータ

説明

デフォルト動作

policy_name

必須。既存のポリシーの名前を指定します。各ポリシーの監査は、他のすべてから独立しています。

なし

users

オプション。監査するユーザー名のカンマ区切りのリストです。指定しない場合は、すべてのユーザーが監査対象となります。

すべてのユーザー

option

オプション。監査するオプションのカンマ区切りのリストです。表12-1を参照してください。
指定しない場合、すべてのデフォルト・オプション(つまり権限を含まないオプション)が監査されます。すべての権限の監査オプションを設定するPRIVILEGESオプションを指定して、権限付き操作の監査オプションを明示的に設定する必要があります。

すべてのオプション

type

オプション。BY ACCESSまたはBY SESSIONを指定します。指定しない場合は、監査レコードはセッション別に書き込まれます。

BY SESSION

success

オプション。SUCCESSFULまたはNOT SUCCESSFULを指定します。指定しない場合は、両方の監査が書き込まれます。

SUCCESSFULおよびNOT SUCCESSFUL

管理者が監査オプションを指定しない場合は、権限関連のオプションを除き、すべてのオプションが監査されます。権限の監査は明示的に指定する必要があります。たとえば、管理者が次のように入力すると、

SA_AUDIT_ADMIN.AUDIT ('HR');

HRポリシーについてデフォルトの監査オプションが設定されます。管理者が監査を有効化すると、成否に関係なく、すべてのユーザーについてセッション別に実行されます。

監査パラメータおよびオプションを設定すると、新しい値は現行セッションではなく後続のセッションにのみ適用されます。

あるAUDITコール(ユーザー指定なし)で全ユーザーについてAPPLY操作の監査を有効化し、2番目のコールで特定のユーザーについてREMOVE操作の監査を有効化する場合を考えます。次に例を示します。

SA_AUDIT_ADMIN.AUDIT ('HR', NULL, 'APPLY');
SA_AUDIT_ADMIN.AUDIT ('HR', 'SCOTT', 'REMOVE');

この場合、SCOTTはAPPLY操作とREMOVE操作の両方について監査対象となります。

12.3.3 SA_AUDIT_ADMIN.NOAUDITを使用したOracle Label Securityの監査の無効化

ポリシー固有の監査を無効化するには、SA_AUDIT_ADMIN.NOAUDITプロシージャを使用します。

構文:

PROCEDURE NOAUDIT (
policy_name     IN VARCHAR2,
users           IN VARCHAR2 DEFAULT NULL,
option          IN VARCHAR2 DEFAULT NULL);

パラメータ

説明

デフォルト動作

policy_name

必須。既存のポリシーの名前を指定します。

なし

users

オプション。監査するユーザー名のカンマ区切りのリストです。指定しない場合は、すべてのユーザーの監査が無効化されます。

すべてのユーザー

option

オプション。無効化するオプションのカンマ区切りのリストです。表12-2を参照してください。指定しない場合、すべてのデフォルト・オプションが無効化されます。権限は明示的に無効化する必要があります。

すべてのオプション

有効化されているすべてのオプション、またはそのサブセットのみについて監査を無効化できます。指定したオプションに対するすべての監査が、指定した全ユーザー(または、usersパラメータがNULLの場合は全ユーザー)について無効化されます。たとえば、次の文では、ユーザーJohn、MaryおよびScottについて、APPLYおよびREMOVE操作の監査が無効化されます。

SA_AUDIT_ADMIN.NOAUDIT ('HR', 'JOHN, MARY, SCOTT', 'APPLY, REMOVE');

あるAUDITコールで特定のユーザーの監査を有効化し、2番目のコール(ユーザー指定なし)で全ユーザーの監査を有効化する場合を考えます。次に例を示します。

SA_AUDIT_ADMIN.AUDIT ('HR', 'SCOTT');
SA_AUDIT_ADMIN.AUDIT ('HR');

この場合、ユーザーを指定せずに以降にNOAUDITを(次のように)コールすると、

SA_AUDIT_ADMIN.NOAUDIT ('HR');

最初のコールでSCOTTについて明示的に設定した監査は無効化されません。したがって、SCOTTの監査は引き続き実行されます。このため、すべてのユーザーに対してNOAUDITを設定しても、Oracle Label Securityでは監査が明示的に設定されているユーザーは引き続き監査されます。

権限付き操作の監査は明示的に指定する必要があります。オプションを指定せずにNOAUDITを実行しても、Oracle Label Securityでは権限付き操作が引き続き監査されます。たとえば、監査を有効にして次のように入力すると、

SA_AUDIT_ADMIN.NOAUDIT ('HR');

権限付き操作(WRITEDOWNなど)については引き続き監査が実行されます。

設定したNOAUDITパラメータおよびオプションは、現行セッションではなく後続のセッションにのみ適用されます。

設定済の監査オプションの有効化を試みたり、設定されていない監査オプションの無効化を試みると、Oracle Label Securityでは文は処理され、エラーは表示されません。無効なオプションの指定を試みると、エラー・メッセージが表示されます。

12.3.4 DBA_SA_AUDIT_OPTIONSビューを使用した監査オプションの検査

この項では、Oracle Label Securityの監査オプションおよび権限を表示するビューについて説明します。

DBA_SA_AUDIT_OPTIONSビューには、次の列が表示されます。

表12-3 DBA_SA_AUDIT_OPTIONSビューの列

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

USER_NAME

NOT NULL

VARCHAR2(30)

APY

VARCHAR2(3)

REM

VARCHAR2(3)

SET_

VARCHAR2(3)

PRV

VARCHAR2(30)

出力は次のようになります。

表12-4 DBA_SA_AUDIT_OPTIONSのサンプル出力

POLICY_NAME

USER_NAME

APY

REM

SET

PRV

HR

SCOTT

-/-

-/-

-/-

A/A

HR

LBACSYS

S/S

S/S

S/S

-/-

関連項目:
『Oracle Databaseセキュリティ・ガイド』の第11章

12.4 ポリシー・ラベルの監査の管理

この項では、ポリシー・ラベルの監査の管理に使用できるプロシージャについて説明します。

- SA_AUDIT_ADMIN.AUDIT_LABELを使用したポリシー・ラベルの監査

- SA_AUDIT_ADMIN.NOAUDIT_LABELを使用したポリシー・ラベルの監査の無効化

- AUDIT_LABEL_ENABLEDを使用したラベルの監査ステータスの検索

12.4.1 SA_AUDIT_ADMIN.AUDIT_LABELを使用したポリシー・ラベルの監査

AUDIT_LABELプロシージャを使用して、監査中にポリシー・ラベルを記録します。これにより、ユーザーのセッション・ラベルが監査表に格納されます。

構文:

PROCEDURE AUDIT_LABEL (
policy_name     IN VARCHAR2);

パラメータ

説明

デフォルト

policy_name

必須。既存のポリシーの名前を指定します。

なし

12.4.2 SA_AUDIT_ADMIN.NOAUDIT_LABELを使用したポリシー・ラベルの監査の無効化

NOAUDIT_LABELプロシージャを使用して、ポリシー・ラベルの監査を無効化します。

構文:

PROCEDURE NOAUDIT_LABEL (
policy_name     IN VARCHAR2);

パラメータ

説明

デフォルト

policy_name

必須。既存のポリシーの名前を指定します。

なし

12.4.3 AUDIT_LABEL_ENABLEDを使用したラベルの監査ステータスの検索

AUDIT_LABEL_ENABLEDファンクションを使用して、ラベルがポリシーの監査レコードに記録されているかどうかを確認します。

構文:

FUNCTION AUDIT_LABEL_ENABLED (policy_name IN VARCHAR2)
RETURN boolean;

12.5 Oracle Label Security用の監査証跡ビューの作成および削除

この項には、次の項目が含まれます。

- SA_AUDIT_ADMIN.CREATE_VIEWを使用したビューの作成

- SA_AUDIT_ADMIN.DROP_VIEWを使用したビューの削除

12.5.1 SA_AUDIT_ADMIN.CREATE_VIEWを使用したビューの作成

CREATE_VIEWプロシージャは、DBA_policyname_AUDIT_TRAILという名前の監査証跡ビューを作成します。これには、指定したポリシーのラベル列、およびこのポリシーのかわりに書き込まれた監査証跡内のすべてのエントリが含まれます。ビュー名がデータベースの制限である30文字を超えた場合、ユーザーはオプションで短いビュー名を指定できます。

構文(2つのうち一方):

1. パラメータが1つのプロシージャ

PROCEDURE CREATE_VIEW (
policy_name     IN VARCHAR2);

policy_nameでは既存のポリシーの名前を指定します。

または

2. パラメータが2つのプロシージャ

PROCEDURE CREATE_VIEW (
policy_name     IN VARCHAR2,
view_name       IN VARCHAR2    DEFAULT NULL);

policy_nameでは既存のポリシーの名前を指定します。view_nameはオプションのパラメータで、必要なビュー名を14文字以内で指定します。

12.5.2 SA_AUDIT_ADMIN.DROP_VIEWを使用したビューの削除

DROP_VIEWプロシージャでは、指定したポリシーの監査証跡ビューを削除します。

構文(2つのうち一方):

1. パラメータが1つのプロシージャ

PROCEDURE DROP_VIEW (
policy_name     IN VARCHAR2);

policy_nameでは既存のポリシーの名前を指定します。

または

2. パラメータが2つのプロシージャ

PROCEDURE DROP_VIEW (
policy_name     IN VARCHAR2,
view_name       IN VARCHAR2    DEFAULT NULL);

policy_nameでは既存のポリシーの名前を指定します。view_nameはオプションのパラメータで、既存のビューの名前を14文字以内で指定します。

注意:
リリース10iまでは監査ビューの作成にSA_AUDIT_ADMIN.CREATE_VIEWを使用していましたが、そのビューにはリリース10iの監査レコードのタイムスタンプ・フィールドは表示されません。Oracle Label Securityでは、リリース10iより前のOracle Label Securityのすべての監査ビューを削除し、SA_AUDIT_ADMIN.DROP_VIEWおよびSA_AUDIT_ADMIN.CREATE_VIEWを使用して再作成することをお薦めします。

12.6 Oracle Label Securityの監査のヒント

この項には、次の項目が含まれます。

- SA_AUDIT_ADMINオプションの設定方針

- 権限付き操作の監査

12.6.1 SA_AUDIT_ADMINオプションの設定方針

監査オプションを設定する前に、必要以上のイベントを記録せずに問題のイベントを監視するように、監査方針を検討する必要があります。アプリケーション、ユーザー・ベース、構成および他の外部要因が変化することがあるため、この方針は定期的に見直してください。

Oracle Label Securityオプション、およびOracle Database監査機能によって提供されたオプションは、特定の監査要件またはアプリケーションに依存する監査要件のすべてに直接には対処しないことがあります。ただし、データベース・トリガーを使用すると、より汎用的な監査機能では監査したり記録できない特定のイベントを監査し、特定の情報を記録できます。

関連項目:
監査にトリガーを使用する方法の詳細は、『Oracle Database概要』を参照してください。

12.6.2 権限付き操作の監査

Oracle Label Securityの権限を必要とする操作を監査する場合を考えます。これらの権限では機密性の高い操作が実行され、適正に使用されなければセキュリティを侵害する可能性があるため、表示と使用を厳密に監視する必要があります。

13分散データベースでのOracle Label Securityの使用

この章では、Oracle Label Securityを分散構成で使用する場合の考慮事項について説明します。この章の内容は、次のとおりです。

- Oracle Label Securityの分散構成

- Oracle Label Securityでのリモート・データベースへの接続

- リモート・セッション用のセッション・ラベルと行ラベルの確立

- 分散環境でのラベルのセットアップ

- 分散環境でのOracle Label Securityポリシーの使用

- Oracle Label Securityでのレプリケーションの使用

13.1 Oracle Label Securityの分散構成

分散データベースをサポートするネットワーク構成には、複数のOracle Databaseサーバー、あるいは同じオペレーティング・システムまたは異なるオペレーティング・システムで実行されている他のデータベース・サーバーを含めることができます。分散システム内の各コオペラティブ・サーバーは、他のクライアントやサーバーとネットワーク経由で通信します。

図13-1「分散データベースでのOracle Label Securityの使用」に、クライアントとサーバーを含む分散データベースでOracle Label Securityを使用する場合と使用しない場合を示します。この章で説明するように、WESTERN_REGIONデータベースからEASTERN_REGIONデータベースへのデータベース・リンクを確立すると、EASTERN_REGIONでのユーザーIDが表示を認可されていれば、このアクセス権をローカル(WESTERN_REGION)では持っていない場合にも、データにアクセスできます。

図13-1 分散データベースでのOracle Label Securityの使用

13.2 Oracle Label Securityでのリモート・データベースへの接続

分散データベースは、Oracle Label Securityでは標準的な方法で動作します。ローカル・ユーザーは最終的に特定のリモート・ユーザーとして接続されます。Oracle Label Securityは、ローカルとリモートのどちらで接続するかにかかわらず、ラベル付きデータを保護します。リモート・ユーザーに適切なラベルがある場合は、データにアクセスできます。そうでない場合は、データにアクセスできません。

データベース・リンクにより、リモート・データベースへの接続が設定され、リモート・セッションに対応付けられるユーザーが識別されます。リモート・データベース上でのOracle Label Securityの認可は、データベース・リンクで識別されたリモート・ユーザーの認証に基づきます。

たとえば、次のように、ローカル・ユーザーJANEが、接続文字列salesで参照されるデータベースにリモート・ユーザーAUSTENで接続するとします。

CREATE DATABASE LINK sales
CONNECT TO austen IDENTIFIED BY pride
USING 'sales'

データベース・リンクで識別されるユーザーはAUSTENであるため、接続時のJANEの認可はリモート・ユーザーAUSTENのラベルと権限に基づいています。JANEがリモート・データベースを最初に参照するときに、リモート・セッションが実際に確立されます。たとえば、JANEが次のように入力すると、リモート・セッションが作成されます。

SELECT * FROM emp@sales

ローカル・データベース内のOracle Label Securityポリシーのユーザーである必要はありません。リモート・データベース上でポリシー・ユーザーとして接続すると、保護されているデータにアクセスできます。

13.3 リモート・セッション用のセッション・ラベルと行ラベルの確立

リモートで接続すると、接続の確立時に有効なセッション・ラベルと行ラベルを直接制御できます。接続時には、これらの値が(すべてのポリシーについて)Oracle Label Securityからリモート・データベースに渡されます。次の点に注意してください。

- ローカルのセッション・ラベルと行ラベルは、リモート・ユーザーに有効であれば、リモート・セッションのデフォルトとして使用されます。

- リモート・セッションには、リモート・ユーザーの最小認可と最大認可による制約が適用されます。

- ローカル・ユーザーのセッション・ラベルはリモート・データベースに渡されますが、その権限は渡されません。リモート・セッションの場合の権限は、リモート・ユーザーに対応付けられています。

最大レベルがHS、セッション・レベルがSのローカル・ユーザーDianaを考えます。リモート・データベース上では、データベース・リンクで識別されたリモート・ユーザーは最大レベルSを持つことになります。

- Dianaのセッション・ラベルがデータベース・リンクの確立時にSであれば、Sラベルが渡されます。これは有効なラベルです。Dianaは接続してSENSITIVEデータを読み取ることができます。

- Dianaのセッション・ラベルがデータベース・リンクの確立時にHSであれば、HSラベルが渡されますが、これはリモート・ユーザーには無効です。Dianaは、リモート・ユーザーのデフォルト・ラベル(S)を使用することになります。

リモート・データベースに初めて接続するときに実行中のラベルに注意してください。データベース・リンクを初めて参照すると、接続時にローカルのセッション・ラベルがリモート・システムに送られます。その後はラベルを変更できますが、そのためにはリモート・データベース上でSA_SESSION.SET_LABELプロシージャを実行する必要があります。

DianaはレベルHSで接続し、ラベルをSに設定してからリモート・アクセスを実行できます。接続は、データベース・リンクの確立時に暗黙的に行われます。このユーザーのデフォルト・ラベルは、リモート・データベース上ではSです。

ローカル・データベース上では、Dianaはセッション・ラベルを最大レベルであるHSに設定できますが、リモート・ユーザーのラベルがSに設定されている場合は、リモート・データベースから取り出せるのはSデータのみです。分散問合せを実行すると、ローカル・データベースからはHSデータ、リモート・データベースからはSデータを取得します。

13.4 分散環境でのラベルのセットアップ

ポリシーで保護するすべてのデータベースで、同じラベル・コンポーネント定義とラベル・タグを使用することをお薦めします。

- 分散環境でのラベル・タグの設定

- 分散環境での数値書式によるラベル・コンポーネントの設定

13.4.1 分散環境でのラベル・タグの設定

分散環境では、複数のデータベース間で同じラベル・タグを使用するように選択できます。ただし、複数のデータベースで同じタグを使用しないことを選択した場合は、リモート操作の実行時にラベルの文字書式を取得する必要があります。これにより、ラベルの一貫性が保たれます。

次の例では、ラベル文字列の文字列表現は同じです。ただし、ラベル・タグが異なります。取り出されたラベル・タグの値がWESTERN_REGIONデータベース上では11であっても、EASTERN_REGIONデータベース上では2001であれば、タグは意味を持ちません。重大な結果が生じる可能性があります。

図13-2 分散データベースでのラベル・タグ

リモート・システムからラベルを取り出す場合は、両方のデータベースで同じ数値ラベルを使用している場合を除き、文字列表現を(数値ラベル・タグではなく)戻す必要があります。

Oracle Label Securityで、異なるデータベース上で自動的にラベルを生成できるようにする場合、ラベル・タグは同一になりません。両方のインスタンスで同じラベル・タグを持つラベルを事前に定義しないかぎり、文字列には意味がありますが、数値に意味はありません。

ラベル・タグが複雑にならないように、取出し時には(LABEL_TO_CHARを使用して)ラベルを文字列に変換し、ラベルの格納時にはCHAR_TO_LABELを使用できます。コンポーネント名が同じであれば、操作は成功します。

13.4.2 分散環境での数値書式によるラベル・コンポーネントの設定

分散環境では、ラベルが適切にソートされるように、レベル・コンポーネントの数値書式による同じ相対ランキングを使用する必要があります。

次の例で、2つのデータベース内のレベルは実際には同じです。数値書式は異なりますが、各レベルの数値書式の相対ランキングは同じです。コンポーネントの相対順序が同じであれば、ラベルは同一とみなされます。

図13-3 分散データベースでのラベル・コンポーネント

13.5 分散環境でのOracle Label Securityポリシーの使用

Oracle Label Securityでは、すべての標準Oracle Database分散構成がサポートされます。保護されているデータにアクセスできるかどうかは、各分散データベースにインストールされているポリシーによって決定されます。

分散環境におけるデータベース間の関係を考慮してください。

- 同じアプリケーションを2つのデータベースで実行する場合に、両者に同じ保護を適用する場合は、ローカル・データベースとリモート・データベースの両方に同じOracle Label Securityポリシーを適用する必要があります。

- ローカル・データベースとリモート・データベースに共通するポリシーがある場合は、ローカルのセッション・ラベルと行ラベルによりリモート・ユーザーのデフォルト・ラベルがオーバーライドされます。

- リモート・データベースにローカル・データベースとは異なるポリシーがある場合は、リモート・ポリシーにより、ローカル・ポリシーから独立してデータへのアクセスを制限できます。これに対して、リモート・ポリシーについて認可を持つリモート・ユーザーで接続すると、ローカル認可に関係なく、リモート・ユーザーがアクセス権を持っているすべてのデータにアクセスできます。

リモート・データベースにポリシーが適用されていない場合は、標準的な分散データベースの場合と同様にデータにアクセスできます。

次のように、3つのデータベースでそれぞれ異なるOracle Label Securityポリシーが有効になっている場合を考えます。

データベース1にはポリシーAおよびポリシーBが適用されています。

データベース2にはポリシーAが適用されています。

データベース3にはポリシーCが適用されています。

ポリシーAの認可を持つユーザーは、データベース1およびデータベース2から保護されているデータを取得できます。リモート・ユーザーは、ポリシーCの認可を持っていれば、データベース3からもデータを取得できます。

13.6 Oracle Label Securityでのレプリケーションの使用

この項では、Oracle Label Securityポリシーにより保護されている表で、レプリケーション・オプションを使用する方法について説明します。この項の内容は、次のとおりです。

- Oracle Label Securityでのレプリケーションの概要

- マテリアライズド・ビューの内容

- Oracle Label Securityでのマテリアライズド・ビューの作成要件

- マテリアライズド・ビューのリフレッシュ方法

関連項目:

- Oracle Database 11gリリース2 (11.2)でのレプリケーションとレプリケーション環境の設定方法の詳細な説明は、Oracle Databaseアドバンスト・レプリケーションを参照してください。

- マテリアライズド・ビューの使用に関する全般情報は、『Oracle Database概要』および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

13.6.1 Oracle Label Securityでのレプリケーションの概要

この項では、Oracle Label Securityでのレプリケーションの使用方法について説明します。この項の内容は、次のとおりです。

- Oracle Label Securityでサポートされているレプリケーション機能

- Oracle Label Securityでのレプリケーションに対する行レベルのセキュリティ制限

13.6.1.1 Oracle Label Securityでサポートされているレプリケーション機能

Oracle Label Securityでは、マルチマスター・レプリケーションや更新可能なマテリアライズド・ビュー(スナップショット)など、標準的なレプリケーションおよびアドバンスト・レプリケーションがサポートされます。

Oracle Databaseでは、データのレプリケートにマテリアライズド・ビューを使用します。マテリアライズド・ビューは、マスター表の最新の状態を反映したローカルまたはリモート・マスター表のローカル・コピーです。

図13-4「レプリケーションでのマテリアライズド・ビューの使用」に示すように、マスター表は、マスター・ノードとして指定したノード上でレプリケートする表です。dblinkアカウント(REPADMINなど)を使用して、異なるデータベース内の表のマテリアライズド・ビューを作成できます。(この操作は、同じシステム上の同じデータベースでも実行できます。)リモート・マスター表から行を選択し、それらをローカル・マテリアライズド・ビューにコピーできます。ここで、mvEMPは表EMPのマテリアライズド・ビューを表し、mlog$_EMPはマテリアライズド・ビュー・ログを表します。

図13-4 レプリケーションでのマテリアライズド・ビューの使用

分散環境では、マテリアライズド・ビューにより問合せに伴うネットワークの通信量が大幅に減少し、ノードが使用できないときのデータの可用性が向上します。

13.6.1.2 Oracle Label Securityでのレプリケーションに対する行レベルのセキュリティ制限

ポリシー・オプションの1つとしてREAD_CONTROLが指定されている場合は、Oracle Label Securityポリシーにより表に行レベル・セキュリティ(RLS)が適用されます。次の条件の両方が満たされる場合は、問題が発生します。

- Oracle Label Securityポリシーがレプリケーションに関連する表(マスター表、マテリアライズド・ビュー、マテリアライズド・ビュー・ログなど)に適用されている場合

- ポリシーがSELECT文のWHERE句の述語を戻す場合

追加の述語(およびこの問題)を回避するには、レプリケーション環境に関係するユーザーに必要なOracle Label Security権限を付与する必要があります。データベース・リンクで指定された特定のユーザー(REPADMINやマテリアライズド・ビューの所有者など)に、READまたはFULL権限が必要です。その結果、レプリケーションの実行に使用される問合せはRLSにより変更されなくなります。

関連項目:
『Oracle Database概要』

13.6.2 マテリアライズド・ビューの内容

この項では、マテリアライズド・ビューの内容について説明します。

- マテリアライズド・ビューの内容の決定方法

- 完全マテリアライズド・ビュー

- 部分マテリアライズド・ビュー

13.6.2.1 マテリアライズド・ビューの内容の決定方法

Oracle Label Securityでは、マテリアライズド・ビューの作成時に次の手順が実行されます。各手順によりビューの内容が決定されます。

1. リモート・データベース内のマスター表の定義が読み取られます。

2. マスター表内で、マテリアライズド・ビュー定義に定義されている条件を満たす行が読み取られます。

3. 各行がローカル・データベースのマテリアライズド・ビューに書き込まれます。

Oracle Label Securityでは、ローカル・データベース内で書込みアクセス権を持っている行のみが書き込まれるため、マテリアライズド・ビューの内容は次のものに応じて異なります。

- 有効なポリシー・オプション

- ローカル・データベース内で定義した権限

- セッション・ラベル

13.6.2.2 完全マテリアライズド・ビュー

マスター表のすべての行を読み取り、ローカル・データベース内でマテリアライズド・ビューの各ラベルへの書込みアクセス権を持っていれば、結果はマスター表の完全マテリアライズド・ビューとなります。マテリアライズド・ビューが完全であることを保証するには、マスター表のすべてのデータへの読取りアクセス権と、ローカル・データベース内でマスター表にデータが格納されるすべてのラベルへの書込みアクセス権を持つようにします。

注意:
マテリアライズド・ビューの作成時に付与した権限は取り消さないでください。取り消すと、レプリケーションのリフレッシュを実行できなくなる場合があります。

13.6.2.3 部分マテリアライズド・ビュー

部分マテリアライズド・ビューが作成されるのは、マテリアライズド・ビュー定義にWHERE句を指定した場合です。これは、リモート・データベースにデータのサブセットを渡す場合に便利な方法です。

注意:
部分マテリアライズド・ビューを作成するには、レプリケートするすべての行への書込みアクセス権が必要です。

13.6.3 Oracle Label Securityでのマテリアライズド・ビューの作成要件

マテリアライズド・ビューの作成要件は、作成するマテリアライズド・ビューのタイプに応じて異なります。

- REPADMINアカウントの要件

- マテリアライズド・ビューの所有者の要件

- マルチレベルの部分マテリアライズド・ビューの作成要件

- マルチレベルの完全マテリアライズド・ビューの作成要件

13.6.3.1 REPADMINアカウントの要件

REPADMINアカウントの要件は、構成に応じて異なります。ただし、通常は次の要件を満たす必要があります。

- FULL Oracle Label Security権限(すべての構成に必須)が必要です。

- マスター表に対するSELECT権限が必要です。

- リモート・ノードからマスター表を含むデータベースへのデータベース・リンクを確立するアカウントであることが必要です。

関連項目:
『Oracle Databaseアドバンスト・レプリケーション』

13.6.3.2 マテリアライズド・ビューの所有者の要件

マテリアライズド・ビューのリフレッシュ中には、そのマテリアライズド・ビューの所有者に属する権限が使用されることに注意してください。これらの権限が十分でない場合は、次の2つのオプションがあります。

- マテリアライズド・ビューをREPADMINアカウントで作成できます。

- マテリアライズド・ビューの所有者に追加の権限を付与する必要があります。

たとえば、ユーザーSCOTTにより作成された次のマテリアライズド・ビューを考えます。

CREATE MATERIALIZED VIEW mvemp as
SELECT *
FROM EMP@link_to_master
WHERE label_to_char(sa_label) = 'HS';

SCOTTは、ローカル・データベースにHSレベルでレコードを挿入するための許可を持つ必要があります。このマテリアライズド・ビューにOracle Label Securityポリシーが適用されている場合、SCOTTはRLSの制限を回避するためにFULL権限を持つ必要があります。

Oracle Label Securityポリシーがマテリアライズド・ビューに適用されるかどうかや、マテリアライズド・ビューの所有者にどのような権限が付与されているかなどに応じて、様々な構成をセットアップできます。Oracle Label Securityポリシーがマテリアライズド・ビューに適用されていても、SCOTTにFULL権限を付与しない場合、マテリアライズド・ビューを作成するにはREPADMINアカウントを使用する必要があります。SCOTTには、その表に対するSELECT権限を付与できます。

マテリアライズド・ビューにポリシーが適用されない場合は、権限を追加せずにSCOTTのスキーマにビューを作成できます。この場合、マテリアライズド・ビューは、WHERE条件でレコードをSCOTTが読み取れるレコードに限定するように作成する必要があります。

最後に、SCOTTにFULL権限を付与できる場合は、SCOTTのスキーマにマテリアライズド・ビューを作成し、Oracle Label Securityポリシーも適用できます。

マスター表に対するOracle Label Securityポリシーには、任意のポリシー・オプション・セットを含めることができることに注意してください。SCOTTがFULLまたはREAD権限を持っている場合は、ポリシー・オプションに関係なくすべての行を選択できます。

13.6.3.3 マルチレベルの部分マテリアライズド・ビューの作成要件

Oracle Label Securityで保護されているリモート・マスター表のうち、一部の行のみを含む部分マテリアライズド・ビューを作成するには、問合せにより取り出した各ラベルで、ローカル・データベースに書き込むための十分な権限が必要です。

13.6.3.4 マルチレベルの完全マテリアライズド・ビューの作成要件

Oracle Label Securityで保護されているリモート・マスター表の各行を含む完全マテリアライズド・ビューを作成するには、定義済のマテリアライズド・ビュー問合せにより取り出したすべての行のラベルで、ローカル・データベースに書き込むことができる必要があります。

13.6.4 マテリアライズド・ビューのリフレッシュ方法

マスター表の内容または定義に変更があった場合は、その内容が正確に反映されるようにマテリアライズド・ビューをリフレッシュします。リモートのマルチレベル表のマテリアライズド・ビューをリフレッシュするには、マテリアライズド・ビュー問合せにより取り出されたすべての行のラベルで、ローカル・データベースに書き込むための権限も必要になります。

警告:

部分マテリアライズド・ビューまたは完全マテリアライズド・ビューをリフレッシュしても、マスター表のすべての行へのREADアクセス権を持っていない場合は、マテリアライズド・ビューに古い行が含まれる可能性があります。その結果、元のマテリアライズド・ビューはマスター表からの更新済の行で上書きされません。

正確なマテリアライズド・ビューがリフレッシュされるように、オプションのマテリアライズド・ビュー・バックグラウンド・プロセスSNPnを使用して、ビューを自動的にリフレッシュします。これらのプロセスには、ビューが完全にリフレッシュされることを保証するために、マスター表のすべての行を読み取るための権限と、読み取った行をマテリアライズド・ビューに書き込むための権限が必要です。これらのプロセスでは、マテリアライズド・ビュー所有者の権限が使用されることに注意してください。

関連項目:
SNPnバックグラウンド・プロセスの詳細は、『Oracle Database管理者ガイド』を参照してください。

14 Oracle Label SecurityでのDBAファンクションの実行

標準Oracle DatabaseユーティリティはOracle Label Securityで使用できますが、一定の制限が適用され、期待される結果を得るには追加の手順が必要になる場合があります。この章では、このような考慮事項について説明します。この章の説明では、NUMBER型のポリシー・ラベル列を使用する場合を想定しています。

この章の内容は、次のとおりです。

- Oracle Label Securityでのエクスポート・ユーティリティの使用

- Oracle Label Securityでのインポート・ユーティリティの使用

- Oracle Label SecurityでのSQL*Loaderの使用

- Oracle Label Securityのパフォーマンス上のヒント

- インストール後のデータベースの追加作成

14.1 Oracle Label Securityでのエクスポート・ユーティリティの使用

エクスポート・ユーティリティは、Oracle Label Securityで標準的な方法で動作します。ただし、Oracle Label Securityポリシーの施行結果にいくつか違いがあります。

- Oracle Label Securityポリシーで保護されている表の場合は、読取りアクセスが認可されているラベル付きの行のみがエクスポートされます。認可されていない行は、エクスポート・ファイルに含まれません。したがって、保護された表のすべてのデータをエクスポートするには、完全なアクセス権を付与する権限(FULLやREADなど)が必要です。

- ポリシーを再適用するSQL文は、エクスポート対象の表およびスキーマとともにエクスポートされます。この種の文はインポート中に実行され、元のデータベース内と同じ施行オプションを使用してポリシーが再適用されます。

- HIDEプロパティはエクスポートされません。保護されている表をエクスポートすると、その表のラベル列も(数値として)エクスポートされます。ただし、ラベル列が非表示に設定されていると、通常の表示列としてエクスポートされます。

- Oracle Label Securityでは不透明な型が使用されるため、LBACSYSスキーマはエクスポートできません。Oracle Label Securityをインストールした状態でデータベース全体をエクスポートできますが(パラメータFULL=Y)、LBACSYSスキーマはエクスポートされません。

関連項目:
『Oracle Databaseユーティリティ』

14.1.1 Oracle Label Securityでのデータ・ポンプ・エクスポート・ユーティリティの使用

表のすべての行をエクスポートするには、ユーザーにEXEMPT ACCESS POLICYが必要で、そうでない場合は行がエクスポートされません。この制限は、前述したエクスポート制限に加えて適用されます。

14.2 Oracle Label Securityでのインポート・ユーティリティの使用

この項では、Oracle Label Securityでのインポート・ユーティリティの機能について説明します。

- Oracle Label Securityでのインポート要件

- インポート用データ・ラベルの定義

- Oracle Label Securityをインストールしない場合のラベル付きデータのインポート

- ラベルなしデータのインポート

- 非表示列を含む表のインポート

関連項目:
『Oracle Databaseユーティリティ』

14.2.1 Oracle Label Securityでのインポート要件

Oracle Label Securityでインポート・ユーティリティを使用するには、インポート・データベースを準備し、インポート・ユーザーが適切な認可を持っているかどうかを確認する必要があります。

14.2.1.1 インポート・データベースの準備

Oracle Label Securityでインポート・ユーティリティを使用する前に、次の手順でインポート・データベースを準備する必要があります。

1. Oracle Label Securityをインストールします。

2. インポート対象のデータを保護するOracle Label Securityポリシーを作成します。このポリシーでは、エクスポート・データベースと同じ列名を使用する必要があります。

3. インポート・データベース内で、インポート対象の表に使用されているラベル・コンポーネントと個々のラベルをすべて定義します。各データベース内でポリシー・ラベルに割り当てるタグ値は同じにする必要があります。(エクスポート元のデータベースにインポートする場合、通常はコンポーネントがすでに定義されていることに注意してください。)

14.2.1.2 インポート・ユーザーの認証の検証

Oracle Label Securityでデータを正常にインポートするには、インポート操作を実行するユーザーは、エクスポート・ファイルに含まれているデータとラベルの挿入に必要なすべてのラベルに対する認可を受ける必要があります。次の要件が満たされない場合は、インポート時にエラーが発生します。

要件1: すべての行を確実にインポートできるように、ユーザーはインポート対象となるデータを持つすべてのポリシーについてpolicy_DBAロールを持つ必要があります。各スキーマまたは表のインポート後は、インポートされたオブジェクトにエクスポート・データベースからのポリシーが再適用されます。

要件2: ユーザーは、エクスポートされたすべての行を書き込めるようにする必要があります。そのためには、次の3つの方法があります。

- ユーザーにFULL権限を付与できます。

- 表にユーザー定義のラベル付けファンクションを適用できます。

- ユーザーに、インポート・ファイルに含まれるすべてのラベルを書き込める十分な認可を付与できます。

14.2.2 インポート用データ・ラベルの定義

インポート時のラベル定義には、エクスポート・ファイルで使用されているポリシー・ラベルをすべて含める必要があります。エクスポート・データベース内でビューDBA_SA_LEVELS、DBA_SA_COMPARTMENTS、DBA_SA_GROUPSおよびDBA_SA_LABELSを使用すると、インポート・データベース内でポリシーごとにラベル・コンポーネントとラベルを再作成するSQLスクリプトを設計できます。次の例に、HRポリシーについて個々のラベルを再作成するPL/SQLブロックの作成方法を示します。

set serveroutput on
BEGIN
dbms_output.put_line('BEGIN');
FOR l IN (SELECT label_tag, label
FROM dba_sa_labels
WHERE policy_name='HR'
ORDER BY label_tag) LOOP
dbms_output.put_line
('  SA_LABEL_ADMIN.CREATE_LABEL(''HR'', ' ||
l.label_tag || ', ''' || l.label || ''');');
END LOOP;
dbms_output.put_line ('END;');
dbms_output.put_line ('/');
END;
/

インポート・データベース内に、エクスポート・データベース内と同じ数値および文字列表現を持つ個々のラベルが存在しない場合、インポートされた表内のラベル値は無意味になります。表内の数値ラベル値が異なる文字列表現を参照したり、インポート・データベース内で定義されていないラベル値である場合があります。

ユーザーが無効な数値ラベルを含む行へのアクセスを試みると、操作は失敗します。

14.2.3 Oracle Label Securityをインストールしない場合のラベル付きデータのインポート

ポリシーのラベル列がNUMBER型として定義されている場合は、Oracle Label Securityがインストールされていないデータベースにインポートできます。この場合、ポリシーのラベル列の値は番号としてインポートされます。対応するOracle Label Securityのラベル定義がなければ、この番号で特定のラベルは参照されません。

Oracle Label Securityがインストールされていない場合は、インポートされた表とスキーマにポリシーを再適用するSQL文が失敗するため、インポート中にエラーが発生することに注意してください。

14.2.4 ラベルなしデータのインポート

Oracle Label Securityポリシーで保護されている既存の表に、ラベルなしのデータをインポートできます。表への挿入時に行のラベルを自動的に初期化できるように、インポート対象となる表ごとにLABEL_DEFAULTオプションまたはラベル付けファンクションを指定する必要があります。

14.2.5 非表示列を含む表のインポート

非表示列は通常の列としてエクスポートされ、非表示ではなくなります。ラベル列の非表示プロパティを保つ場合は、表をインポート・データベース内に事前に作成する必要があります。

1. インポートを実行する前に、表を作成し、HIDEオプションを指定してポリシーを適用します。これにより、ポリシーのラベル列は表に非表示列として追加されます。

2. エクスポート・ファイル内で指定した施行オプションをインポート操作中に表に再適用できるように、表からポリシーを削除します。

3. IGNORE=Yを指定してインポートを実行します。IGNOREパラメータをYに設定すると、インポート時のエラーが無視されます。

4. HIDEオプションを指定して、表にポリシーを手動で適用します。

14.3 Oracle Label SecurityでのSQL*Loaderの使用

SQL*Loaderは、外部ファイルからOracle Database内の表にデータを移動します。この項には、次の項目が含まれます。

- Oracle Label SecurityでのSQL*Loaderの使用要件

- Oracle Label SecurityからSQL*Loaderへの入力

関連項目:
ログ・ファイル、廃棄ファイル、エラー・ファイルなど、SQL*Loaderの詳細は、『Oracle Databaseユーティリティ』を参照してください。

14.3.1 Oracle Label SecurityでのSQL*Loaderの使用要件

従来型パスを指定してSQL*Loaderを使用すると、Oracle Label Securityで保護されているデータベースにデータをロードできます。SQL*LoaderではINSERT操作が実行されるため、Oracle Label Securityポリシーで保護されている表にSQL*Loaderを使用する場合は、標準的な要件がすべて適用されます。

14.3.2 Oracle Label SecurityからSQL*Loaderへの入力

表のポリシー列が非表示になっている場合は、HIDDENキーワードを使用して、この情報をSQL*Loaderに指示する必要があります。

入力ファイル内で行ラベルを指定するには、制御ファイル内のINTO TABLE句にポリシーのラベル列を含めます。

各行のデータとともにポリシー・ラベルをロードするには、SQL*Loaderの制御ファイル内でCHAR_TO_LABELファンクションまたはTO_DATA_LABELファンクションを指定できます。

注意:
Oracle Label SecurityがOracle Internet Directoryで動作するようにインストールされている場合、ラベルはOracle Internet Directoryでolsadmintoolコマンドを使用して集中管理されるため、動的ラベル生成は許可されません。付録B「Oracle Internet Directoryを使用したLabel Security用コマンドライン・ツール」を参照してください。
したがって、Oracle Label SecurityがOracle Internet Directory対応の場合、このTO_DATA_LABELファンクションは使用できず、使用するとエラー・メッセージが生成されます。

SQL*LoaderでOracle Label Securityのデータをロードする場合は、次のバリエーションを使用できます。

表14-1 SQL*LoaderへのOracle Label Security入力の選択肢

データの書式

結果の説明

col1 hidden integer external

非表示列がデータのタグ値とともにデータ・ファイルから直接ロードされます。

col2 hidden char(5) "func(:col2)"

非表示列がデータの文字値とともにデータ・ファイルからロードされます。func()を使用して、文字ラベルとタグ値の間の変換を行います。注意: func()はchar_to_label().の場合があります

col3 hidden "func(:col3)"

前述のcol2と同じですが、フィールド型はデフォルトでcharに設定されます。

col4 hidden expression "func(:col4)"

非表示列は入力データにマップされません。func()がコールされ、ラベル値が提供されます。これはユーザー・ファンクションにすることができます。

たとえば、次のようにデータをDEPT表にロードするINTO TABLE句は、制御ファイル内で有効です。

INTO TABLE dept
(hr_label HIDDEN POSITION (1:22) CHAR "CHAR_TO_LABEL('HR',:hr_label)",
deptno    POSITION (23:26) INTEGER EXTERNAL,
dname     POSITION (27:40) CHAR,
loc       POSITION(41,54)  CHAR)

この制御ファイルで指定したデータファイル内のエントリは次のようになります。

HS:FN                  231 ACCOUNTING  REDWOOD SHORES

14.4 Oracle Label Securityのパフォーマンス上のヒント

この項では、Oracle Label Securityで最適なパフォーマンスを達成する方法について説明します。

- ANALYZEを使用したOracle Label Securityのパフォーマンス改善

- ポリシーのラベル列での索引作成

- パフォーマンス強化のためのラベル・タグ方針の作成

- 数値ラベル・タグに基づくデータのパーティション化

14.4.1 ANALYZEを使用したOracle Label Securityのパフォーマンス改善

コストベース・オプティマイザにより問合せ時の実行計画を改善できるように、LBACSYSスキーマ内でOracle Label Securityのデータ・ディクショナリ表に対してANALYZEコマンドを実行します。これにより、Oracle Label Securityのパフォーマンスが改善されます。

アプリケーション表に対してANALYZEを実行すると、アプリケーションのSQLパフォーマンスが改善されます。

14.4.2 ポリシーのラベル列での索引作成

ポリシーのラベル列で適切なタイプの索引を作成すると、保護されている表に対してユーザーが発行する問合せのパフォーマンスを改善できます。

特定のスキーマ内でデータベース表にOracle Label Securityポリシーを適用している場合は、様々なラベルの数をデータ量と比較する必要があります。この情報に基づいて、ポリシーのラベル列で作成する索引のタイプを決定できます。

- ポリシー・ラベル列のデータのカーディナリティ(つまり、行数に対するラベル数の割合)が低い場合は、ビットマップ索引の作成を考慮してください。

- ポリシー・ラベル列のデータのカーディナリティが高い場合は、Bツリー索引の作成を考慮してください。

例1:

Oracle Label SecurityポリシーでEMP表が保護され、READ_CONTROL施行オプションが設定されており、HR_LABELがポリシー・ラベル列の名前である場合を考えます。ユーザーが次の問合せを発行するとします。

SELECT COUNT (*) FROM scott.emp;

この場合、Oracle Label Securityではラベル列に基づいて述語が追加されます。次に例を示します。

SELECT COUNT (*) FROM scott.emp
WHERE hr_label=100;

これにより、Oracle Label Securityではセキュリティ・ラベルが使用され、ユーザーの認証に基づいて処理対象の行が制限されます。この問合せのパフォーマンスを改善するには、HR_LABEL列で索引を作成できます。

例2:

より複雑な問合せを考えます(この場合も、EMP表にREAD_CONTROLが適用されているとします)。

SELECT COUNT (*) FROM scott.emp
WHERE deptno=10

この場合も、Oracle Label Securityではラベル列に基づいて述語が追加されます。

SELECT COUNT (*) FROM scott.emp
WHERE deptno=10
AND hr_label=100;

この場合は、DEPTNOおよびHR_LABEL列に基づいてコンポジット索引を作成し、アプリケーションのパフォーマンスを改善できます。

関連項目:
『Oracle Databaseパフォーマンス・チューニング・ガイド』

14.4.3 パフォーマンス強化のためのラベル・タグ方針の作成

最適なパフォーマンスを得るために、ラベル・タグに値を割り当てる方針を作成できます。通常、最も適切な方法は、機密性レベルの高いラベルほど大きい数値を割り当てることです。これは、一般に、比較的低レベルでデータを表示できるユーザーが多い一方、多数のレベルのデータを高レベルで表示できるユーザーは少ないためです。

また、READ_CONTROLを設定すると、Oracle Label Securityでは、BETWEEN句を使用して問合せの処理対象となる行を制限する述語が生成されます。次の例のように、機密性の高いラベルのラベル・タグの方が機密性の低いラベルよりも上位でない場合、問合せでは大量の行セットが検査される可能性があります。これはパフォーマンスに影響します。

たとえば、次のように割り当てられたラベル・タグを考えます。

表14-2 ラベル・タグのパフォーマンスの例: 適切な値

ラベル

ラベル・タグ

TS:A,B

100

S:A

50

S

20

U:A

10

最大の認可がS:Aであるユーザーは、ラベルS:A、SおよびU:Aでデータに潜在的にアクセスできます。このユーザーが次の問合せを発行するとします。

SELECT COUNT (*) FROM scott.emp;

Oracle Label Securityにより、このユーザーが表示できる行セットを制限するBETWEEN句を(ユーザーの最大認可と最小認可に基づいて)組み込む述語が追加されます。

SELECT COUNT (*) FROM scott.emp
WHERE hr_label BETWEEN 10 AND 50;

問合せではユーザーの認証に基づいてデータのサブセットのみが検査されるため、パフォーマンスが改善されます。ユーザーがアクセスを認可されていない行を処理するのは無意味です。

これに対して、タグ値が次のように割り当てられている場合は、不必要な処理が実行されます。

表14-3 ラベル・タグのパフォーマンスの例: 不適切な値

ラベル

ラベル・タグ

TS:A,B

50

S:A

100

S

20

U:A

10

この場合、S:A認可を持つユーザーは、100から10までのラベルの一部のみ参照できます。ただし、ユーザーはTS:A,Bラベル(ラベル・タグが50の行)を参照できません。ユーザーが最終的にこれらの行にアクセスできなくても、問合せではこれらの行が取得されて処理されます。

14.4.4 数値ラベル・タグに基づくデータのパーティション化

ラベルに適用した数値ラベル・タグで数値による順序付け方法を使用している場合は、これをOracle Databaseデータ・パーティション化の基礎として使用できます。アプリケーションによっては、ラベル値に基づいてデータをパーティション化できる場合とできない場合があります。

たとえば、多数の会社がサブスクライブするビジネス・ホスティングCRMアプリケーションを考えます。同じEMP表にサブスクライバ1およびサブスクライバ2の行(およびラベル)がある場合があります。つまり、ラベルが異なっていれば、両方の会社の情報を同じ表に格納できます。この場合、サブスクライバ1の従業員がサブスクライバ2のデータにアクセスする必要はないため、ラベルに基づいてパーティション化しても無意味です。あるパーティションにサブスクライバ1に関する行を入れて、別のパーティションにはサブスクライバ2に関する行を入れることができます。問合せが発行されると、ラベルに応じて一方または他方のパーティションにのみアクセスします。無関係なパーティションが問合せにより検査されることはないため、パフォーマンスが改善されます。

次の例にこの方法を示します。あるパーティションに2000番台のラベル、2番目のパーティションに3000番台のラベル、3番目のパーティションに4000番台のラベルを置きます。

CREATE TABLE EMPLOYEE
(EMPNO NUMBER(10) CONSTRAINT PK_EMPLOYEE PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(4),
HR_LABEL NUMBER(10))
TABLESPACE PERF_DATA
STORAGE (initial 2M
NEXT 1M
MINEXTENTS 1
MAXEXTENTS unlimited)
PARTITION BY RANGE (hr_label)
(partition sx1 VALUES LESS THAN (2000) NOLOGGING,
partition sx2 VALUES LESS THAN (3000),
partition sx3 VALUES LESS THAN (4000) );

14.5 インストール後のデータベースの追加作成

Oracle Database Enterprise EditionおよびOracle Label Securityのインストール時に、初期Oracleデータベースが作成されます。その後、該当するプラットフォーム用のOracle Label Securityインストレーション・ノートの説明に従って、Oracle Label Securityをインストールできます。

データベースの追加作成が必要な場合は、Database Configuration Assistantを使用することをお薦めします。また、『Oracle Database管理者ガイド』の第2章に記載されている手順に従ってデータベースを追加作成する方法もあります。

新規データベースを作成するたびに、そこにOracle Label Securityのデータ・ディクショナリ表、ビューおよびパッケージをインストールし、LBACSYSアカウントを作成する必要があります。最初のデータベースの場合は、Oracle Label Securityのインストール時にこのタスクが自動的に実行されます。2番目以降のデータベースの場合は、次のタスクを手動で実行する必要があります。

注意:
ターゲットとなるOracle環境にOracle Label Securityを一度もインストールしていない場合は、まずOracle Universal Installerを使用してインストールする必要があります。

1. initsid.oraファイルで、COMPATIBLE パラメータを、実行中のOracle Databaseの現行リリースに設定します。(8.1.7以上のリリースを指定する必要があります。)
この変更が有効になるように、データベースをシャットダウンしてから再起動します。

2. AS SYSDBA構文を使用して、Oracle DatabaseインスタンスにユーザーSYSとして接続します。

3. スクリプト $ORACLE_HOME/rdbms/admin/catols.sqlを実行します。
このスクリプトにより、ラベルベースのフレームワーク、データ・ディクショナリ、データ型およびパッケージがインストールされます。スクリプトの実行後は、パスワードLBACSYSを持つLBACSYSアカウントが存在することになります。すべてのOracle Label Securityパッケージは、このアカウントの下にあります。

4. LBACSYSユーザーのデフォルト・パスワードを変更します。

これでOracle Label Securityポリシーの作成に進むことができます。

関連項目:
Oracleデータベース作成の詳細は、『Oracle Database管理者ガイド』を参照してください。

15インバース・グループを使用した解放性

この章では、インバース・グループを使用したOracle Label Securityの解放性の実装について説明します。この章の内容は、次のとおりです。

- インバース・グループおよび解放性の概要

- スタンダード・グループおよびインバース・グループの比較

- インバース・グループの動作

- インバース・グループでの読取りアクセスのアルゴリズム

- インバース・グループでの書込みアクセスのアルゴリズム

- インバース・グループでのCOMPACCESS権限のアルゴリズム

- セッション・ラベルおよびインバース・グループ

- インバース・グループでのプロシージャの動作の変更

- インバース・グループでのラベルの支配規則

15.1 インバース・グループおよび解放性の概要

インバース・グループは、情報の解放性を示します。データの送信にマークを付けるために使用されます。インバース・グループをデータ・ラベルに追加すると、データの機密性は低下します。たとえば、インバース・グループUKおよびUSを持つユーザーは、インバース・グループUKのみを持つデータにはアクセスできません。そのデータにUSを追加すると、インバース・グループUKおよびUSを持つすべてのユーザーがデータにアクセスできるようになります。

ユーザーに解放性を割り当てる場合は、ユーザーに通信チャネルのマークを付けます。データを通信チャネルで転送するには、データの解放性が、ユーザーに割り当てられた解放性を支配する必要があります。つまり、データ・レコードに割り当てられた解放性には、ユーザーに割り当てられたすべての解放性が含まれる必要があります。

解放性のメリットは、情報を広く送信できることです。マーケティング組織全体にデータを解放することは、データ・レコードにマーケティングの解放性を追加すること同様に単純になります。

15.2 スタンダード・グループおよびインバース・グループの比較

Oracle Label Securityのグループは、データを所有またはデータにアクセスする組織を識別します。スタンダード・グループと同様に、インバース・グループは情報の送信を制御します。ただし、インバース・グループとOracle Label Securityのスタンダード・グループの動作は異なります。デフォルトでは、Oracle Label Securityで作成されたすべてのポリシーではスタンダード・グループの動作を使用します。

解放性という用語は、インバース・グループによって提供される動作を表すために使用されることがあります。インバース・グループをデータ・ラベルに含めた場合、ユーザーにラベル区分認可を割り当てた場合と同様の影響があります。Oracle Label Securityは、インバース・グループを持つラベルが割り当てられたデータの行をユーザーが参照できるかどうかを評価する場合、ユーザーではなく、データに適切なグループ認可があるかどうかを確認します。データに、ユーザーに割り当てられたすべてのインバース・グループがあるかどうかを確認します。対照的にスタンダード・グループでは、Oracle Label Securityは、データ行に割り当てられた少なくとも1つのグループに対してユーザーが認可されているかどうかを確認します。

Eastern、Western、Southernなどの3つのスタンダード・グループを含むポリシーについて考えます。ユーザー1のラベル認可には、グループEasternおよびWesternが含まれます。ユーザー1に、ポリシー内の適切なレベルおよび区分認可が割り当てられていることを前提とした場合:

- スタンダードOracle Label Securityグループでは、ユーザー1はグループEastern、グループWestern、またはEasternとWesternの両方を持つすべてのデータ・レコードを表示できます。

- インバース・グループでは、ユーザー1は少なくとも、ユーザーに割り当てられたすべてのグループ、つまりEasternとWesternの両方を持つデータ・レコードのみ表示できます。ユーザー1は、Easternグループのみ、またはWesternグループのみを持つか、グループをまったく持たないレコードを表示できません。

表15-1に、ポリシーで使用されるグループのタイプと、ユーザー1がアクセスできるすべての行を示します。

表15-1 スタンダード・グループおよびインバース・グループへのアクセス

行ラベルに含まれるグループ

スタンダード・グループでのユーザー1のアクセス可否

インバース・グループでのユーザー1のアクセス可否

なし

Y

N

Eastern

Y

N

Western

Y

N

Southern

N

N

Eastern、Western

Y

Y

Eastern、Southern

Y

N

Western、Southern

Y

N

Eastern、Western、Southern

Y

Y

スタンダード・グループは、情報の所有権を示します。したがって、特定部門に関するすべてのデータのラベルには、その部門のグループを指定できます。データ・ラベルにグループを追加する場合、データはさらに機密性が強くなります。たとえば、グループを持たないユーザーはラベルにグループを持たないデータにアクセスできます。データ・ラベルにグループUSを追加すると、そのユーザーはもとのデータにはアクセスできなくなります。

関連項目:
グループ

15.3 インバース・グループの動作

この項では、インバース・グループの実装方法および動作について説明します。この項の内容は、次のとおりです。

- INVERSE_GROUP施行オプションを指定したインバース・グループの実装

- インバース・グループおよびラベル・コンポーネント

- インバース・グループで計算されるラベル

- インバース・グループおよび階層構造

- インバース・グループおよびユーザー権限

15.3.1 INVERSE_GROUP施行オプションを指定したインバース・グループの実装

Oracle Label Securityポリシーを作成する場合、管理者は、ポリシーがインバース・グループ機能を使用して解放性を実装できるかどうかを指定できます。これを指定するには、CREATE_POLICY文で、default_optionsの1つとしてINVERSE_GROUPを指定します。

INVERSE_GROUPオプションは、ポリシーの作成時にのみ設定できます。ポリシーが作成されると、このオプションは変更できません。

そのため、INVERSE_GROUPオプションはポリシー単位です。ポリシーが表またはスキーマに適用されている場合は、このオプションをオンまたはオフにできません。APPLY_TABLE_POLICYまたはAPPLY_SCHEMA_POLICYプロシージャを使用して、オプションをオンまたはオフにしようとするとエラーが発生します。

ポリシーからその他のポリシー施行オプションを削除できるのに対して、設定後にINVERSE_GROUPポリシー構成オプションを削除することはできません。オプションを削除するには、ポリシーを削除した後、再作成する必要があります。

管理者は、各ユーザーに1つ以上のインバース・グループに対する認可を付与できます。

15.3.2 インバース・グループおよびラベル・コンポーネント

Oracle Label Securityポリシーをインバース・グループ・オプションを使用して作成する場合、ポリシー・ラベル(レベル、区分、グループなど)のコンポーネントはスタンダード・グループと同じです。ただし、インバース・グループでは、ユーザーの読取りグループおよび書込みグループのデータ・アクセスでの意味およびロールは異なります。

次のポリシーの例を考えてみます。このポリシーには3つのレベル、1つの区分および3つのグループがあります。

表15-2 ポリシーの例

ポリシー・コンポーネント

短縮形

レベル

UNCLASSIFIED

UN

CONFIDENTIAL

CON

SECRET

SE

区分

FINANCIAL

FIN

グループ

EASTERN

EAS

WESTERN

WES

SOUTHERN

SOU

2つのユーザー・ラベル(CON:FINおよびSE:FIN:EAS,WES)が割り当てられました。

2つのデータ・ラベル(CON:FIN:EASおよびSE:FIN:EAS)が割り当てられました。

使用されているグループのタイプによって、データへのユーザー・アクセスは次のように異なります。

- ポリシーでスタンダード・グループが使用されている場合:
ラベルCON: FINを持つユーザーはCON:FIN:EASデータを読み取ることができません。

ラベルSE:FIN:EAS,WESを持つユーザーはSE:FIN:EASデータを読み取ることができます。

- ポリシーにINVERSE GROUPSポリシー施行オプションが指定されている場合:
ラベルCON: FINを持つユーザーはCON:FIN:EASデータを読み取ることができます。

ラベルSE:FIN:EAS,WESを持つユーザーはSE:FIN:EASデータを読み取ることができません。

15.3.3 インバース・グループで計算されるラベル

この項では、インバース・グループが計算されるラベルの値に与える影響について説明します。この項の内容は、次のとおりです。

- インバース・グループで計算されるセッション・ラベル

- インバース・グループ、計算される最大読取りグループおよび最大書込みグループ

15.3.3.1 インバース・グループで計算されるセッション・ラベル

管理者がユーザーにラベル認可を割り当てた後、Oracle Label Securityは自動的にいくつかのラベルを計算します。インバース・グループでのこれらのラベルは次のとおりです。

表15-3 インバース・グループで計算されるセッション・ラベル

計算されるラベル

定義

最大読取りラベル

認可された区分とユーザー・ラベル(セッション・ラベル)で必要な最小限のインバース・グループを組み合せたユーザーの最大レベル。

最大書込みラベル

ユーザーに書込みアクセス権が付与されている区分を組み合せたユーザーの最大レベル。任意のラベルで設定できる認可された最大限のインバース・グループが含まれます。ユーザーは、すべてのインバース・グループへの書込み認可を持っています。

最小書込みラベル

ユーザーの最小レベル。

デフォルト読取りラベル

ユーザーのデフォルトとして指定された区分とインバース・グループを組み合せたデフォルト・レベル。

デフォルト書込みラベル

ユーザーに書込みアクセス権が付与されている区分とインバース・グループを含むデフォルト読取りラベルのサブセット。ただし、常に書込みアクセスに使用される最大書込みグループなので、インバース・グループ・コンポーネントによる影響は受けません。

デフォルト行ラベル

挿入されるデータのデータ・ラベルのデフォルトとして指定されている、ユーザーの最小書込みラベルと最大書込みラベル間のコンポーネントの組合せ。インバース・グループは、デフォルト・ラベルのインバース・グループのスーパーセットで、最大書込みグループのサブセットである必要があります。

関連項目:
計算されるセッション・ラベル

15.3.3.2 インバース・グループ、計算される最大読取りグループおよび最大書込みグループ

表15-3の計算される値から、次の2つのグループのセットが読取りおよび書込みアクセスのラベル評価として識別されます。

表15-4 読取りアクセスと書込みアクセスの評価として識別されるグループのセット

グループのセット

意味

最大読取りグループ

最大読取りグループは、最大読取りラベルに含まれるグループで、任意のユーザー・ラベルで設定できるインバース・グループの最小セットを識別します。

最大書込みグループ

最大書込みグループは、最大書込みラベルに含まれるグループで、任意のユーザー・ラベルで設定できる最大認可インバース・グループを識別します。このグループ・セットは、書込みアクセス時およびセッション・ラベルの設定時に確認されます。

最大書込みグループは、最大読取りグループのスーパーセットです。

表15-5に示すとおり、スタンダード・グループでは読取り専用および読取り/書込み認可、インバース・グループでは書込み専用および読取り/書込み認可を持つことができます。

表15-5 スタンダード・グループおよびインバース・グループに対する読取り/書込み認可

グループのタイプ

読取り専用

読取り/書込み

書込み専用

スタンダード・グループ

グループは、最大書込みレベルではなく、最大読取りレベルのみに表示されます。

グループは、最大読取りレベルと最大書込みレベルの両方に表示されます。

サポートされません。

インバース・グループ

サポートされません。

グループは、最大読取りレベルと最大書込みレベルの両方に表示されます。

グループは、最大読取りレベルではなく、最大書込みレベルのみに表示されます。

最大読取りグループは、最大読取りラベルに含まれるグループのセットを識別しますが、この値は、設定できるインバース・グループの最小セットを表します。次に例を示します。

最大読取りグループ: S:C1:G1,G2

最大書込みグループ: S:C1:G1,G2,G3,G4,G5

この場合、ユーザーは、少なくとも最大読取りグループにリストされた2つのグループを含むデータを読み取ることができます。

スタンダード・グループでは、最大読取りレベルより最大書込みレベルに多くのグループが含まれることはありません。

15.3.4 インバース・グループおよび階層構造

Oracle Label Securityのスタンダード・グループは階層構造になっており、グループを親グループに対応付けることができます。たとえば、EASTERN領域は2つの下位グループEAS_SALESおよびEAS_HRの親になることができます。

スタンダード・グループを持つポリシーでは、ユーザー・ラベルに親グループがある場合、そのユーザー・ラベルから下位グループのすべてのデータにアクセスできます。

インバース・グループでは、親子関係はサポートされていません。

15.3.5 インバース・グループおよびユーザー権限

インバース・グループが実装されている場合は、ユーザー権限の意味は従来どおりです。

ユーザーに特別な権限がない場合、読取りアルゴリズムと書込みアルゴリズムはスタンダード・グループとインバース・グループとで異なります。相違点については、「インバース・グループでの読取りアクセスのアルゴリズム」および「インバース・グループでの書込みアクセスのアルゴリズム」を参照してください。

COMPACCESS権限に与えるインバース・グループの影響については、「インバース・グループでのCOMPACCESS権限のアルゴリズム」を参照してください。

インバース・グループは、次のユーザー権限には影響を与えません。

- PROFILE_ACCESS

- WRITEUP

- WRITEDOWN

- WRITEACROSS

15.4 インバース・グループでの読取りアクセスのアルゴリズム

この項では、インバース・グループでの読取りアクセスのアルゴリズムについて説明します。

実際にINVERSE GROUPオプションを指定した表のデータを読み取るには、図15-1「インバース・グループでの読取りアクセスのラベル評価」のように、ラベル評価プロセスは、レベル、グループ、区分の順に進行します。(現行のセッション・ラベルが、評価されているラベルであることに注意してください。)

1. ユーザーのレベルは、データのレベル以上であることが必要です。

2. ユーザーのラベルは、データに割り当てられたすべての区分を含んでいる必要があります。

3. データ・ラベルのグループは、ユーザー・ラベルのグループのスーパーセットである必要があります。

ユーザーのラベルがこれらのテストにパスすると、そのユーザーはデータにアクセスできます。パスしなかった場合、アクセスは拒否されます。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。

注意:
次のフロー図は、ユーザーに特別な権限が付与されていない場合にのみ適用されます。

図15-1 インバース・グループでの読取りアクセスのラベル評価

関連項目:
Oracle Label Securityの読取りアクセス・アルゴリズム

15.5 インバース・グループでの書込みアクセスのアルゴリズム

この項では、インバース・グループでの書込みアクセスのアルゴリズムについて説明します。

INVERSE GROUPオプションを指定した表でデータを書き込むには、図15-2「インバース・グループでの書込みアクセスのラベル評価」のように、ラベル評価プロセスは、レベル、グループ、区分の順に進行します。(現行のセッション・ラベルが、評価されているラベルであることに注意してください。)

1. データ・ラベル内のレベルは、ユーザーの最小レベル以上で、かつユーザーのセッション・レベル以下であることが必要です。

2. 次のいずれかの条件を満たしている必要があります。
データ・ラベルのグループは、ユーザー・ラベルのグループのスーパーセットである必要があります。

または

ユーザーに、ポリシーに対する読取りアクセス権がある。

3. ユーザーの最大書込みグループは、データ・ラベル・グループのスーパーセットである必要があります。

4. ユーザー・ラベルには、データ・ラベルのすべての区分に対する書込みアクセス権が必要です。

データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。

注意:
次のフロー図は、ユーザーに特別な権限が付与されていない場合にのみ適用されます。

図15-2 インバース・グループでの書込みアクセスのラベル評価

関連項目:
Oracle Label Securityの書込みアクセス・アルゴリズム

15.6 インバース・グループでのCOMPACCESS権限のアルゴリズム

この項では、ユーザーがCOMPACCESS権限を持つ場合に、インバース・グループでの読取りおよび書込みアクセスのアルゴリズムについて説明します。

COMPACCESS権限により、ユーザーは行のグループから独立し、行の区分に基づいてデータにアクセスできます。

- 区分が存在し、かつ、その区分へのアクセスが認可されていれば、グループの認可はバイパスされます。

- 行に区分がない場合、アクセスはインバース・グループの認可により決定されます。

図15-3「読取りアクセスのラベル評価: COMPACCESS権限およびインバース・グループ」および図15-4「書込みアクセスのラベル評価: COMPACCESS権限およびインバース・グループ」に、COMPACCESS権限を持つユーザーの読取りアクセスおよび書込みアクセスのラベル評価プロセスを示します。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。

(現行のセッション・ラベルが、評価されているラベルであることに注意してください。)

図15-3 読取りアクセスのラベル評価: COMPACCESS権限およびインバース・グループ

図15-4 書込みアクセスのラベル評価: COMPACCESS権限およびインバース・グループ

15.7 セッション・ラベルおよびインバース・グループ

この項では、インバース・グループがセッション・ラベルおよび行ラベルに与える影響について説明します。

- スタンダード・グループまたはインバース・グループでの初期セッション/行ラベルの設定

- スタンダード・グループまたはインバース・グループでの現行のセッション/行ラベルの設定

- セッション・ラベルおよびインバース・グループの例

15.7.1 スタンダード・グループまたはインバース・グループでの初期セッション/行ラベルの設定

インバース・グループを使用すると、セッション・ラベルを決定するOracle Label Securityプロシージャの動作に影響します。SA_USER_ADMIN.SET_DEFAULT_LABELおよびSA_USER_ADMIN.SET_ROW_LABELプロシージャは、ユーザーの初期セッション・ラベルおよび行ラベルを、それぞれ指定された値に設定します。

15.7.1.1 スタンダード・グループ: 初期セッション/行ラベルの変更規則

ユーザーのデフォルト・セッション・ラベルは、SA_USER_ADMIN.SET_DEFAULT_LABELを使用して変更できます。スタンダード・グループでは、現在のデフォルトの行ラベルが新しい書込みラベルによって支配されている間は、デフォルトのセッション・ラベルが認可リストの任意のグループを含むように設定できます。つまり、行ラベルには新しい書込みレベルと同じかそれより少ないスタンダード・グループがあります。

同じ規則が、SA_USER_ADMIN.SET_ROW_LABELにも適用されます。

15.7.1.2 インバース・グループ: 初期セッション/行ラベルの変更規則

インバース・グループでは、現在のデフォルトの行ラベルが新しい書込みラベルによって支配されている間は、デフォルトのセッション・ラベルが認可リストの任意のグループを含むように設定できます。つまり、行ラベルには新しい書込みレベルと同じかそれより多いインバース・グループがあります。

同じ規則が、SA_USER_ADMIN.SET_ROW_LABELにも適用されます。

関連項目:
SA_USER_ADMIN.SET_DEFAULT_LABEL
SA_USER_ADMIN.SET_ROW_LABEL

インバース・グループでのラベルの支配規則

15.7.2 スタンダード・グループまたはインバース・グループでの現行のセッション/行ラベルの設定

インバース・グループを使用すると、ユーザーの現行のセッション・ラベルおよび行ラベルをそれぞれ設定するためのSA_SESSION.SET_LABELおよびSA_SESSION.SET_ROW_LABELプロシージャの動作に影響します。

15.7.2.1 スタンダード・グループ: 現行のセッション/行ラベルの変更規則

スタンダード・グループでは、SA_SESSION.SET_LABELプロシージャを使用して、ユーザーの認可グループ・リストに任意のグループを含めるようにセッション・ラベルを設定できます。(認可グループのサブグループは、認可リストに暗黙的に含まれます。)セッション・ラベルを変更すると、そのセッションの行ラベルの値に影響する場合があることに注意してください。

SET_ROW_LABELプロシージャを使用すると、現行データベース・セッションの行ラベル値を設定できます。ラベルの区分とグループは、ユーザーが書込みアクセス権を持つセッション・ラベルの区分およびグループのサブセットであることが必要です。

15.7.2.2 インバース・グループ: 現行のセッション/行ラベルの変更規則

インバース・グループでは、セッション・ラベルにグループを追加すると、ユーザーが少数のグループで機密データにアクセスする能力が低下します。グループを削除すると、ユーザーはより多くの機密情報にアクセスできます。そのため、最大読取りグループがセッション・ラベルのグループのサブセットであり、最大書込みグループがセッション・ラベルのグループのスーパーセットである間は、ユーザーはセッション・ラベルにグループを追加できる必要があります。ユーザーがセッション・ラベルからグループを削除する場合にも、同じ制限が適用されます。

インバース・グループを使用する場合、認可グループのサブグループは存在しないことに注意してください。これは、インバース・グループを使用するポリシーで親グループが許可されないためです。

SET_ROW_LABELプロシージャを使用すると、現行データベース・セッションの行ラベル値を設定できます。ラベルの区分は、ユーザーが書込みアクセス権を持つセッション・ラベルの区分のサブセットであることが必要です。

セッション・グループのインバース・グループが行ラベルのインバース・グループのサブセットであり、最大書込みグループが行ラベルのインバース・グループのスーパーセットである間は、ユーザーは行ラベルにインバース・グループを追加できます。

次に例を示します。

- ユーザーが、最大読取りグループとしてインバース・グループUKおよびUSを持ち、最大書込みグループとしてUK,US,CANを持つとします。この場合、そのユーザーはセッション・ラベルをC:ALPHA:UK,US,CANに設定できますが、C:ALPHA:UKには設定できません。

- ユーザーが、最大読取りグループとしてインバース・グループUKを持ち、割り当てられた最大書込みグループとしてUK,CANを持つとします。この場合、そのユーザーはセッション・ラベルをC:ALPHA:UK,CANに設定できますが、C:ALPHAまたはC:ALPHA:UK,US,CANに変更することはできません。

関連項目:
SA_SESSION.SET_LABELを使用したセッション・ラベルの変更
SA_SESSION.SET_ROW_LABELを使用した行ラベルの変更

15.7.3 セッション・ラベルおよびインバース・グループの例

この項では、インバース・グループの使用方法を説明する例を示します。

15.7.3.1 インバース・グループの例1

インバース・グループを実装するポリシーのユーザー1について考えます。ユーザーには次のラベルがあります。

表15-6 インバース・グループの例1のラベル

名前

定義

最大読取りラベル

SE:ALPHA,BETA:G1,G2

最大書込みラベル

SE:ALPHA:G1,G2,G3

デフォルト読取りラベル

SE:ALPHA,BETA:G1,G2

デフォルト書込みラベル

SE:ALPHA:G1,G2

デフォルト行ラベル

SE:ALPHA:G1,G2

次の値の導出元:

最大読取りグループ

G1,G2

最大書込みグループ

G1,G2,G3

その結果、次のことがいえます。

- ユーザー1は、ラベルSE:ALPHA:G1,G2を持つデータおよびラベルSE:ALPHA:G1,G2,G3を持つデータを更新できます。ただし、ユーザー1はラベルSE:ALPHA:G1を更新できません。
インバース・グループではなくスタンダード・グループが使用されていた場合は、ラベルSE:ALPHA:G1を持つデータを更新できました。

- ユーザー1が挿入するデータには、ラベルSE:ALPHA:G1,G2があります。(これはスタンダード・グループと同じです。)

- ユーザー1がデフォルト・ラベルを変更せずに行ラベルをSE:ALPHA:G1,G2,G3に設定する場合は、ユーザー1が書く新しい行のデータにSE:ALPHA:G1,G2,G3を挿入します。(スタンダード・グループでは、ユーザー1はデフォルト・ラベルに含まれるグループ以外のグループを設定することはできません。)

15.7.3.2 インバース・グループの例2

インバース・グループを実装するポリシーのユーザー01について考えます。ユーザーには次のラベルがあります。

表15-7 インバース・グループの例2のラベル

名前

定義

最大読取りラベル

C:ALPHA:

最大書込みラベル

C:ALPHA:G1,G2,G3

デフォルト読取りラベル

C:ALPHA:

デフォルト書込みラベル

C:ALPHA:

デフォルト行ラベル

C:ALPHA:

次の値の導出元:

最大読取りグループ

(設定なし)

最大書込みグループ

G1,G2,G3

その結果、次のことがいえます。

- ユーザー01は、レベルC、区分ALPHAを持ち、グループG1、G2、G3の組合せを持つデータ、またはグループを持たないデータを更新できます。ユーザー01が書く新しいデータにラベルC:ALPHA:を挿入します。

- G1,G2やG1,G3などの最大読取りグループを持つユーザー02は、ユーザー01が書き込んだデータを表示できません。これは、ユーザー01のデフォルト行ラベルにグループが含まれていないためです。

- ユーザー01は、セッション・ラベルのインバース・グループが行ラベルを支配している間(つまり、ユーザー01のセッション・ラベルに、行ラベルに含まれるグループ以下のグループが含まれる場合)は、行ラベルにインバース・グループを設定できます。
これは、行ラベルはセッション・ラベルのグループ以上のグループを持つ必要があり、最大書込みグループ以下のグループを持つことができるためです。セッション・ラベルがG1の場合は、行ラベルのグループをG1から最大書込みグループ(G1,G2,G3)に設定できます。

- ユーザー01がセッション・ラベルおよび行ラベルをC:ALPHA:G1:G2:G3に設定すると、ユーザー01のデータは、最大読取りグループにG1、G2、G3の任意の組合せを持つユーザーからアクセスできるようになります。

関連項目:
計算されるセッション・ラベル

15.8 インバース・グループでのプロシージャの動作の変更

ポリシーの作成時にINVERSE_GROUPオプションを指定すると、ラベル付きデータに対するユーザーの読取りおよび書込みアクセスを決定するアルゴリズムが変更されます。この項では、インバース・グループが次のプロシージャの動作に与える影響について説明します。

- インバース・グループでのSA_SYSDBA.CREATE_POLICY

- インバース・グループでのSA_SYSDBA.ALTER_POLICY

- インバース・グループでのSA_USER_ADMIN.ADD_GROUPS

- インバース・グループでのSA_USER_ADMIN.ALTER_GROUPS

- インバース・グループでのSA_USER_ADMIN.SET_GROUPS

- インバース・グループでのSA_USER_ADMIN.SET_USER_LABELS

- インバース・グループでのSA_USER_ADMIN.SET_DEFAULT_LABEL

- インバース・グループでのSA_USER_ADMIN.SET_ROW_LABEL

- インバース・グループでのSA_COMPONENTS.CREATE_GROUP

- インバース・グループでのSA_COMPONENTS.ALTER_GROUP_PARENT

- インバース・グループでのSA_SESSION.SET_LABEL

- インバース・グループでのSA_SESSION.SET_ROW_LABEL

- インバース・グループでのLEAST_UBOUND

- インバース・グループでのGREATEST_LBOUND

15.8.1 インバース・グループでのSA_SYSDBA.CREATE_POLICY

SYSDBAパッケージのCREATE_POLICYプロシージャを使用して、ポリシーを作成し、オプションのポリシー固有の列名を定義し、デフォルトのポリシー・オプション・セットを指定します。インバース・グループのサポートによって、ユーザーはINVERSE_GROUP施行オプションも使用できます。次に例を示します。

PROCEDURE CREATE_POLICY (
HR IN VARCHAR2,
SA_LABEL IN VARCHAR2 DEFAULT NULL,

INVERSE_GROUP IN VARCHAR2 DEFAULT NULL);

関連項目:
SA_SYSDBA.CREATE_POLICYを使用したポリシーの作成
ポリシー施行オプションの概要

15.8.2 インバース・グループでのSA_SYSDBA.ALTER_POLICY

SYSDBAパッケージのALTER_POLICYプロシージャでは、INVERSE_GROUPオプションを除くポリシーのデフォルトの強制オプションを変更できます。ポリシーがインバース・グループ用に構成されると、変更することはできません。

関連項目:
SA_SYSDBA.ALTER_POLICYを使用したポリシー・オプションの変更

15.8.3 インバース・グループでのSA_USER_ADMIN.ADD_GROUPS

ADD_GROUPSプロシージャでは、ユーザーにグループを追加し、そのグループの書込みおよび読取りの両方が認可されるかどうかを示します。

関連項目:
「SA_USER_ADMIN.ADD_GROUPS」の構文を参照してください。

認可されるアクセスのタイプは、access_modeパラメータによって決定されます。

表15-8 access_modeパラメータの値により認可されるアクセス

access_modeパラメータ

意味

READ_WRITE

書込みが認可されることを示します。(つまり、グループは最大読取りグループと最大書込みグループの両方に含まれます。)

WRITE_ONLY

グループが最大読取りグループではなく、最大書込みグループに含まれることを示します。

access_mode

access_modeがREAD_WRITEに設定されている場合、グループは最大読取りグループおよび最大書込みグループの両方に追加されます。

access_modeがSA_UTL.WRITE_ONLYに設定されている場合、グループは最大書込みグループにのみ追加されます。

access_modeがNULLの場合は、SA_UTL.READ_WRITEに設定されます。

in_def

指定したグループがデフォルト・グループ内にあることが必要かどうか(Y/N)を指定します。

in_defがNULLの場合は、次のようにYまたはNに設定されます。

access_modeがREAD_WRITEの場合、in_defはYに設定されます。

access_modeがWRITE_ONLYの場合、in_defはNに設定されます。

in_row

in_defの場合と同じ条件を使用して、指定したグループが行ラベル内にあることが必要かどうか(Y/N)を指定します。

ただし、in_defがYの場合は、in_rowもYに設定する必要があります。

行でin_defがYの場合、in_rowもYに設定する必要があります(ただし、その逆の場合は必要ありません)。

これはin_rowフィールドの場合も同様です。

関連項目:
インバース・グループ、計算される最大読取りグループおよび最大書込みグループ

15.8.4 インバース・グループでのSA_USER_ADMIN.ALTER_GROUPS

ALTER_GROUPSプロシージャは、リストにあるグループごとに、書込みアクセス、デフォルトのラベル・インジケータおよび行ラベル・インジケータを変更します。

インバース・グループの動作は、ADD_GROUPSの場合と同じです。

関連項目:
「SA_USER_ADMIN.ALTER_GROUPS」の構文を参照してください。

15.8.5 インバース・グループでのSA_USER_ADMIN.SET_GROUPS

SET_GROUPSプロシージャでは、ユーザーにグループを割り当てて、そのユーザーのセッション・ラベルと行ラベルのデフォルト値を識別します。

関連項目:
「SA_USER_ADMIN.SET_GROUPS」の構文を参照してください。

次のように、インバース・グループの処理はスタンダード・グループとは異なります。

表15-9 ユーザーに対するグループの割当て

グループ・セット名

意味

read_groups

最大読取りグループとなるグループのカンマ区切りのリストです。

write_groups

最大書込みグループとなるグループのカンマ区切りのリストです。これはread_groupsのスーパーセットである必要があります。

write_groupsがNULLの場合は、read_groupsに設定されます。

def_groups

デフォルトのグループを指定します。少なくともread_groupsが必要で、write_groupsはdef_groupsのスーパーセットである必要があります。

def_groupsがNULLの場合は、read_groupsに設定されます。

row_groups

行グループを指定します。少なくともdef_groupsが必要で、最大書込みグループのサブセットである必要があります。

インバース・グループの場合は、すべてのdef_groupsがwrite_groupsにも含まれるため、row_groupsがNULLの場合はdef_groupsに設定されます。

15.8.6 インバース・グループでのSA_USER_ADMIN.SET_USER_LABELS

SET_USER_LABELSプロシージャでは、個々のコンポーネントではなくラベル・セットを使用して、ユーザーのレベル、区分およびグループを設定します。

関連項目:
「SA_USER_ADMIN.SET_USER_LABELS」の構文を参照してください。

次のように、インバース・グループの処理はスタンダード・グループとは異なります。

表15-10 インバース・グループのラベル定義

名前

定義

max_read_label

ユーザーが認可される最大読取りラベルの初期化に使用するラベル文字列を指定します。ユーザーの最大レベル、読取りアクセスが認可される区分、および(インバース・グループの場合)任意のラベルで設定できるグループの最小セットで構成されます(最大読取りグループ)。

max_write_label

ユーザーが認可される最大書込みラベルの初期化に使用するラベル文字列を指定します。ユーザーの最大レベル、書込みアクセスが認可される区分、および(インバース・グループの場合)任意のラベルで設定できる最大認可グループで構成されます(最大書込みグループ)。この場合のすべてのインバース・グループは、書込み認可も持っています。max_read_labelのグループのスーパーセットである必要があります。max_write_labelを指定しない場合は、max_read_labelに設定されます。

def_label

レベル、区分、グループなど、ユーザーのセッション・ラベルの初期化に使用するラベル文字列(max_read_labelのサブセット)を指定します。default_labelを指定しない場合は、max_read_labelに設定されます。インバース・グループの場合、コンポーネントに少なくともmax_read_labelのグループがあり、max_write_labelのグループがdef_labelのグループのスーパーセットである必要があります。

row_label

プログラムの行ラベルの初期化に使用するラベル文字列を指定します。レベル、区分およびグループ、つまりmax_write_labelおよびdef_labelのサブセットが含まれます。row_labelを指定しない場合は、def_labelに設定され、書込みアクセスが認可される区分とグループのみが含まれます。row_labelを指定しない場合、インバース・グループのコンポーネントはdef_labelと同じ値に設定されます。行ラベルのインバース・グループは、少なくともデフォルト・ラベルのインバース・グループである必要があり、最大書込みグループのサブセットである必要があります。

15.8.7 インバース・グループでのSA_USER_ADMIN.SET_DEFAULT_LABEL

SET_DEFAULT_LABELプロシージャでは、ユーザーの初期セッション・ラベルを指定のラベルに設定します。

この場合も、セッション・ラベルのインバース・グループ・コンポーネントの設定で説明したすべての規則が適用されます(「セッション・ラベルおよびインバース・グループ」を参照)。

関連項目:
「SA_USER_ADMIN.SET_DEFAULT_LABEL」の構文を参照してください。

15.8.8 インバース・グループでのSA_USER_ADMIN.SET_ROW_LABEL

SET_ROW_LABELプロシージャでは、ユーザーの初期の行ラベルを指定のラベルに設定します。

関連項目:
「SA_USER_ADMIN.SET_ROW_LABEL」の構文を参照してください。

row_labelを指定する場合、インバース・グループ・コンポーネントは、少なくともdef_labelのすべてのインバース・グループを含み、最大書込みグループのサブセットである必要があります。

関連項目:
スタンダード・グループまたはインバース・グループでの初期セッション/行ラベルの設定

15.8.9 インバース・グループでのSA_COMPONENTS.CREATE_GROUP

CREATE_GROUPプロシージャを使用してグループを作成し、短縮名と詳細名、およびオプションで親グループを指定します。

関連項目:
「SA_COMPONENTS.CREATE_GROUPを使用したグループの作成」の構文を参照してください。

インバース・グループでは、parent_nameフィールドは常にNULLである必要があります。このフィールドに値を指定すると、グループ階層が無効であることを示すエラー・メッセージが表示されます。

15.8.10 インバース・グループでのSA_COMPONENTS.ALTER_GROUP_PARENT

このファンクションは、インバース・グループ・オプションを指定したポリシーには無効です。このファンクションをコールすると、エラー・メッセージが表示されます。

関連項目:
「SA_COMPONENTS.ALTER_GROUPを使用したグループの変更」の構文を参照してください。

15.8.11 インバース・グループでのSA_SESSION.SET_LABEL

SET_LABELプロシージャを使用すると、現行のデータベース・セッションのラベルを設定できます。

関連項目:
「SA_SESSION.SET_LABELを使用したセッション・ラベルの変更」の構文を参照してください。

現行ユーザーの場合、このプロシージャは、sa_user_admin.set_user_labelファンクションの場合と同様に、セッション・ラベルを設定する場合と同じ規則に従います。

関連項目:
スタンダード・グループまたはインバース・グループでの現行のセッション/行ラベルの設定

15.8.12 インバース・グループでのSA_SESSION.SET_ROW_LABEL

SET_ROW_LABELプロシージャを使用すると、現行データベース・セッションのデフォルトの行ラベル値を設定できます。

関連項目:
「SA_SESSION.SET_ROW_LABELを使用した行ラベルの変更」の構文を参照してください。

現行ユーザーの場合、このプロシージャは、sa_user_admin.set_row_labelファンクションの場合と同様に、行ラベルを設定する場合と同じ規則に従います。

関連項目:
スタンダード・グループまたはインバース・グループでの初期セッション/行ラベルの設定

15.8.13 インバース・グループでのLEAST_UBOUND

LEAST_UBOUND(LUBD)ファンクションは、label1およびlabel2の最小の上限である文字列ラベル、つまり、この2つを支配している単一のラベルを戻します。

スタンダード・グループでは、最小の上限は、最上位レベル、ラベル内の区分の共用部分およびラベル内のグループの共用部分です。

インバース・グループでは、最小の上限は、最上位レベル、ラベル内の区分の共用部分およびラベル内のインバース・グループの共通部分です。

たとえば、インバース・グループでは、HIGHLY_SENSITIVE:ALPHA:G1,G2およびSENSITIVE:BETA:G1の最小の上限は、HIGHLY_SENSITIVE:ALPHA,BETA:G1です。

15.8.14 インバース・グループでのGREATEST_LBOUND

GREATEST_LBOUND(GLBD)ファンクションを使用すると、2つの異なるラベルがある場合、操作に関連付けることができるデータの最下位ラベルを決定できます。このファンクションは、label1およびlabel2の最大の下限である文字列ラベルを戻します。

スタンダード・グループでは、最大の下限は、最下位レベルであり、ラベルの区分とラベルのグループの共通部分です。

インバース・グループでは、最大の下限は、最下位レベルであり、ラベルの区分の共通部分とラベルのインバース・グループの共用部分です。

たとえば、インバース・グループでは、HIGHLY_SENSITIVE:ALPHA:G1,G3およびSENSITIVE::G1の最大の下限は、SENSITIVE:G1,G3です。

関連項目
ラベルの上限と下限の決定

15.9 インバース・グループでのラベルの支配規則

スタンダード・グループを使用したOracle Label Securityの支配規則は次のとおりです。

次の場合、ユーザー・ラベルがデータ・ラベルを支配します。

- ユーザー・レベルがデータ・レベル以上である。

- ユーザー区分がデータ区分のスーパーセットである。

- ユーザー・グループとデータ・グループに共通部分がある(ユーザー・グループに、データ・グループの1つ以上のグループがある)。

インバース・グループを使用したOracle Label Securityの支配規則は次のとおりです。

次の場合、ユーザー・ラベルがデータ・ラベルを支配します。

- ユーザー・レベルがデータ・レベル以上である。

- ユーザー区分がデータ区分のスーパーセットである。

- データ・グループがユーザー・グループのスーパーセットである。

関連項目:
支配するラベルと支配されるラベル

第IV部

付録

この部の構成は、次のとおりです。

- 付録A「Oracle Label Securityの高度なトピック」

- 付録B「Oracle Internet Directoryを使用したLabel Security用コマンドライン・ツール」

- 付録C「Oracle RAC環境でのOracle Label Security」

- 付録D「Oracle Label Securityに関するよくある質問」

- 付録E「リファレンス」

A Oracle Label Securityの高度なトピック

この付録は、Oracle Label Securityの高度なユーザーを対象としています。この付録の内容は、次のとおりです。

- ラベル間の関係の分析

- セッション・ラベル設定用のOCIインタフェース

A.1 ラベル間の関係の分析

この項では、ラベル間の関係について説明します。この項の内容は、次のとおりです。

- 支配するラベルと支配されるラベル

- 比較できないラベル

- 支配ファンクションの使用

A.1.1 支配するラベルと支配されるラベル

2つのラベル間の関係は、支配という用語で説明できます。ユーザーがオブジェクトにアクセスできるかどうかは、そのユーザーのラベルがオブジェクトのラベルを支配しているかどうかによって決定されます。ユーザーのラベルがオブジェクトのラベルを支配していない場合、ユーザーはそのオブジェクトへのアクセスを許可されません。

ラベルの支配関係は、そのすべてのコンポーネント、つまり、レベル、区分およびグループについて分析されます。

表A-1 ラベルの比較における支配関係

要因

支配関係の基準

レベル

label1がlabel2を支配するには、label1のレベルがlabel2のレベル以上である必要があります。

区分

label1がlabel2を支配するには、label1の区分がlabel2のすべての区分を含んでいる必要があります。

グループ

label1がlabel2を支配するには、label1がlabel2のグループの少なくとも1つを含んでいる必要があります。

あるラベルが別のラベルを支配するのは、そのすべてのコンポーネントが別のラベルのコンポーネントを支配している場合です。たとえば、ラベルHIGHLY_SENSITIVE:FINANCE,OPERATIONSは、ラベルHIGHLY_SENSITIVE:FINANCEを支配します。同様に、ラベルHIGHLY_SENSITIVE::WR_APは、ラベルHIGHLY_SENSITIVE::WR_AP, WR_ARを支配します。

関連項目:
インバース・グループでのラベルの支配規則

A.1.2 比較できないラベル

2つのラベル間の関係は、常に支配という用語で定義できるとはかぎりません。どちらのラベルも他方を支配していない場合、2つのラベルは比較できません。2つのラベル間で区分が異なる場合(HS:AやHS:Bなど)、両者は比較できません。同様に、ラベルHS:AおよびS:Bは比較できません。

A.1.3 支配ファンクションの使用

支配ファンクションを使用すると、問合せで範囲を指定できます。次のファンクションを使用すると、指定したラベル間の支配関係を指定できます。

表A-2 支配関係を決定するファンクション

ファンクション

意味

STRICTLY_DOMINATES

label1の値によりlabel2の値が支配され、両者は等しくありません。

DOMINATES

label1の値によりlabel2の値が支配されるか、等しくなります。

DOMINATED_BY

label1の値はlabel2の値に支配されます。

STRICTLY_DOMINATED_BY

label1の値はlabel2の値に支配され、両者は等しくありません。

支配ファンクションには2つのタイプがあることに注意してください。SA_UTLの支配ファンクションはブール値を戻しますが、スタンドアロンの支配ファンクションは整数を戻します。

- DOMINATESスタンドアロン・ファンクション

- STRICTLY_DOMINATESスタンドアロン・ファンクション

- DOMINATED_BYスタンドアロン・ファンクション

- STRICTLY_DOMINATED_BYスタンドアロン・ファンクション

- SA_UTL.DOMINATES

- SA_UTL.STRICTLY_DOMINATES

- SA_UTL.DOMINATED_BY

- SA_UTL.STRICTLY_DOMINATED_BY

関連項目:
ラベル付きデータ行の順序付け

A.1.3.1 DOMINATESスタンドアロン・ファンクション

DOMINATES (DOM)ファンクションは、label1がlabel2を支配している場合は1(TRUE)、それ以外の場合は0(FALSE)を戻します。

構文:

FUNCTION DOMINATES (
label1          IN NUMBER,
label2          IN NUMBER)
RETURN INTEGER;

A.1.3.2 STRICTLY_DOMINATESスタンドアロン・ファンクション

STRICTLY_DOMINATES (SDOM)ファンクションは、label1がlabel2を支配していて、両者が等しくない場合は1(TRUE)を戻します。

構文:

FUNCTION STRICTLY_DOMINATES (
label1          IN NUMBER,
label2          IN NUMBER)
RETURN INTEGER;

A.1.3.3 DOMINATED_BYスタンドアロン・ファンクション

DOMINATED_BY (DOM_BY)ファンクションは、label1がlabel2に支配されている場合は1(TRUE)を戻します。

構文:

FUNCTION DOMINATED_BY (
label1          IN NUMBER,
label2          IN NUMBER)
RETURN INTEGER;

A.1.3.4 STRICTLY_DOMINATED_BYスタンドアロン・ファンクション

STRICTLY_DOMINATED_BY (SDOM_BY)ファンクションは、label1がlabel2に支配されていて、両者が等しくない場合は1(TRUE)を戻します。

構文:

FUNCTION STRICTLY_DOMINATED_BY (
label1          IN NUMBER,
label2          IN NUMBER)
RETURN INTEGER;

A.1.3.5 SA_UTL.DOMINATES

SA_UTL.DOMINATESファンクションは、label1がlabel2を支配している場合にTRUEを戻します。

構文:

FUNCTION DOMINATES (
label1          IN NUMBER,
label2          IN NUMBER)
RETURN BOOLEAN;

A.1.3.6 SA_UTL.STRICTLY_DOMINATES

SA_UTL.STRICTLY_DOMINATESファンクションは、label1がlabel2を支配していて、両者が等しくない場合にTRUEを戻します。

構文:

FUNCTION STRICTLY_DOMINATES (
label1          IN NUMBER,
label2          IN NUMBER)
RETURN BOOLEAN;

A.1.3.7 SA_UTL.DOMINATED_BY

SA_UTL.DOMINATED_BYファンクションは、label1がlabel2に支配されている場合にTRUEを戻します。

構文:

FUNCTION DOMINATED_BY (
label1          IN NUMBER,
label2          IN NUMBER)
RETURN BOOLEAN;

A.1.3.8 SA_UTL.STRICTLY_DOMINATED_BY

SA_UTL.STRICTLY_DOMINATED_BYファンクションは、label1がlabel2に支配されていて、両者が等しくない場合にTRUEを戻します。

構文:

FUNCTION STRICTLY_DOMINATED_BY (
label1          IN NUMBER,
label2          IN NUMBER)
RETURN BOOLEAN;

関連項目:
ラベルの上限と下限の決定。

A.2 セッション・ラベル設定用のOCIインタフェース

Oracle Call Interface(OCI)を使用して接続する場合は、ポリシーのSYS_CONTEXT変数を使用してセッション・ラベルと行ラベルを初期化できます。この変数はOCIAttrSetファンクションを使用して設定し、外部で初期化されたSYS_CONTEXT変数を初期化します。リリース8.1.7でこれらを使用できるのは、Oracle Label Securityがインストールされている場合のみです。

各ポリシーには、SA$policy_name_XというSYS_CONTEXTがあります。また、2つの変数INITIAL_LABELおよびINITIAL_ROW_LABELを設定できます。

新規の値をユーザーの認証の範囲内で有効なラベルに設定すると、ユーザー用に格納されているデフォルト値のかわりにその値が使用されます。これは、リモート接続に使用されるのと同じメカニズムです。

関連項目:
第13章「分散データベースでのOracle Label Securityの使用」

A.2.1 OCIAttrSet

コンテキスト挿入用に、OCIAttrSetには追加の属性が定義されます。OCI_ATTR_APPCTX_SIZEを使用して必要な数のコンテキスト属性を指定し、コンテキストの配列サイズを初期化します。

OCIAttrSet(session, OCI_HTYPE_SESSION,
(dvoid *)&size, (ub4)0, OCI_ATTR_APPCTX_SIZE, error_handle);

サイズはub4型であることに注意してください。

A.2.2 OCIAttrGet

OCI_ATTR_APPCTX_LISTを指定してOCIAttrGetをコールし、セッション用のアプリケーション・コンテキスト・リスト記述子のハンドルを取得します。

OCIAttrGet(session, OCI_HTYPE_SESSION,
(dvoid *)&ctxl_desc, (ub4)0, OCI_ATTR_APPCTX_LIST, error_handle);

ctxl_descが(OCIParam *)型であることに注意してください。

A.2.3 OCIParamGet

アプリケーション・コンテキスト・リスト記述子を使用して、i番目のアプリケーション・コンテキストの個別記述子を取得します。

OCIParamGet(ctxl_desc, OCI_DTYPE_PARAM, error_handle,(dvoid **)&ctx_desc, i);

ctx_descが(OCIParam *)型であることに注意してください。

A.2.4 OCIAttrSet

3つの新規属性OCI_ATTR_APPCTX_NAME、OCI_ATTR_APPCTX_ATTRおよびOCI_ATTR_APPCTX_VALUEを使用して、アプリケーション・コンテキスト内で適切な値を設定します。

OCIAttrSet(ctx_desc, OCI_DTYPE_PARAM,
(dvoid *)ctx_name, sizeof(ctx_name), OCI_ATTR_APPCTX_NAME,
error_handle);

OCIAttrSet(ctx_desc, OCI_DTYPE_PARAM,
(dvoid *)attr_name, sizeof(attr_name), OCI_ATTR_APPCTX_ATTR,
error_handle);

OCIAttrSet(ctx_desc, OCI_DTYPE_PARAM,
(dvoid *)value, sizeof(value), OCI_ATTR_APPCTX_VALUE,
error_handle);

アプリケーション・コンテキストの操作はVARCHAR2型に基づいているため、サポートされるのは文字型のみであることに注意してください。

A.2.5 OCIの例

次の例に、外部化されたSYS_CONTEXTをOracle Label Securityで使用する方法を示します。

#ifdef RCSID
static char *RCSid =
"$Header: ext_mls.c 09-may-00.10:07:08 jdoe Exp $ ";
#endif /* RCSID */

/* Copyright (c) Oracle Corporation 1999, 2000. All Rights Reserved. */

/*

NAME

ext_mls.c - externalized SYS_CONTEXT with Label Security

DESCRIPTION

Run olsdemo.sql script before executing this example.
Usage: <executable obtained with .c file> <user_name> <password> <session-initial-label
Example: avg_sal sa_demo sa_demo L3:M,E:D10

PUBLIC FUNCTION(S)

<list of external functions declared/defined - with one-line descriptions>

PRIVATE FUNCTION(S)

<list of static functions defined in .c file - with one-line descriptions>

RETURNS

The average salary in the EMP table of the SA_DEMO schema querying as the specified user with the specified session label.

NOTES

<other useful comments, qualifications, and so on>

MODIFIED   (MM/DD/YY)

jlev      09/18/03 - cleanup
jdoe      05/09/00 - cleanup

jdoe      10/13/99 - standalone OCI program to test MLS SYS_CONTEXT
jdoe      10/13/99 - Creation

*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <oci.h>

static OCIEnv *envhp;
static OCIError *errhp;

int main(/*_ int argc, char *argv[] _*/);

/* get and print error */
static void checkerr(/*_OCIError *errhp, sword status _*/);
/* print error */
static void printerr(char *call);
static sword status;

/* return the average of employees' salary */
static CONST text *const selectstmt = (text *)
"select avg(sal) from sa_demo.emp";

int main(argc, argv)
int argc;
char *argv[];
{
OCISession *authp = (OCISession *) 0;
OCIServer *srvhp;
OCISvcCtx *svchp;
OCIDefine *defnp = (OCIDefine *) 0;
dvoid *parmdp;
ub4 ctxsize;
OCIParam *ctxldesc;
OCIParam *ctxedesc;
OCIStmt *stmtp = (OCIStmt *) 0;
ub4 avg_sal = 0;
sword status;

if (OCIInitialize((ub4) OCI_DEFAULT, (dvoid *) 0,
(dvoid * (*)(dvoid *, size_t)) 0,
(dvoid * (*)(dvoid *, dvoid *, size_t)) 0,
(void (*)(dvoid *, dvoid *)) 0))
printerr("OCIInitialize");

if (OCIEnvInit((OCIEnv **) &envhp, OCI_DEFAULT, (size_t) 0, (dvoid **) 0))
printerr("OCIEnvInit");

if (OCIHandleAlloc((dvoid *) envhp, (dvoid **) &errhp, OCI_HTYPE_ERROR,
(size_t) 0, (dvoid **) 0))
printerr("OCIHandleAlloc:OCI_HTYPE_ERROR");

if (OCIHandleAlloc((dvoid *) envhp, (dvoid **) &srvhp, OCI_HTYPE_SERVER,
(size_t) 0, (dvoid **) 0))
printerr("OCIHandleAlloc:OCI_HTYPE_SERVER");

if (OCIHandleAlloc((dvoid *) envhp, (dvoid **) &svchp, OCI_HTYPE_SVCCTX,
(size_t) 0, (dvoid **) 0))
printerr("OCIHandleAlloc:OCI_HTYPE_SVCCTX");

if (OCIServerAttach(srvhp, errhp, (text *) "", strlen(""), 0))
printerr("OCIServerAttach");

/* set attribute server context in the service context */
if (OCIAttrSet((dvoid *) svchp, OCI_HTYPE_SVCCTX, (dvoid *) srvhp,
(ub4) 0, OCI_ATTR_SERVER, (OCIError *) errhp))
printerr("OCIAttrSet:OCI_HTYPE_SVCCTX");

if (OCIHandleAlloc((dvoid *) envhp, (dvoid **) &authp,
(ub4) OCI_HTYPE_SESSION, (size_t) 0, (dvoid **) 0))
printerr("OCIHandleAlloc:OCI_HTYPE_SESSION");

/* set application context to 1 */
ctxsize = 1;

/* set up app ctx buffer */
if (OCIAttrSet((dvoid *) authp, (ub4) OCI_HTYPE_SESSION, (dvoid *) &ctxsize,
(ub4) 0, (ub4) OCI_ATTR_APPCTX_SIZE, errhp))
printerr("OCIAttrSet:OCI_ATTR_APPCTX_SIZE");

/* retrieve the list descriptor */
if (OCIAttrGet((dvoid *) authp, (ub4) OCI_HTYPE_SESSION,
(dvoid *) &ctxldesc, 0, OCI_ATTR_APPCTX_LIST, errhp))
printerr("OCIAttrGet:OCI_ATTR_APPCTX_LIST");

if (status = OCIParamGet(ctxldesc, OCI_DTYPE_PARAM, errhp,
(dvoid **) &ctxedesc, 1))
{
if (status == OCI_NO_DATA)
{
printf("No Data found!\n");
exit(1);
}
}

/* set context namespace to SA$<pol_name>_X */
if (OCIAttrSet((dvoid *) ctxedesc, (ub4) OCI_DTYPE_PARAM,
(dvoid *) "SA$HUMAN_RESOURCES_X",
(ub4) strlen((char *) "SA$HUMAN_RESOURCES_X"),
(ub4) OCI_ATTR_APPCTX_NAME, errhp))
printerr("OCIAttrSet:OCI_ATTR_APPCTX_NAME:SA$HUMAN_RESOURCES_X");

/* set context attribute to INITIAL_LABEL */
if (OCIAttrSet((dvoid *) ctxedesc, (ub4) OCI_DTYPE_PARAM,
(dvoid *) "INITIAL_LABEL",
(ub4) strlen((char *) "INITIAL_LABEL"),
(ub4) OCI_ATTR_APPCTX_ATTR, errhp))
printerr("OCIAttrSet:OCI_DTYPE_PARAM:INITIAL_LABEL");

/* set context value to argv[3] - initial label */
if (OCIAttrSet((dvoid *) ctxedesc, (ub4) OCI_DTYPE_PARAM,
(dvoid *) argv[3],
(ub4) strlen((char *) argv[3]),
(ub4) OCI_ATTR_APPCTX_VALUE, errhp))
printerr("OCIAttrSet:argv[3]");

/* username first command line argument */
if (OCIAttrSet((dvoid *) authp, (ub4) OCI_HTYPE_SESSION, (dvoid *) argv[1],
(ub4) strlen((char *) argv[1]), (ub4) OCI_ATTR_USERNAME,
errhp))
printerr("OCIAttrSet:username");

/* password second command line argument */
if (OCIAttrSet((dvoid *) authp, (ub4) OCI_HTYPE_SESSION, (dvoid *) argv[2],
(ub4) strlen((char *) argv[2]), (ub4) OCI_ATTR_PASSWORD,
errhp))
printerr("OCIAttrSet:password");

if (OCISessionBegin(svchp, errhp, authp, OCI_CRED_RDBMS, (ub4) OCI_DEFAULT))
printerr("OCISessionBegin");

if (OCIAttrSet((dvoid *) svchp, (ub4) OCI_HTYPE_SVCCTX, (dvoid *) authp,
(ub4) 0, (ub4) OCI_ATTR_SESSION, errhp))
printerr("OCIAttrSet:OCI_ATTR_SESSION");

if (OCIHandleAlloc((dvoid *) envhp, (dvoid **) &stmtp, OCI_HTYPE_STMT,
0, 0))
printerr("OCIHandleAlloc:OCI_HTYPE_STMT");

if (OCIStmtPrepare(stmtp, errhp, (CONST OraText *) selectstmt,
(ub4) strlen((const char *) selectstmt),
(ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT))
printerr("OCIStmtPrepare");

if (OCIDefineByPos(stmtp, &defnp, errhp, (ub4) 1, (dvoid *) &avg_sal,
(sb4) sizeof(avg_sal), SQLT_INT, 0, 0, 0, OCI_DEFAULT))
printerr("OCIDefineByPos");

if (status = OCIStmtExecute(svchp, stmtp, errhp, 1, 0, NULL, NULL,
OCI_DEFAULT))
{
if (status == OCI_NO_DATA)
{
printf("No Data found!\n");
exit(1);
}
}

if (OCISessionEnd(svchp, errhp, authp, OCI_DEFAULT))
printerr("OCISessionEnd");

printf("average salary is: %d\n", avg_sal);
}

void checkerr(errhp, status)
OCIError *errhp;
sword status;
{
text errbuf[512];
sb4 errcode = 0;

switch (status)
{
case OCI_ERROR:
(void) OCIErrorGet((dvoid *) errhp, 1, NULL, &errcode, errbuf,
(ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
printf("Error - %.*s\n", 512, errbuf);
break;
default:
break;
}
}

void printerr(call)
char *call;
{
printf("Error: %s\n", call);
}
/* end of file ext_mls.c */

B Oracle Internet Directoryを使用したLabel Security用コマンドライン・ツール

Oracle Label SecurityをOracle Internet Directoryと併用する場合、セキュリティ管理者は特定のコマンドを使用して、ディレクトリに格納されるラベル・セキュリティ属性を作成または変更できます。

注意:
このリリースから、Oracle Label Securityの管理に、Oracle Enterprise Manager Database Controlで提供されるグラフィカル・ユーザー・インタフェースも使用できるようになりました。詳細は、Oracle Enterprise Managerのヘルプを参照してください。

この付録では、これらのコマンドとコマンドに必要なパラメータについて説明します。コマンドによって、ディレクトリ内のエントリの更新、挿入および削除が実行され、コマンドは、$ORACLE_HOME/bin/olsadmintoolからコールするolsadmintoolという名前のスクリプトを介して実装されます。この付録には、次の項および表が含まれます。

- 表B-1「Oracle Label Securityカテゴリ別のコマンド」は、すべてのコマンドと参照先をカテゴリ別に示しています。Oracle Internet Directoryを使用せずにOracle Label Securityを単独で使用する場合は、一部のコマンドにより、指定の目的で使用されるPL/SQLプロシージャ(表B-2「olsadmintoolコマンドと参照先」を参照)が置き換えられます。すでにOracle Internet Directoryを追加するOracle Label Securityを使用しているサイトでは、これらのPL/SQLプロシージャの使用を新規コマンドの使用に切り替える必要があります。

- 表B-2「olsadmintoolコマンドと参照先」には、各コマンドと参照先がアルファベット順に示されています。

- 表B-2「olsadmintoolコマンドと参照先」に続く「コマンドの説明」では、各コマンドとパラメータについてアルファベット順に例をあげ、個別に説明します。

- 表B-2「olsadmintoolコマンドと参照先」の後に「olsadmintoolコマンドの関連パラメータ」、「サマリー」、表B-3「サマリー: olsadmintoolコマンドのパラメータ」および表B-4「プロファイルとデフォルトのコマンド・パラメータのサマリー」を示します。これらの表には、コマンドとパラメータの使用方法がまとめられており、パラメータの使用パターンを確認できます。

- 表B-3「サマリー: olsadmintoolコマンドのパラメータ」には、各パラメータの詳細とそのパラメータを使用するコマンドがアルファベット順に示されています。

- 「olsadmintoolの使用例」は、このツールの典型的な使用方法と、特定の例の結果を示しています。

表B-1 Oracle Label Securityカテゴリ別のコマンド

コマンドのカテゴリ

コマンドの用途

コマンド

置き換えられるPL/SQL文

ポリシー

ポリシーの作成

olsadmintool createpolicy

SA_SYSDBA.CREATE_POLICY

レベルの変更

olsadmintool alterpolicy

SA_SYSDBA.ALTER_POLICY

ポリシーの削除

olsadmintool droppolicy

SA_SYSDBA.DROP_POLICY

ポリシー作成者の追加

olsadmintool addpolcreator

なし、新規

ポリシー作成者の削除

olsadmintool droppolcreator

なし、新規

ポリシー内のレベル

レベルの作成

olsadmintool createlevel

SA_COMPONENTS.CREATE_LEVEL

レベルの変更

olsadmintool alterlevel

SA_COMPONENTS.ALTER_LEVEL

レベルの削除

olsadmintool droplevel

SA_COMPONENTS.DROP_LEVEL

ポリシー内のグループ

グループの作成

olsadmintool creategroup

SA_COMPONENTS.CREATE_GROUP

グループの変更

olsadmintool altergroup

SA_COMPONENTS.ALTER_GROUP

(グループの親も対象)

olsadmintool altergroupparent

SA_COMPONENTS.ALTER_GROUP_PARENT

グループの削除

olsadmintool dropgroup

SA_COMPONENTS.DROP_GROUP

ポリシー内の区分

区分の作成

olsadmintool createcompartment

SA_COMPONENTS.CREATE_COMPARTMENT

区分の変更

olsadmintool altercompartment

SA_COMPONENTS.ALTER_COMPARTMENT

区分の削除

olsadmintool dropcompartment

SA_COMPONENTS.DROP_COMPARTMENT

データ・ラベル

ラベルの作成

olsadmintool createlabel

SA_LABEL_ADMIN.CREATE_LABEL

ラベルの変更

olsadmintool alterlabel

SA_LABEL_ADMIN.ALTER_LABEL

ラベルの削除

olsadmintool droplabel

SA_LABEL_ADMIN.DROP_LABEL

ユーザー

プロファイルへのユーザーの追加

olsadmintool adduser

なし、新規

ユーザーの削除

olsadmintool dropuser

SA_USER_ADMIN.DROP_USER_ACCESS

プロファイル

プロファイルの作成

olsadmintool createprofile

複数のメソッドの使用を置換え。脚注1

プロファイル・リストの表示

olsadmintool listprofile

なし、新規

プロファイルの記述

olsadmintool describeprofile

なし、新規

プロファイルの削除

olsadmintool dropprofile

なし、新規

ポリシー管理者

ポリシー管理者の削除

olsadmintool addadmin

なし、新規

ポリシー管理者の削除

olsadmintool dropadmin

なし、新規

ポリシーへのアクセス

監査オプションの設定

olsadmintool addpolaccess

なし、新規

olsadmintoolコマンドの関連パラメータ

olsadmintool droppolaccess

なし、新規

監査

監査オプションの設定

olsadmintool audit

SA_AUDIT_ADMIN.AUDIT

olsadmintool noaudit

SA_AUDIT_ADMIN.NOAUDIT

ヘルプ

olsadmintoolのヘルプの表示

olsadmintool command --help

なし、新規

脚注1 SA_USER_ADMIN内の複数のメソッドを置換え: SET_LEVELS、SET_USER_PRIVILEGESおよびSET_DEFAULT_LABEL

表B-2 olsadmintoolコマンドと参照先

コマンドの用途(アルファベット順のリンク)

コマンド

プロファイルへのユーザーの追加

olsadmintool adduser

ポリシー管理者の追加

olsadmintool addadmin

ポリシー作成者の追加

olsadmintool addpolcreator

区分の変更

olsadmintool altercompartment

グループの変更

olsadmintool altergroup

グループの親の変更

olsadmintool altergroupparent

ラベルの変更

olsadmintool alterlabel

レベルの変更

olsadmintool alterlevel

レベルの変更

olsadmintool alterpolicy

監査オプションの取消し

olsadmintool noaudit

区分の作成

olsadmintool createcompartment

グループの作成

olsadmintool creategroup

ラベルの作成

olsadmintool createlabel

レベルの作成

olsadmintool createlevel

プロファイルの作成

olsadmintool createprofile

ポリシーの作成

olsadmintool createpolicy

プロファイルの記述

olsadmintool describeprofile

区分の削除

olsadmintool dropcompartment

グループの削除

olsadmintool dropgroup

ラベルの削除

olsadmintool droplabel

レベルの削除

olsadmintool droplevel

ポリシーの削除

olsadmintool droppolicy

プロファイルの削除

olsadmintool dropprofile

ユーザーの削除

olsadmintool dropuser

ポリシー管理者の削除

olsadmintool dropadmin

ポリシー作成者の削除

olsadmintool droppolcreator

olsadmintoolコマンドのヘルプの表示

olsadmintool <command name> --help

プロファイル・リストの表示

olsadmintool listprofile

監査オプションの設定

olsadmintool audit

B.1 コマンドの説明

以降のコマンドの説明では、一部のパラメータはオプションです。オプションのパラメータは、大カッコなどで囲んで示されています。最も一般的な2つの例が[ -b <admin context> ] and [-p <port>]で、コマンドの管理コンテキストまたはOracle Internet Directoryへの接続に使用するポートを指定することはオプションであることを示します。(デフォルト・ポートは389です。)

単一のダッシュで始まるb、h、p、Dおよびwを除き、すべてのパラメータには2つのダッシュ(スペースなしの--)を使用する必要があります。2つのダッシュは、使用する名前またはパラメータの完全または長いバージョンを指定する必要があることを示します。このような名前またはパラメータにスペースが含まれている場合は、"これは極端に長い名前またはパラメータです。"のように二重引用符で囲む必要があります。

このリストには、各コマンドが読みやすいように複数行で示されていますが、実際のコマンドラインでは長い1行として発行されます。

プロファイルへのユーザーの追加

olsadmintool adduser --polname <policy name> --profname <profilename> --userdn
<enterprise user DN>[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN>
-w <bind password>

adduserコマンドの説明 adduserコマンドを使用すると、ポリシー内のプロファイルにエンタープライズ・ユーザーを追加できます。プロファイル名、ポリシー名およびユーザーDNを指定します。脚注1 エンタープライズ・ユーザーは、データベースに接続するための追加の機能を持つ標準的なOracle Internet Directoryユーザーです。プロファイルに追加するユーザーは、エンタープライズ・ユーザーである必要があります。

adduserコマンドの例

olsadmintool adduser --polname tradesecret --profname topsales --userdn "cn=perot"
-b "cn=EDS" -h ford -p 1890 -D cn=lbacsys -w lbacsyspwrd

注意:
サード・パーティ・ディレクトリからインポートされたOracle Internet Directoryにユーザーがある場合、これらのユーザーのobjectclass属性をorcluserに設定してから、olsadmintool adduserコマンドを実行する必要があります。

ポリシー管理者の追加

olsadmintool addadmin --polname <policy name> --admindn <admin DN>
[ -b <admin context>] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

addadminコマンドの説明

addadminコマンドを使用すると、ポリシーの管理グループにエンタープライズ・ユーザーを追加でき、これにより、そのユーザーは指定されたポリシーのメタデータを作成、変更または削除できるようになります。ポリシー名および新規管理者のDNを指定します。このグループには、エンタープライズ・ユーザーのみを含める必要があります。

addadminコマンドの例

olsadmintool addadmin --polname defense --admindn "cn=scott,c=us"
-h yippee -D cn=lbacsys -w lbacsys

ポリシー作成者の追加

olsadmintool addpolcreator --userdn <user DN>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

addpolcreatorコマンドの説明

addpolcreatorコマンドを使用すると、指定したユーザーにポリシーの作成を許可できます。ユーザーのDNを指定します。

addpolcreatorコマンドの例

olsadmintool addpolcreator --userdn "cn=scott" -h yippee -D cn=lbacsys -w lbacsys

区分の変更

olsadmintool altercompartment --polname <policy name> --shortname
<short compartment name> --longname <new long compartment name>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

altercompartmentコマンドの説明 altercompartmentコマンドを使用すると、区分の詳細名を変更できます。ポリシー名、区分の短縮名および新規の詳細名を指定します。

altercompartmentコマンドの例

olsadmintool altercompartment --polname defense --shortname A --longname "Allied
Forces" -h yippee -D cn=defense_admin -w Easy2rem

グループの変更

olsadmintool altergroup --polname <policy name> --shortname <short group name>
--longname <"new long group name">
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

altergroupコマンドの説明 altergroupコマンドを使用すると、グループ・コンポーネントまたは親グループの詳細名を変更できます。ポリシー名とグループの短縮名および詳細名を指定します。

altergroupコマンドの例

olsadmintool altergroup --polname defense --shortname US --longname "United States
of America"  -h yippee -D cn=defense_admin -w Easy2rem

グループの親の変更

olsadmintool altergroupparent --polname <policy name> --shortname
<short group name> [--parentname <new parent group name> ] [--clearparent]
--longname <"new long group name"> [--parentname <new short group name> ]
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

altergroupparentコマンドの説明 altergroupparentコマンドを使用すると、グループの親グループを変更または削除できます。ポリシー名およびグループの短縮名と、親グループの短縮名またはclearparentフラグのどちらか一方を指定します。

altergroupparentコマンドの例

olsadmintool altergroupparent --polname defense --shortname US --parentname
"Earth" -h yippee -p 5678 -D cn=defense_admin -w Easy2rem
or
olsadmintool altergroupparent --polname defense --shortname US --clearparent
-h yippee -p 5678 -D cn=defense_admin -w Easy2rem

ラベルの変更

olsadmintool alterlabel --polname <policy name> --tag <tag number>
--value <new label value>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

alterlabelコマンドの説明 alterlabelコマンドを使用すると、ラベル・タグに関連付けられているラベル定義文字列を変更できます。ポリシー名、ラベルの数値タグおよびラベルを表す新規文字列を指定します。

alterlabelコマンドの例

olsadmintool alterlabel --polname defense --tag 100 --value "TS:A:US" -h yippee
-D cn=defense_admin -w Easy2rem

レベルの変更

olsadmintool alterlevel --polname <policy name> --shortname <short level name>
--longname <"new long level name">
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

alterlevelコマンドの説明 alterlevelコマンドを使用すると、レベルの詳細名を変更できます。ポリシー名、レベルの短縮名および新規の詳細名を指定します。

alterlevelコマンドの例

olsadmintool alterlevel --polname defense --shortname TS
--longname "VERY TOP SECRET" -h yippee -D cn=defense_admin -w Easy2rem

ポリシーの変更

olsadmintool alterpolicy --name <policy name> --options <new options>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

where <new options> can be any combination of the following entries:
INVERSE_GROUP, HIDE, LABEL_DEFAULT, LABEL_UPDATE, CHECK_CONTROL,
READ_CONTROL,WRITE_CONTROL,INSERT_CONTROL, DELETE_CONTROL,
UPDATE_CONTROL, ALL_CONTROL, or NO_CONTROL

alterpolicyコマンドの説明 alterpolicyコマンドを使用すると、ポリシーのオプションを変更できます。ポリシー名と新規オプションを指定します。

alterpolicyコマンドの例

olsadmintool alterpolicy --name defense --options "READ_CONTROL,INSERT_CONTROL"
-h yippee -D cn=defense_admin -w Easy2rem

監査オプションの取消し

olsadmintool noaudit --polname <policy name> --options <audit option name>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

where <audit option name> can be any combination of APPLY, REMOVE, SET, PRIVILEGE

noauditコマンドの説明 noauditコマンドを使用すると、ポリシーの監査オプションを取り消すことができます。ポリシー名と監査外にするオプションを指定します。

noauditコマンドの例

olsadmintool noaudit --polname defense --options "APPLY,PRIVILEGES" -h yippee
-D cn=defense_admin -w Easy2rem

区分の作成

olsadmintool createcompartment --polname <policy name> --tag <tag number>
--shortname <short compartment name> --longname <"long compartment name">
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

createcompartmentコマンドの説明 createcompartmentコマンドを使用すると、新規区分コンポーネントを作成できます。ポリシー名と、区分のタグの数値、短縮名および詳細名を指定します。

createcompartmentコマンドの例

olsadmintool createcompartment --polname defense --tag 100 --shortname A
--longname Alpha -h yippee -D cn=defense_admin -w Easy2rem

グループの作成

olsadmintool creategroup --polname <policy name> --tag <tag number>
--shortname <short group name> --longname <"long group name">
[--parentname <parent group name>]
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

creategroupコマンドの説明 creategroupコマンドを使用すると、新規グループ・コンポーネントを作成できます。ポリシー名と、グループのタグの数値、短縮名、詳細名および親グループ名(オプション)を指定します。

creategroupコマンドの例

olsadmintool creategroup --polname defense --tag 55 --shortname US
--longname "United States" -h yippee -D cn=defense_admin -w Easy2rem

ラベルの作成

olsadmintool createlabel --polname <policy name> --tag <tag number>
--value <label value>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

createlabelコマンドの説明 createlabelコマンドを使用すると、有効なデータ・ラベルを作成できます。ポリシー名、作成するラベルの数値タグおよびラベルを表す文字列を指定します。

createlabelコマンドの例

olsadmintool createlabel --polname defense --tag 100 --value "TS:A,B:US,CA"
-h yippee -D cn=defense_admin -w Easy2rem

レベルの作成

olsadmintool createlevel --polname <policy name> --tag <tag number>
--shortname <short level name> --longname <"long level name">
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

createlevelコマンドの説明 createlevelコマンドを使用すると、新規レベル・コンポーネントを作成できます。ポリシー名、タグの数値、レベルの短縮名および詳細名を指定します。

createlevelコマンドの例

olsadmintool createlevel --polname defense --tag 100 --shortname TS
--longname "TOP SECRET" -h yippee -D cn=defense_admin -w Easy2rem

プロファイルの作成

olsadmintool createprofile --polname <policy name> --profname <profile name>
--maxreadlabel <max read label> --maxwritelabel <max write label>
--minwritelabel <min write label> --defreadlabel <default read label>
--defrowlabel <default row label> --privileges <privileges separated by comma>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

createprofileコマンドの説明 createprofileコマンドを使用すると、新規プロファイルを作成できます。ポリシー名、プロファイル名、および権限またはラベルのどちらか(あるいはその両方)を指定します。(ユーザー・プロファイルにはNULLのラベル情報またはNULLの権限情報を指定できますが、同時に両方にNULLは指定できません。)ラベルの場合は、このプロファイル内のユーザーがデータの読取りに使用できる最大ラベル、このプロファイル内のユーザーがデータの書込みに使用できる最大ラベル、このプロファイル内のユーザーがデータの書込みに使用できる最小ラベル、読取り用のデフォルト・ラベルおよび書込み用のデフォルト行ラベルを指定します。権限の場合は、このプロファイルのメンバーの権限をカンマで区切ったリストを引用符で囲みます。

createprofileコマンドの例

olsadmintool createprofile --polname topsecret --profname topsales
--maxreadlabel "TS:A,B:US,CA" --maxwritelabel "TS:A,B:US,CA"
--minwritelabel "C" --defreadlabel "TS:A,B:US,CA"
--defrowlabel "C:A,B:US,CA"
--privileges "READ,COMPACCESS,WRITEACROSS"
-b EDS -h ford -p 1890 -D cn=lbacsys -w lbacsyspwrd

ポリシーの作成

olsadmintool createpolicy --name <policy name> --colname <column name>
--options <options separated by commas>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

where <new options> can be any combination of the following entries:
INVERSE_GROUP, HIDE, LABEL_DEFAULT, LABEL_UPDATE, CHECK_CONTROL, READ_CONTROL,
WRITE_CONTROL,INSERT_CONTROL, DELETE_CONTROL, UPDATE_CONTROL, ALL_CONTROL,
or NO_CONTROL

createpolicyコマンドの説明 createpolicyコマンドを使用すると、ポリシーを作成できます。ポリシー名、ラベル列名およびオプションを指定します。

createpolicyコマンドの例

olsadmintool createpolicy --name defense --colname defense_col
--options "READ_CONTROL,UPDATE_CONTROL" -h yippee -p 389 -D cn=defense_admin
-w Easy2rem

プロファイルの記述

olsadmintool describeprofile --polname <policy name> --profname <profile name>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

describeprofileコマンドの説明

describeprofileコマンドを使用すると、指定したポリシー内の指定したプロファイルの内容を表示できます。ポリシー名とプロファイル名を指定します。

describeprofileコマンドの例

olsadmintool describeprofile --polname defense --profname contractors
-h yippee -D cn=defense_admin -w Easy2rem

区分の削除

olsadmintool dropcompartment --polname <policy name>
--shortname <short compartment name>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

dropcompartmentコマンドの説明 dropcompartmentコマンドを使用すると、区分コンポーネントを削除できます。ポリシー名と区分の短縮名を指定します。

dropcompartmentコマンドの例

olsadmintool dropcompartment --polname defense --shortname A
-h yippee -D cn=defense_admin -w Easy2rem

グループの削除

olsadmintool dropgroup --polname <policy name> --shortname <short group name>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

dropgroupコマンドの説明 dropgroupコマンドを使用すると、グループ・コンポーネントを削除できます。ポリシー名とグループの短縮名を指定します。

dropgroupコマンドの例

olsadmintool dropgroup --polname defense --shortname US
-h yippee -D cn=defense_admin -w Easy2rem

ラベルの削除

olsadmintool droplabel --polname <policy name> --value <label value>
-h yippee [-p <port>] -D <bind DN> -w <bind password>

droplabelコマンドの説明 droplabelコマンドを使用すると、ポリシーからラベルを削除できます。ポリシー名とラベルを表す文字列を指定します。

droplabelコマンドの例

olsadmintool droplabel --polname defense --value "TS:A:US"
h yippee -D cn=defense_admin -w Easy2rem

レベルの削除

olsadmintool droplevel --polname <policy name> --shortname <short level name>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

droplevelコマンドの説明 droplevelコマンドを使用すると、指定したポリシーからレベル・コンポーネントを削除できます。ポリシー名とレベルの短縮名を指定します。

droplevelコマンドの例

olsadmintool droplevel --polname defense --shortname TS
-h yippee -D cn=defense_admin -w Easy2rem

ポリシーの削除

olsadmintool droppolicy --name <policy name>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

droppolicyコマンドの説明 droppolicyコマンドを使用すると、ポリシーを削除できます。削除するポリシーの名前を指定します。Oracle Label SecurityのOracle Internet Directory対応のインストールについては、「Oracle Internet Directory対応Oracle Label Securityでのポリシーのサブスクライブ」を参照してください。

droppolicyコマンドの例

olsadmintool droppolicy --name defense -h yippee -D cn=defense_admin -w Easy2rem

プロファイルの削除

olsadmintool dropprofile --polname <policy name> --profname <profile name>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

dropprofileコマンドの説明 dropprofileコマンドを使用すると、指定したプロファイルを削除できます。ポリシー名と削除するプロファイルの名前を指定します。

注意:
プロファイルを削除すると、削除したプロファイル内のユーザー全員について、そのポリシーから認可が削除されます。これらのユーザーは、そのポリシーで保護されているデータを表示できなくなります。

dropprofileコマンドの例

olsadmintool dropprofile --name defense --profname employees
-h yippee -D cn=defense_admin -w Easy2rem

ユーザーの削除

olsadmintool dropuser --polname <policy name> --profname <profilename>
--userdn <enterprise user DN>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

dropuserコマンドの説明 dropuserコマンドを使用すると、指定したポリシーの指定したプロファイルからユーザーを削除できます。ポリシー名、プロファイル名およびユーザーのDNを指定します。

dropuserコマンドの例

olsadmintool dropuser --polname defense --profname contractors
--userdn "cn=hanssen,c=us" -h yippee -D cn=defense_admin -w Easy2rem

ポリシー管理者の削除

olsadmintool dropadmin --polname <policy name> --admindn <admin DN>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

dropadminコマンドの説明 dropadminコマンドを使用すると、ポリシーの管理グループからエンタープライズ・ユーザーを削除でき、これにより、そのユーザーは指定されたポリシーのメタデータを作成、変更または削除できなくなります。ポリシー名、および管理グループから削除する管理者のDNを指定します。

dropadminコマンドの例

olsadmintool dropadmin --polname defense --admindn "cn=scott,c=us"
-h yippee -D cn=lbacsys -w lbacsys

ポリシー作成者の削除

olsadmintool droppolcreator --userdn <user DN>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

droppolcreatorコマンドの説明 droppolcreatorコマンドを使用すると、指定したユーザーからポリシー作成許可を取り消すことができます。ユーザーのDNを指定します。

droppolcreatorコマンドの例

olsadmintool droppolcreator --userdn "cn-scott,c=us"
-b UA -h yippee -p 1890 -D <bind DN> -w <bind password>

olsadmintoolコマンドのヘルプの表示

olsadmintool <command name> --help

プロファイル・リストの表示

olsadmintool listprofile --polname <policy name>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

listprofileコマンドの説明 listprofileコマンドを使用すると、指定したポリシー内の全プロファイルのリストを表示できます。ポリシー名を指定します。

listprofileコマンドの例

olsadmintool listprofile --polname defense -b CIA
-h yippee -D cn=defense_admin -w Easy2rem

監査オプションの設定

olsadmintool audit --polname <policy name> --options <audit option name>
--type <audit option type> --success <audit success type>
[ -b <admin context> ] -h <OID host> [-p <port>] -D <bind DN> -w <bind password>

where <audit option name> can be any combination of APPLY, REMOVE, SET, PRIVILEGE,
type can be "session" or "access", and success can be "successful",
"not successful" or "both".

auditコマンドの説明 auditコマンドを使用すると、ポリシーの監査オプションを設定できます。ポリシー名、監査するオプション、監査のタイプおよび監査対象となる成功のタイプを指定します。

audit コマンドの例

olsadmintool audit --polname defense --options "APPLY,PRIVILEGE" --type session
--success success -h yippee -D cn=defense_admin -w Easy2rem

B.2 olsadmintoolコマンドの関連パラメータ

すべてのolsadmintoolコマンドでは、接続パラメータ、つまりOIDホスト、バインドDN、バインド・パスワードおよびOracle Internet Directoryへの接続に使用するポート(オプション)を指定する必要があります。(デフォルト・ポートは389です。)

すべてのolsadmintoolコマンドでは、必要に応じて-bフラグを使用してサブスクライバ/管理コンテキストを指定できます。

ポートや管理コンテキストなどのパラメータ指定がオプションであることは、パラメータが大カッコで囲まれていることで示されています。最も一般的な2つの例が、[ -b <admin context> ]および[-p <port> ]です。

各コマンドでは、ホスト、バインドDNおよびパスワードの指定は必須で、必要に応じて管理コンテキストも指定できるため、表B-3「サマリー: olsadmintoolコマンドのパラメータ」では、これらの接続パラメータすべてをグループとして表すために省略形CONを使用しています。

[ -b <admin context> ] h <OID host> [-p <port>] -D <bind DN> -w <bind password>

B.2.1 サマリー

表B-3「サマリー: olsadmintoolコマンドのパラメータ」には、コマンドが次のカテゴリ別にまとめられています。

- ポリシー: ポリシーまたはそのコンポーネント(レベル、グループおよび区分)の作成、変更または削除

- データ・ラベル: データ・ラベルの作成、変更または削除

- 管理者およびポリシー作成者: 管理者およびポリシー作成者の追加または削除

- ユーザー: プロファイルに対するユーザーの追加または削除

- 監査オプション: ポリシーの監査内容を示すオプションの設定

- プロファイル: プロファイルの作成、リスト、記述または削除

- デフォルトの読取りまたは行ラベル: デフォルトの読取りまたは行ラベルの設定

表B-3「サマリー: olsadmintoolコマンドのパラメータ」および表B-4「プロファイルとデフォルトのコマンド・パラメータのサマリー」では、列見出しはパラメータのみを示し、必須の先行キーワードは示されていません。たとえば、表B-3「サマリー: olsadmintoolコマンドのパラメータ」では、policynameとcolumn-nameはcreatepolicyコマンドのパラメータで、必須の先行キーワード(--nameおよび--colname)は示されていません。これらのキーワードは、「ポリシーの作成」など、コマンドの説明にそれぞれ必須です。

表B-3「サマリー: olsadmintoolコマンドのパラメータ」および表B-4「プロファイルとデフォルトのコマンド・パラメータのサマリー」のサマリーに列見出しとして使用されている個々のパラメータの説明は、表B-3「サマリー: olsadmintoolコマンドのパラメータ」を参照してください。

この3つの表の凡例は次のとおりです。

- Xは必須、Oは使用しないか省略されることを意味します。

- OptionsPはポリシー施行オプションを意味します。つまり、次のエントリをカンマで区切った組合せを示します。

- INVERSE_GROUP

- HIDE

- LABEL_DEFAULT

- LABEL_UPDATE

- CHECK_CONTROL

- READ_CONTROL

- WRITE_CONTROL

- INSERT_CONTROL

- DELETE_CONTROL

- UPDATE_CONTROL

- ALL_CONTROL

- NO_CONTROL

- OptionsAは監査オプションを意味します。つまり、エントリSET、APPLY、REMOVEまたはPRIVILEGEをカンマで区切った組合せを示します。

表B-3 サマリー: olsadmintoolコマンドのパラメータ

コマンドのカテゴリ

コマンドとパラメータ

ポリシー

コマンド

policy name

column- name

optionsP

CON

olsadmintool createpolicy

X

X

X

X

olsadmintool alterpolicy

X

O

X

X

olsadmintool droppolicy

X

O

O

X

ポリシー内での作成:

コマンド

policy name

tag

short name

long name

CON

parent name

レベル

olsadmintool createlevel

X

X

X

X

X

O

グループ

olsadmintool creategroup

X

X

X

X

X

[ X ]

区分

olsadmintool createcompartment

X

X

X

X

X

O

ポリシー内での変更:

レベル

olsadmintool alterlevel

X

O

u

u

u

O

グループまたは親グループ

olsadmintool altergroup

X

O

X

X

X

O

olsadmintool altergroupparent

X

O

X

O

X

[ X ]

コマンド

policy name

tag

short name

long name

CON

parent name

区分

olsadmintool altercompartment

X

O

X

X

X

O

ポリシー内での削除:

レベル

olsadmintool droplevel

X

O

X

O

X

O

グループ

olsadmintool dropgroup

X

O

X

O

X

O

区分

olsadmintool dropcompartment

X

O

X

O

X

O

データ・ラベル

コマンド

policy name

tag

value

CON

ラベルの作成

olsadmintool createlabel

X

X

X

X

データ・ラベルの変更

olsadmintool alterlabel

X

X

X

X

データ・ラベルの削除

olsadmintool droplabel

X

O

X

X

ポリシー管理者

コマンド

policy name

userDN

CON

管理者の追加

olsadmintool addadmin

X

X

X

管理者の削除

olsadmintool dropadmin

X

X

X

ポリシーの作成

olsadmintool addpolcreator

O

X

X

olsadmintool droppolcreator

O

X

X

ユーザー

コマンド

policy name

profile name

userDN

CON

ユーザーの追加

olsadmintool adduser

X

X

X

X

ユーザーの削除

olsadmintool dropuser

X

X

X

X

監査

olsadmintool audit

X

optionsA

type

success

CON

olsadmintool noaudit

X

X

X

X

X

olsadmintoolのヘルプ

olsadmintool <commandname> -- help

O

O

O

O

O

表B-4 プロファイルとデフォルトのコマンド・パラメータのサマリー

プロファイルのアクション

プロファイル・コマンド

ポリシー名

プロファイル名

最大読取りラベル

最大書込みラベル

最小書込みラベル

Def Read Label

Def Row Label

privileges

CON

プロファイルの作成脚注1

olsadmin tool create profile

X

X

X

X

X

X

X

X

X

プロファイル・リストの表示

olsadmin tool list profile

X

O

O

O

O

O

O

O

X

プロファイルの記述

olsadmin tool describe profile

X

X

O

O

O

O

O

O

X

プロファイルの削除

olsadmin tool drop profile

X

X

O

O

O

O

O

O

X

脚注1 createprofileでは、権限とラベルの両方を指定する必要があります。profileでは、ラベルまたは権限、あるいはその両方を指定できます。

B.3 olsadmintoolの使用例

この後の項では、Oracle Internet Directory環境におけるOracle Label Securityの設定に必要な標準タスクでolsadmintoolコマンドを使用する例を示します。このリストには、各コマンドが読みやすいように複数行で示されていますが、実際のコマンドラインでは長い1行として発行されます。これらのコマンドすべての実行結果をまとめたものについては、最後の例の後の「前述の例の結果」を参照してください。

- 他のユーザーをポリシー作成者として設定する例

- 有効なオプションを指定してポリシーを作成する例

- ポリシー管理者の作成例

- 区分の作成例

- グループの作成例

- ラベルの作成例

- プロファイルの作成

- プロファイルにユーザーを追加する例

- プロファイルに他のユーザーを追加する例

- 監査オプションの設定例

B.3.1 他のユーザーをポリシー作成者として設定する例

ORACLE_HOME/bin/olsadmintool addpolcreator --userdn "cn=snamudur,c=us"
-b "ou=Americas,o=Oracle,c=US" -h yippee -p 389 -D "cn=lbacsys,c=us" -w lbacsys

B.3.2 有効なオプションを指定してポリシーを作成する例

ORACLE_HOME/bin/olsadmintool createpolicy --name Policy1 --colname pol1
--options READ_CONTROL,WRITE_CONTROL -b "ou=Americas,o=Oracle,c=US"
-h yippee -p 389 -D "cn=snamudur,c=us" -w snamudur

ORACLE_HOME/bin/olsadmintool createpolicy --name Policy2 --colname pol2
--options READ_CONTROL -b "ou=Americas,o=Oracle,c=US"
-h yippee -p 389 -D "cn=lbacsys,c=us" -w lbacsys

B.3.3 ポリシー管理者の作成例

ORACLE_HOME/bin/olsadmintool addadmin --polname Policy1
--admindn "cn=shwong,c=us" -b "ou=Americas,o=Oracle,c=US" -h yippee -p 389
-D "cn=snamudur,c=us" -w snamudur

ORACLE_HOME/bin/olsadmintool addadmin --polname Policy2
--admindn "cn=shwong,c=us" -b "ou=Americas,o=Oracle,c=US" -h yippee -p 389
-D "cn=lbacsys,c=us" -w lbacsys

B.3.4 レベルの作成例

ORACLE_HOME/bin/olsadmintool createlevel --polname Policy1 --tag 100
--shortname TS --longname "TOP SECRET" -b "ou=Americas,o=Oracle, c=US"
-h yippee -p 389 -D "cn=shwong,c=us" -w shwong

ORACLE_HOME/bin/olsadmintool createlevel --polname Policy1 --tag 99
--shortname S --longname SECRET -b "ou=Americas,o=Oracle,c=US"
-h yippee -p 389 -D "cn=shwong,c=us" -w shwong

ORACLE_HOME/bin/olsadmintool createlevel --polname Policy1 --tag 98
--shortname U --longname UNCLASSIFIED -b "ou=Americas,o=Oracle,c=US"
-h yippee -p 389 -D "cn=shwong,c=us" -w shwong

B.3.5 区分の作成例

ORACLE_HOME/bin/olsadmintool createcompartment --polname Policy1 --tag 100
--shortname A --longname ALPHA -b "ou=Americas,o=Oracle,c=US"
-h yippee -p 389 D "cn=shwong,c=us" -w shwong

ORACLE_HOME/bin/olsadmintool createcompartment --polname Policy1 --tag 99
--shortname B --longname BETA -b "ou=Americas,o=Oracle,c=US"
-h yippee -p 389 -D "cn=shwong,c=us" -w shwong

B.3.6 グループの作成例

ORACLE_HOME/bin/olsadmintool creategroup --polname Policy1 --tag 100
--shortname G1 --longname GROUP1
-b "ou=Americas,o=Oracle,c=US"  -h yippee -p 389 -D "cn=shwong,c=us" -w shwong

ORACLE_HOME/bin/olsadmintool creategroup --polname Policy1 --tag 99
--shortname G2 --longname GROUP2
-b "ou=Americas,o=Oracle,c=US" -h yippee -p 389 -D "cn=shwong,c=us" -w shwong

ORACLE_HOME/bin/olsadmintool creategroup --polname Policy1 --tag 98
--shortname G3 --longname GROUP3
-b "ou=Americas,o=Oracle,c=US"  -h yippee -p 389 -D "cn=shwong,c=us" -w shwong

B.3.7 ラベルの作成例

ORACLE_HOME/bin/olsadmintool createlabel --polname Policy1
--tag 100 --value TS:A:G1
-b "ou=Americas,o=Oracle,c=US" -h yippee -p 389 -D "cn=shwong,c=us" -w shwong

ORACLE_HOME/bin/olsadmintool createlabel --polname Policy1 --tag 101
--value TS:A,B:G2
-b "ou=Americas,o=Oracle,c=US" -h yippee -p 389 -D "cn=shwong,c=us" -w shwong

B.3.8 プロファイルの作成例

ORACLE_HOME/bin/olsadmintool createprofile --polname Policy1 --profname Profile1
--maxreadlabel TS:A:G1 --maxwritelabel TS:A:G1 --minwritelabel U::
--defreadlabel U:A:G1 --defrowlabel U:A:G1 --privileges WRITEUP,READ
-b "ou=Americas,o=Oracle,c=US" -h yippee -p 389 -D "cn=shwong,c=us" -w shwong

B.3.9 プロファイルにユーザーを追加する例

ORACLE_HOME/bin/olsadmintool adduser --polname Policy1 --profname Profile1
--userdn cn=nina,ou=Asia,o=microsoft,l=seattle,st=WA,c=US
-b "ou=Americas,o=Oracle,c=US" -h yippee -p 389 -D "cn=shwong,c=us" -w shwong

B.3.10 プロファイルに他のユーザーを追加する例

ORACLE_HOME/bin/olsadmintool adduser --polname Policy1 --profname Profile1
--userdn cn=daniel,ou=France,o=oracle,l=madison,st=WI,c=US
-b "ou=Americas,o=Oracle,c=US" -h yippee -p 389 -D "cn=shwong,c=us" -w shwong

B.3.11 監査オプションの設定例

ORACLE_HOME/bin/olsadmintool audit --polname Policy1 --option "SET,APPLY"
--type SESSION --success BOTH
-b "ou=Americas,o=Oracle,c=US" -h yippee -p 389 -D "cn=shwong,c=us" -w shwong

B.3.12 前述の例の結果

前述の一連のolsadmintoolコマンドを実行した結果、このサンプルOracle Label Securityサイトの構造は次のようになります。

- ポリシー作成者: ユーザーsnamudur。

- ポリシー: Policy1およびPolicy2。

- ポリシー管理者: ユーザーshwong。

- レベル、区分およびグループ: 表B-5「olsadmintoolコマンドの使用によるラベル・コンポーネント定義」を参照してください。

表B-5 olsadmintoolコマンドの使用によるラベル・コンポーネント定義

ラベル・コンポーネント

タグ

短縮名

詳細名

レベル

100

TS

TOP SECRET

99

S

SECRET

98

U

UNCLASSIFIED

区分

100

A

ALPHA

99

B

BETA

グループ

100

G1

GROUP1

99

G2

GROUP2

98

G3

GROUP3

- データ・ラベル: TS:A:G1の場合はタグ100、TS:A,B:G2の場合はタグ101。

- ユーザー: US Oracle組織のAmericas組織の下位でWashington州Seattleに本拠を置くMicrosoft社Asiaグループに所属するNinaと、同じ組織の下位でWisconsin州Madisonに位置するオラクル社のFranceグループに所属するDaniel。

- プロファイル: 表B-6「olsadmintoolコマンドの使用によるProfile1の内容」を参照してください。

表B-6 olsadmintoolコマンドの使用によるProfile1の内容

プロファイル要素

内容

詳細名の拡張または意味

MaxReadLabel

TS:A:G1

TOP SECRET:ALPHA:GROUP1

MaxWriteLabel

TS:A:G1

TOP SECRET:ALPHA:GROUP1

MinWriteLabel

U::

UNCLASSIFIED(区分やグループへの限定なし)

DefReadLabel

U:A:G1

UNCLASSIFIED:ALPHA:GROUP1

DefRowLabel

U:A:G1

UNCLASSIFIED:ALPHA:GROUP1

権限

WRITE_UP、READ

ユーザーは任意の行を読み取って、書き込む行のレベルを上げることができます。

- 監査オプション: SET、APPLY、SESSIONおよびBOTH

脚注の凡例

脚注1: コマンドに関する脚注 各コマンドでは、ディレクトリのホスト名、バインドDNおよびバインド・パスワードを指定する必要があります。どのコマンドでも、必要に応じてサブスクライバの管理コンテキスト(オプション)またはディレクトリのポート番号(オプション)、あるいはその両方を指定できます。これらのパラメータの詳細は、表B-3「サマリー: olsadmintoolコマンドのパラメータ」も参照してください。

C Oracle RAC環境でのOracle Label Security

この付録では、Oracle Real Application Clusters (RAC)環境におけるOracle Label Securityの使用について説明します。この付録の内容は、次のとおりです。

- Oracle RAC環境におけるOracle Label Securityのポリシー機能の使用

- Oracle Label Securityでの透過的アプリケーション・フェイルオーバーの使用

C.1 Oracle RAC環境におけるOracle Label Securityのポリシー機能の使用

Oracle RACでは、あるインスタンス上で行われたポリシー変更が、他のインスタンスで即時に使用可能になります。変更内容を使用するために他方のインスタンスを再起動する必要はありません。

あるデータベース・インスタンス上で行われた重要な変更は、自動的に他のインスタンスに伝播します。その一例が、新規ポリシーの作成です。また、ポリシー・オプションの変更も同様です。

このような変更の伝播により、次の2つの貴重な保護が保証されます。

- 表の全ユーザーには、同じポリシーが適用されます。

- いずれかのインスタンスが失敗すると、他のインスタンスによる処理の継続には、失敗直前に有効だったのと同じポリシーおよびパラメータが使用されます。そのため、ポリシーが有効化または無効化されていた場合、それがすべてのインスタンスでそのまま表示されます。

管理者が、あるインスタンスで表C-1に示すポリシー・ファンクションを使用してポリシー情報を変更すると、Oracle Label Securityでは、そのファンクション・コールで変更された内容の関連情報が格納されます。新規の情報はOracle RACの他のアクティブなインスタンスで即時に使用可能になり、影響を受けるポリシーのユーザー間で均一に使用可能になります。

表C-1 Oracle RAC環境でステータスを保持するポリシー・ファンクション

ポリシー・ファンクション

コメント

sa_sysdba.create_policy()

新規ポリシーの作成

sa_sysdba.drop_policy()

既存のポリシーの削除

sa_sysdba.enable_policy()

既存のポリシーの有効化

sa_sysdba.disable_policy()

既存のポリシーの無効化

sa_sysdba.alter_policy()

既存のポリシーの変更

C.2 Oracle Label Securityでの透過的アプリケーション・フェイルオーバーの使用

セッション情報は、透過的アプリケーション・フェイルオーバー時に保持されます。表C-2に示すセッション・ファンクションを使用してセッションの情報を変更すると、その内容は透過的アプリケーション・フェイルオーバー時に保持されます。

たとえば、ユーザーScottがデフォルトのラベルTop Secretを使用してログオンするとします。このユーザーがsa_session.set_label()をコールしてセッション・ラベルをSecretに変更した場合、他のインスタンスへのフェイルオーバーが発生すると、変更は表示されませんが、セッション・ラベルはSecretのままになっています。

現行のユーザー・セッション情報を保持することにより、そのユーザーが表示または操作できるデータに対するアクセス権限および制限は変更されずに残ります。フェイルオーバーが発生しても、ユーザーが表示および操作できるのは、フェイルオーバー前にアクセス可能だった表および行のみです。保持されていない場合は、他のインスタンスにフェイルオーバーすると、ユーザーに異なるデータ・セットが表示されたり、この種のデータを表示できるようになる可能性があります。

表C-2に示すセッション・ファンクションの1つを使用すると、Oracle Label Securityではそのファンクション・コールによる変更内容の関連情報が格納されます。

表C-2 Oracle RAC環境でステータスを保持するセッション・ファンクション

セッション・ファンクション

コメント

sa_session.set_label()

ユーザーは、読取りアクセス権を持つ新規レベル、新規区分およびグループを設定できます。

sa_session.set_row_label()

ユーザーは新規の行に適用するデフォルトの行ラベルを設定できます。

sa_session.save_default_labels()

ユーザーは、現行のセッション・ラベルと行ラベルを将来のセッションのデフォルトとして格納できます。

sa_session.restore_default_labels()

ユーザーは、現行のセッション・ラベルと行ラベルを、格納されているデフォルト設定にリセットできます。

sa_session.set_access_profile()

データベース・セッションのOracle Label Securityでの認可と権限を、指定したユーザーの認証と権限に設定します。

D Oracle Label Securityに関するよくある質問

この付録では、Oracle Label Securityに関する一般的な質問に回答します。

Oracle Label Securityのユーザーは誰ですか?

機密性ラベルは、ほぼすべての産業において、データを分類するために使用されます。これらの産業には、医療、警察、エネルギー産業、小売業、国家安全保障、軍需産業などがあります。次に、機密性ラベルの例をいくつか示します。

- 内部

- ConfidentialPhysician OnlyHighly SensitiveWidget CorporationConfidential、Chicago OperationSensitive、Finance、EuropeTop SecretUnclassified

Oracle Label Securityはセキュリティ・ニーズにどのように対応できますか?

Oracle Label Securityを使用すると、データにラベルを付け、データへのアクセスを細かいレベルで制限できます。これは、複数の組織や会社で1つのアプリケーションを共有する場合に特に役立ちます。また、機密性ラベルを使用すると、アプリケーション・ユーザーによる組織へのアクセス、または組織内の一部のデータへのアクセスを制限できます。

コンシューマにとってデータのプライバシは重要であるため、規制措置が次々と公表されています。Oracle Label Securityを使用すると、データに対するプライバシ・ポリシーを実装して、データを参照する必要があるユーザーのみにアクセスを制限できます。

すべての表の保護にOracle Label Securityを使用する必要がありますか?

いいえ。ほとんどの場合、Oracleの従来の任意アクセス制御(DAC)オブジェクト権限(SELECT、INSERT、UPDATE、DELETEなど)にデータベース・ロールとストアド・プロシージャを組み合せる方法で十分です。

Oracle Virtual Private DatabaseとOracle Label Securityの違いは何ですか?

Oracle Virtual Private Database(VPD)はOracle Database Enterprise Editionに無償で付属しています。Oracle Label Securityは、Oracle Database Enterprise Editionの追加セキュリティ・オプションです。

Oracle VPDは、ファイングレイン・アクセス・コントロール(FGAC)、アプリケーション・コンテキスト、グローバル・アプリケーション・コンテキストなどの強力なセキュリティ機能に対して使用する用語です。VPDポリシーはPL/SQLを使用して記述し、個別の表またはビューに割り当てることができます。VPDで保護された表またはビューにアクセスする情報要求は、その表またはビューに割り当てられているポリシーに従って変更されます。

VPDポリシーは、アクセスを業務時間内に制限するというような簡単な設定が可能です。VPDポリシーによって、各行の属性値とアプリケーション・コンテキスト値を比較してアクセスを制限できます。グローバル・アプリケーション・コンテキストでは、複数のデータベース・セッションにわたって1つのアプリケーション・コンテキストをアクセスできるため、ユーザー・セッションごとに個別のアプリケーション・コンテキストを作成する必要がありません。

Oracle Label Securityは、行レベルのセキュリティに対して設定が容易なソリューションを提供します。コーディングやソフトウェア開発が不要なため、管理者はポリシーに完全に集中できます。Oracle Label Securityには、ポリシーの作成、施行オプションの指定、データ機密性ラベルの定義、ユーザー・ラベル認可の確立、および個別の表やスキームの保護のためのインタフェースが用意されています。

データ機密性ラベルは、データへのアクセスを強力かつ柔軟に制御する手段を提供します。たとえば、異なる組織または会社に属するデータは、データ機密性ラベルを使用して区別されるため、データ機密性ラベルの変更によって会社間で選択的に共有できます。

セキュリティ・ポリシーの複雑さによっては、Oracle Virtual Private Databaseがセキュリティ・ポリシーを実装するための最適な方法である場合があります。Oracle Label Securityは、情報の機密性に基づいてアクセス制御を決定する必要がある場合に最適です。

Oracle Virtual Private DatabaseとOracle Label Securityを組み合せることはできますか?

はい。次の使用方法が可能です。

- WHERE句をOLSポリシーに追加すると、さらに細かいレベルを追加できます。たとえば、ユーザーに対しては、各自のラベル認可に関係なく、特定のIPアドレスまたはサブネットからの接続を許可し、その接続を業務時間内のみに制限できます。

- VPDポリシーでは、列を区別するかどうかに関係なく、ユーザー・ラベルを評価して列と行へのアクセスを判断でき、このためにデータ・ラベルを適用する必要はありません。

Oracle Label SecurityはOracle E-Business Suiteと併用できますか?

Oracle Applicationsでは、新機能やセキュリティ保護を提供するために、Oracle VPDを使用しています。

Oracle Label SecurityはOracle Database Vaultと併用できますか?

Oracle Database Vaultの表は、Oracle Databaseの表の場合と同様に、Oracle Label Securityを使用して保護できます。

さらに、Oracle Label SecurityはOracle Database Vaultの機能と併用できます。Oracle Label Securityのラベルは、Database Vaultファクタに割り当てることができます。これらのラベルは、OLS管理者ガイドの4.4.5章「MERGE_LABELファンクションを使用したラベルのマージ」に記述されているアルゴリズムに従って、ユーザー・クリアランス・ラベルとマージされ、その後に、マージされたユーザー・ラベルが行ラベルと比較されてアクセス制御が判断されます。

Oracle Label securityをOracle Database Vaultの機能と併用する例については、次のOracle Technology Network Webサイトを参照してください。

http://www.oracle.com/technology/deploy/security/database-security/howtos/ols_dbv-how-to.html

Oracle Label Securityでは列レベルのアクセス制御が提供されていますか?

いいえ。Oracle Label Securityは列を認識しません。この動作は、Virtual Private Database (VPD)で可能です。VPDポリシーは、保護された表に対するSQL文に特定の列が含まれる場合のみアクティブとなるように記述できます。列の機密性スイッチがオンの場合、VPDは、機密列の値がユーザーにとってアクセス可能である行のみを戻すか、または、ユーザーが参照を許可されている値以外は機密列のすべてのセルを空白にしてすべての行を戻します。

例については、次のOracle Technology Network Webサイトを参照してください。

http://www.oracle.com/technology/deploy/security/database-security/virtual-private-database/index.html

列を識別するVPDポリシーにより、OLSユーザー・ラベルを評価して特定の列へのアクセスを判断できます。

Oracle Label Securityに基づいたセキュアなアプリケーション・ロールは可能ですか?

はい。SET ROLEコマンドが実行されるかどうかを判断するプロシージャによって、OLSユーザー・ラベルを評価できます。この場合、行ラベルはこのソリューションに含まれないため、OLSポリシーを表に適用する必要はありません。

トラステッド・ストアド・プログラム・ユニットとは何ですか?

ストアド・プロシージャ、ファンクションおよびパッケージは、定義者のシステム権限とオブジェクト権限(DAC)を使用して実行されます。実行者がOracle Label Securityユーザー・クリアランス(ラベル)を持つユーザーの場合、プロシージャは、定義者のDAC権限と実行者のセキュリティ・クリアランスの組合せを使用して実行されます。

トラステッド・ストアド・プロシージャは、OLS権限のFULLまたはREADのいずれかが付与されたプロシージャです。トラステッド・ストアド・プログラム・ユニットの実行時に有効なポリシー権限は、コール側ユーザーの権限とプログラム・ユニットの権限との組合せです。

VPDまたはOLSでは、保護された表に列が追加されますか?

Oracle Label Security(OLS)ポリシーを表に適用すると、ポリシーによって表に列が追加されます。この列の名前は、ポリシーを最初に作成するときに指定する必要があります。

既存の列は、OLS行ラベルを格納するために使用できます。この列は、NUMBER(10)データ型である必要があります。

Virtual Private Database(VPD)では、保護された表に列は追加されません。

追加したOLS行ラベル列を非表示にする理由は何ですか?

ほとんどのアプリケーションの設計ではアクセス制御メカニズムが考慮されないため、Oracle Label Security(OLS)ではラベル列の透過性が必要になります。

アプリケーションでSELECT FROM tablename文を使用して表を問い合せると、非表示でないラベル列も含めてすべての列が戻されます。既存のアプリケーションでは、追加の列を表示するように設計されていないために、障害が発生する場合があります。ただし、非表示のラベル列は、SQL文にその名前が含まれている場合のみ表示されます。SELECT FROM tablename文は、非表示のOLS列を除いて、アプリケーションの指示どおりにすべての列を戻します。

Oracle Label Securityはどこで入手できますか?

Oracle Label Securityは、Oracle Database Enterprise EditionのCDに付属しています。Oracle Label Securityは、デフォルトのOracleインストールではインストールされません。Oracle Label Securityをデータベースに追加するには、カスタム・インストールを実行する必要があります。

E リファレンス

この付録では、次のリファレンス情報について説明します。

- Oracle Label Securityのデータ・ディクショナリ表およびビュー

- Oracle Databaseのデータ・ディクショナリ表

- Oracle Label Securityのデータ・ディクショナリ・ビュー

- Oracle Label Securityの監査ビュー

- Oracle Label Securityでの制限事項

- Oracle Label SecurityでのCREATE TABLE AS SELECTの制限

- ラベル・タグの制限

- Oracle Label Securityでのエクスポート制限

- Oracle Label Securityでの削除制限

- 共有スキーマのサポート

- 非表示列の制限

- Oracle Label Securityのインストール

- Oracle Label Securityの削除

E.1 Oracle Label Securityのデータ・ディクショナリ表およびビュー

- Oracle Databaseのデータ・ディクショナリ表

- Oracle Label Securityのデータ・ディクショナリ・ビュー

- Oracle Label Securityの監査ビュー

E.1.1 Oracle Databaseのデータ・ディクショナリ表

Oracle Label Securityでは、Oracleのデータ・ディクショナリ表がラベル付けされることはありません。アクセスは、標準的なOracle Databaseのシステム権限とオブジェクト権限により制御されます。すべてのデータ・ディクショナリ表およびビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

E.1.2 Oracle Label Securityのデータ・ディクショナリ・ビュー

Oracle Label Securityでは、データ・ディクショナリ表の独自セットがメンテナンスされます。これらの表は、ポリシーの施行対象から除外されます。この項では、Oracle Label Securityに関する情報を表示できるビューを示します。

DBAビューへのアクセス権は、デフォルトでSELECT_CATALOG_ROLEに付与されることに注意してください。これは、Oracle Databaseのデータ・ディクショナリを検証できる標準的なOracle Databaseのロールです。

E.1.2.1 ALL_SA_AUDIT_OPTIONS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

USER_NAME

NOT NULL

VARCHAR2(30)

APY

VARCHAR2(3)

REM

VARCHAR2(3)

SET_

VARCHAR2(3)

PRV

VARCHAR2(3)

E.1.2.2 ALL_SA_COMPARTMENTS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

COMP_NUM

NOT NULL

NUMBER(4)

SHORT_NAME

NOT NULL

VARCHAR2(30)

LONG_NAME

NOT NULL

VARCHAR2(80)

E.1.2.3 ALL_SA_DATA_LABELS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

LABEL

VARCHAR2(4000)

LABEL_TAG

NUMBER

E.1.2.4 ALL_SA_GROUPS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

GROUP_NUM

NOT NULL

NUMBER(4)

SHORT_NAME

NOT NULL

VARCHAR2(30)

LONG_NAME

NOT NULL

VARCHAR2(80)

PARENT_NUM

NUMBER(4)

PARENT_NAME

VARCHAR2(30)

E.1.2.5 ALL_SA_LABELS

ALL_SA_LABELSへのアクセスはPUBLICです。ただし、参照できるのは、セッションにより読取りアクセスが認可されているラベルのみです。

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

LABEL

VARCHAR2(4000)

LABEL_TAG

NUMBER

LABEL_TYPE

VARCHAR2(15)

E.1.2.6 ALL_SA_LEVELS

名前

NULL

型

POLICY_NAME

VARCHAR2(30)

LEVEL_NUM

NUMBER(4)

SHORT_NAME

VARCHAR2(30)

LONG_NAME

VARCHAR2(80)

E.1.2.7 ALL_SA_POLICIES

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

COLUMN_NAME

NOT NULL

VARCHAR2(30)

STATUS

VARCHAR2(8)

POLICY_OPTIONS

VARCHAR2(4000)

E.1.2.8 ALL_SA_PROG_PRIVS

名前

NULL

型

SCHEMA_NAME

NOT NULL

VARCHAR2(30)

PROGRAM_NAME

NOT NULL

VARCHAR(30)

POLICY_NAME

NOT NULL

VARCHAR2(30)

PROGRAM_PRIVILEGES

VARCHAR2(4000)

E.1.2.9 ALL_SA_SCHEMA_POLICIES

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

SCHEMA_NAME

NOT NULL

VARCHAR2(30)

STATUS

VARCHAR2(8)

SCHEMA_OPTIONS

VARCHAR2(4000)

E.1.2.10 ALL_SA_TABLE_POLICIES

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

SCHEMA_NAME

NOT NULL

VARCHAR2(30)

TABLE_NAME

NOT NULL

VARCHAR2(30)

STATUS

VARCHAR2(8)

TABLE_OPTIONS

VARCHAR2(4000)

FUNCTION

VARCHAR2(1024)

PREDICATE

VARCHAR2(256)

E.1.2.11 ALL_SA_USERS

名前

NULL

型

USER_NAME

NOT NULL

VARCHAR2(30)

POLICY_NAME

NOT NULL

VARCHAR2(30)

USER_PRIVILEGES

VARCHAR2(4000)

MAX_READ_LABEL

VARCHAR2(4000)

MAX_WRITE_LABEL

VARCHAR2(4000)

MIN_WRITE_LABEL

VARCHAR2(4000)

DEFAULT_READ_LABEL

VARCHAR2(4000)

DEFAULT_WRITE_LABEL

VARCHAR2(4000)

DEFAULT_ROW_LABEL

VARCHAR2(4000)

USER_LABELS

VARCHAR2(4000)

E.1.2.12 ALL_SA_USER_LABELS

名前

NULL

型

USER_NAME

NOT NULL

VARCHAR2(30)

POLICY_NAME

NOT NULL

VARCHAR2(30)

MAX_READ_LABEL

NOT NULL

VARCHAR2(4000)

MAX_WRITE_LABEL

VARCHAR2(4000)

MIN_WRITE_LABEL

VARCHAR2(4000)

DEFAULT_READ_LABEL

VARCHAR2(4000)

DEFAULT_WRITE_LABEL

VARCHAR2(4000)

DEFAULT_ROW_LABEL

VARCHAR2(4000)

LABELS

VARCHAR2(4000)

注意:
ALL_SA_USERSのUSER_LABELSフィールドおよびALL_SA_USER_LABELSのLABELSフィールドは下位互換性のために残され、次のリリースでは削除されます。

E.1.2.13 ALL_SA_USER_LEVELS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

USER_NAME

NOT NULL

VARCHAR2(30)

MAX_LEVEL

NOT NULL

VARCHAR2(30)

MIN_LEVEL

NOT NULL

VARCHAR2(30)

DEF_LEVEL

NOT NULL

VARCHAR2(30)

ROW_LEVEL

NOT NULL

VARCHAR2(30)

E.1.2.14 ALL_SA_USER_PRIVS

名前

NULL

型

USER_NAME

NOT NULL

VARCHAR2(30)

POLICY_NAME

NOT NULL

VARCHAR2(30)

USER_PRIVILEGES

VARCHAR2(4000)

E.1.2.15 DBA_SA_AUDIT_OPTIONS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

USER_NAME

NOT NULL

VARCHAR2(30)

APY

VARCHAR2(3)

REM

VARCHAR2(3)

SET_

VARCHAR2(3)

PRV

VARCHAR2(3)

E.1.2.16 DBA_SA_COMPARTMENTS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

COMP_NUM

NOT NULL

NUMBER(4)

SHORT_NAME

NOT NULL

VARCHAR2(30)

LONG_NAME

NOT NULL

VARCHAR2(80)

E.1.2.17 DBA_SA_DATA_LABELS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

LABEL

VARCHAR2(4000)

LABEL_TAG

NUMBER

E.1.2.18 DBA_SA_GROUPS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

GROUP_NUM

NOT NULL

NUMBER(4)

SHORT_NAME

NOT NULL

VARCHAR2(30)

LONG_NAME

NOT NULL

VARCHAR2(80)

PARENT_NUM

NUMBER(4)

PARENT_NAME

VARCHAR2(30)

E.1.2.19 DBA_SA_GROUP_HIERARCHY

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

HIERARCHY_LEVEL

NUMBER

GROUP_NAME

VARCHAR2(4000)

E.1.2.20 DBA_SA_LABELS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

LABEL

VARCHAR2(4000)

LABEL_TAG

NUMBER

LABEL_TYPE

VARCHAR2(15)

E.1.2.21 DBA_SA_LEVELS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

LEVEL_NUM

NOT NULL

NUMBER(4)

SHORT_NAME

NOT NULL

VARCHAR2(30)

LONG_NAME

NOT NULL

VARCHAR2(80)

E.1.2.22 DBA_SA_POLICIES

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

COLUMN_NAME

NOT NULL

VARCHAR2(30)

STATUS

VARCHAR2(8)

POLICY_OPTIONS

VARCHAR2(4000)

POLICY_SUBSCRIBED

VARCHAR2(5)

E.1.2.23 DBA_SA_PROG_PRIVS

名前

NULL

型

SCHEMA_NAME

NOT NULL

VARCHAR2(30)

PROGRAM_NAME

NOT NULL

VARCHAR2(30)

POLICY_NAME

NOT NULL

VARCHAR2(30)

PROGRAM_PRIVILEGES

VARCHAR2(4000)

E.1.2.24 DBA_SA_SCHEMA_POLICIES

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

SCHEMA_NAME

NOT NULL

VARCHAR2(30)

STATUS

VARCHAR2(8)

SCHEMA_OPTIONS

VARCHAR2(4000)

E.1.2.25 DBA_SA_TABLE_POLICIES

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

SCHEMA_NAME

NOT NULL

VARCHAR2(30)

TABLE_NAME

NOT NULL

VARCHAR2(30)

STATUS

VARCHAR2(8)

TABLE_OPTIONS

VARCHAR2(4000)

FUNCTION

VARCHAR2(1024)

PREDICATE

VARCHAR2(256)

E.1.2.26 DBA_SA_USERS

名前

NULL

型

USER_NAME

NOT NULL

VARCHAR2(30)

POLICY_NAME

NOT NULL

VARCHAR2(30)

USER_PRIVILEGES

VARCHAR2(4000)

MAX_READ_LABEL

VARCHAR2(4000)

MAX_WRITE_LABEL

VARCHAR2(4000)

MIN_WRITE_LABEL

VARCHAR2(4000)

DEFAULT_READ_LABEL

VARCHAR2(4000)

DEFAULT_WRITE_LABEL

VARCHAR2(4000)

DEFAULT_ROW_LABEL

VARCHAR2(4000)

USER_LABELS

VARCHAR2(4000)

注意:
DBA_SA_USERSのUSER_LABELSフィールドは下位互換性のために残され、次のリリースでは削除されます。

E.1.2.27 DBA_SA_USER_COMPARTMENTS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

USER_NAME

NOT NULL

VARCHAR2(30)

COMP

NOT NULL

VARCHAR2(30)

RW_ACCESS

VARCHAR2(5)

DEF_COMP

NOT NULL

VARCHAR2(1)

ROW_COMP

NOT NULL

VARCHAR2(1)

E.1.2.28 DBA_SA_USER_GROUPS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

USER_NAME

NOT NULL

VARCHAR2(30)

GRP

NOT NULL

VARCHAR2(30)

RW_ACCESS

VARCHAR2(5)

DEF_GROUP

NOT NULL

VARCHAR2(1)

ROW_GROUP

NOT NULL

VARCHAR2(1)

E.1.2.29 DBA_SA_USER_LABELS

名前

NULL

型

USER_NAME

NOT NULL

VARCHAR2(30)

POLICY_NAME

NOT NULL

VARCHAR2(30)

MAX_READ_LABEL

NOT NULL

VARCHAR2(4000)

MAX_WRITE_LABEL

VARCHAR2(4000)

MIN_WRITE_LABEL

VARCHAR2(4000)

DEFAULT_READ_LABEL

VARCHAR2(4000)

DEFAULT_WRITE_LABEL

VARCHAR2(4000)

DEFAULT_ROW_LABEL

VARCHAR2(4000)

LABELS

VARCHAR2(4000)

注意:
DBA_SA_USER_LABELSのLABELSフィールドは下位互換性のために残され、次のリリースでは削除されます。

E.1.2.30 DBA_SA_USER_LEVELS

名前

NULL

型

POLICY_NAME

NOT NULL

VARCHAR2(30)

USER_NAME

NOT NULL

VARCHAR2(30)

MAX_LEVEL

NOT NULL

VARCHAR2(30)

MIN_LEVEL

NOT NULL

VARCHAR2(30)

DEF_LEVEL

NOT NULL

VARCHAR2(30)

ROW_LEVEL

NOT NULL

VARCHAR2(30)

E.1.2.31 DBA_SA_USER_PRIVS

名前

NULL

型

USER_NAME

NOT NULL

VARCHAR2(30)

POLICY_NAME

NOT NULL

VARCHAR2(30)

USER_PRIVILEGES

VARCHAR2(4000)

E.1.3 Oracle Label Securityの監査ビュー

SA_AUDIT_ADMIN.CREATE_VIEWプロシージャを使用すると、特定のポリシーの監査証跡ビューを作成できます。デフォルトでは、このビューの名前はDBA_policyname_AUDIT_TRAILです。

DBA_SA_AUDIT_OPTIONSビューには、列POLICY_NAME、USER_NAME、APY、SET_およびPRVが含まれています。

関連項目:
Oracle Label Security用の監査証跡ビューの作成および削除

E.2 Oracle Label Securityでの制限事項

このリリースのOracle Label Securityには、次の制限事項があります。

- Oracle Label SecurityでのCREATE TABLE AS SELECTの制限

- ラベル・タグの制限

- Oracle Label Securityでのエクスポート制限

- Oracle Label Securityでの削除制限

- 共有スキーマのサポート

- 非表示列の制限

E.2.1 Oracle Label SecurityでのCREATE TABLE AS SELECTの制限

Oracle Label Securityポリシーで保護されているスキーマ内でCREATE TABLE AS SELECTの実行を試みると、文は失敗します。

E.2.2 ラベル・タグの制限

ラベル・タグは、データベース内のポリシー間で一意であることが必要です。データベース内で複数のポリシーを使用する場合、異なるポリシー内で同じ数値ラベル・タグは使用できません。

E.2.3 Oracle Label Securityでのエクスポート制限

Oracle Label Securityでは不透明な型が使用されるため、LBACSYSスキーマはエクスポートできません。Oracle Label Securityをインストールした状態でデータベース全体をエクスポートできますが(パラメータFULL=Y)、LBACSYSスキーマはエクスポートされません。

E.2.4 Oracle Label Securityでの削除制限

LBACSYSアカウントではDROP USER CASCADEを実行しないでください。

AS SYSDBA構文を使用してデータベースにユーザーSYSで接続し、ファイル$ORACLE_HOME/rdbms/admin/catnools.sqlを実行して、Oracle Label Securityを削除します。

関連項目:
プラットフォーム固有のOracleインストレーション・ガイドを参照してください。

E.2.5 共有スキーマのサポート

Oracle Internet Directoryに定義されているユーザー・アカウントに、個々のOracle Label Securityの認可を付与することはできません。ただし、ディレクトリ・ユーザーがマップされている共有スキーマに認可を付与することはできます。

Oracle Label SecurityのファンクションSET_ACCESS_PROFILEをプログラムで使用すると、ユーザーが認証を受けて共有スキーマにマップされた後に使用する、ラベル認可プロファイルを設定できます。Oracle Label Securityでは、Oracle Label Security内でラベル認可が付与されているユーザーと実際のデータベース・ユーザー間のマッピングは施行されません。

E.2.6 非表示列の制限

PL/SQLでは、表にある非表示列の参照は認識されません。コンパイラ・エラーが生成されます。

E.3 Oracle Label Securityのインストール

Oracle Label Securityのインストール担当者は、最初に「カスタム」インストール・オプションを選択します。「カスタム」インストール画面にオプションの1つとしてOracle Label Securityが表示されます。Oracle Label SecurityファイルをコピーしてOracleを再リンクすると、インストーラ・ソフトウェアによりデータベース登録処理中にDatabase Configuration Assistant(DBCA)が自動的に起動され、作成するデータベースにあわせてオプションが構成されます。

DBCAでは、Oracle Label SecurityでOracle Internet Directoryを使用可能にする場合は、インストーラで追加のオプションを使用して、Oracle Directory Integration and Provisioning(DIP)ユーザーのパスワードを構成できます。デフォルトのパスワードDIPを持つDIPユーザーが、catproc.sqlにより作成されています。この構成手順の間にパスワードを設定すると、新規DIPパスワードを使用してDIPプロビジョニング・プロファイルが作成されます。

DBCAにより自動的に次の処理が実行されます。

- catolsd.sqlが実行されます(スタンドアロンのOracle Label Security構成用にcatols.sqlを実行する場合と同様)。

- このデータベースの指定のデータベースDNを使用してDIPプロビジョニング・プロファイルが作成されます。

- ブートストラップ・ユーティリティが実行され、Oracle Internet Directoryからのポリシー情報でデータベースがリフレッシュされます。

- データベースDNがcn=DBServersグループに追加されます。

注意:
このパスワードに変更がある場合は、プロビジョニング・ツールoidprovtoolを使用して、この情報でOracle Internet Directoryを更新する必要があります。

E.3.1 Oracle Label SecurityおよびSYS.AUD$表

Oracle Label Securityをインストールすると、AUD$表がSYSからSYSTEMに自動的に移動します。

Oracle Label Securityの使用中は、SYSTEMスキーマ内のAUD$表がサポートされます。

Oracle Label Securityをインストールしない場合、Oracleコードではアップグレードおよびバックアップ/リカバリ使用例のサポート中にSYS.AUD$などのデータ・ディクショナリ表が暗黙的に想定されるため、SYS表領域からのSYS.AUD$表の移動はサポートされません。SYS.AUD$の移動がサポートされるのは、Oracle Label SecurityがインストールされていてOracleにより移動される場合のみです。

E.4 Oracle Label Securityの削除

Oracle Label Securityを削除する手順は、次のとおりです。Oracle Label Securityを削除する場合、LBACSYSアカウントでDROP USER CASCADEを実行しないでください。

1. SYSDBAとして接続します。

2. $ORACLE_HOME/rdbms/admin/catnools.sqlスクリプトを実行してLBACSYSアカウントを削除します。

3. Oracle Universal Installerを使用してOracle Label Securityを削除します。

関連項目:
プラットフォーム固有のOracleインストレーション・ガイドを参照してください。

索引
A  B  C  D  E  F  G  H  I  L  M  N  O  P  R  S  T  U  V  W

A

アクセス制御

任意, 1.1.3.1, 1.1.3.3, 3.5.4

ラベルベース, 1.3.3, 1.3.4.5

ポリシー, 1.1.2

概要, 3

アクセス調整

ビュー, 3.5.5

施行オプション, 3.5.7

概要, 3.1

ラベル評価, 3.4

プログラム・ユニット, 3.5.6

ADD_COMPARTMENTSファンクション, 8.2.5, 8.2.5, 8.2.5, 8.2.5 ADD_GROUPSプロシージャ, 8.2.8

インバース・グループ, 15.8.3

ALL_CONTROLオプション, 9.1.1, 9.1.1, 9.1.1, 9.1.5 ALL_SA_AUDIT_OPTIONSビュー, E.1.2.1 ALL_SA_COMPARTMENTSビュー, E.1.2.2 ALL_SA_DATA_LABELSビュー, E.1.2.3 ALL_SA_GROUPSビュー, E.1.2.4 ALL_SA_LABELSビュー, E.1.2.5 ALL_SA_LEVELSビュー, E.1.2.6 ALL_SA_POLICIESビュー, E.1.2.7 ALL_SA_PROG_PRIVSビュー, E.1.2.8 ALL_SA_SCHEMA_POLICIESビュー, E.1.2.9 ALL_SA_TABLE_POLICIESビュー, E.1.2.10 ALL_SA_USER_LABELSビュー, E.1.2.12 ALL_SA_USER_LEVELSビュー, E.1.2.13 ALL_SA_USER_PRIVSビュー, E.1.2.14 ALL_SA_USERSビュー, E.1.2.11 ALTER_COMPARTMENTプロシージャ, 7.5.6 ALTER_COMPARTMENTSプロシージャ, 8.2.4 ALTER_GROUPプロシージャ, 7.5.9 ALTER_GROUP_PARENT

インバース・グループ, 15.8.10

ALTER_GROUP_PARENTプロシージャ, 7.5.10 ALTER_GROUPSファンクション, 8.2.9 ALTER_GROUPSプロシージャ

インバース・グループ, 15.8.4

ALTER_LABELファンクション, 7.6.2 ALTER_LEVELプロシージャ, 7.5.1, 7.5.3 ALTER_POLICYプロシージャ, 7.4.5

インバース・グループ, 15.8.2

ALTER_SCHEMA_POLICYプロシージャ, 10.3, 10.5.2 ANALYZEコマンド, 14.4.1 APPLY_SCHEMA_POLICYプロシージャ, 10.3, 10.5.1

インバース・グループ, 15.3.1

APPLY_TABLE_POLICYプロシージャ, 10.3, 10.4.1

インバース・グループ, 15.3.1

アーキテクチャ, Oracle Label Security, 1.1.3.3 AS SYSDBA句, 14.5 AUDITプロシージャ, 12.3.2 AUDIT_LABELプロシージャ, 12.4.1, 12.4.3 AUDIT_LABEL_ENABLEDファンクション, 12.4.3 AUDIT_TRAILパラメータ, 12.2 監査

監査証跡, 1.1.3.3, 12.1, 12.2, 12.5.1

Oracle Label Securityのオプション, 12.3.1

Oracle Label Security, 12, 12.1

セキュリティ, 12.3.2

方針, 12.6.1

システム単位, 12.2

タイプ, 7.1.7

ビュー, 12.5.1

B

Bツリー索引, 14.4.2

C

CHAR_TO_LABELファンクション, 5.3.1, 5.5.1, 5.5.5

文字, 有効, 2.2.1, 2.2.1, 7.4.3

CHECK_CONTROLオプション

ラベルの更新, 9.4.2, 9.4.3

ラベル付けファンクション, 9.3.1

定義, 9.1.1, 9.1.1

他のオプション, 9.1.6

CHECK_LABEL_CHANGEファンクション, 11.4.2.3 CHECK_READファンクション, 11.4.2.1 CHECK_WRITEファンクション, 11.4.2.2 子行

削除, 9.5

挿入, 9.3.3

更新, 9.4.4

Common Criteria, 1.1.1 COMP_READファンクション, 5.6.6.2 COMP_WRITEファンクション, 5.6.6.2 COMPACCESS権限, 3.5.1, 3.5.2.3

インバース・グループ, 15.3.5, 15.6

区分

定義, 2.2.3

例, 2.2.3

認可の設定, 3.3.1.2

COMPATIBLEパラメータ, 14.5 コンポーネント。「ラベル・コンポーネント」を参照 CON, B.2 接続パラメータ, B.2 CREATE FUNCTION文, 11.3.1 CREATE PACKAGE BODY文, 11.3.1 CREATE PACKAGE文, 11.3.1 CREATE PROCEDURE文, 11.3.1 CREATE TABLE AS SELECT文, E.2.1 CREATE_COMPARTMENTプロシージャ, 7.5.5 CREATE_GROUPプロシージャ, 7.5.8

インバース・グループ, 15.8.9

CREATE_LABELプロシージャ, 7.6.1 CREATE_LEVELプロシージャ, 7.5.2 CREATE_POLICYプロシージャ, 7.1.1, 7.4.4

インバース・グループ, 15.8.1

CREATE_VIEWプロシージャ, 12.5.1, E.1.3 データベースの作成, 14.5

D

DAC。「任意アクセス制御(DAC)」を参照

データ

アクセス・ルール, 1.3.1

ラベルベース・アクセス, 2.1, 2.1

機密性, 1.3.4.1, 7.6.2

データ・ディクショナリ表, 8.1, 8.7.1, 14.4.1, 14.5, E.1.1 DATA_LABELファンクション, 11.4.1.3 データベース・リンク, 13.2 Database Management System Protection Profile(DBMS PP), 1.1.1 データベース, 追加作成, 14.5 DBA_policyname_AUDIT_TRAILビュー, E.1.3 DBA_SA_AUDIT_OPTIONSビュー, 12.3.4, E.1.2.15, E.1.3 DBA_SA_COMPARTMENTSビュー, 14.2.2, E.1.2.16 DBA_SA_DATA_LABELSビュー, E.1.2.17 DBA_SA_GROUP_HIERARCHYビュー, E.1.2.19 DBA_SA_GROUPSビュー, 14.2.2, E.1.2.18 DBA_SA_LABELSビュー, 14.2.2, E.1.2.20 DBA_SA_LEVELSビュー, 14.2.2, E.1.2.21 DBA_SA_POLICIESビュー, E.1.2.22 DBA_SA_PROG_PRIVSビュー, E.1.2.23 DBA_SA_SCHEMA_POLICIESビュー, 9.1.8, E.1.2.24 DBA_SA_TABLE_POLICIESビュー, 9.1.8, E.1.2.25 DBA_SA_USER_COMPARTMENTSビュー, 8.7.2, E.1.2.27 DBA_SA_USER_GROUPSビュー, 8.7.2, E.1.2.28 DBA_SA_USER_LABELSビュー, E.1.2.29 DBA_SA_USER_LEVELSビュー, 8.7.2, E.1.2.30 DBA_SA_USER_PRIVSビュー, E.1.2.31 DBA_SA_USERSビュー, E.1.2.26 デフォルト・ポート, B.2 デフォルトの行ラベル, 5.6.3 DELETE_CONTROLオプション, 9.1.1, 9.1.1, 9.5 DELETE_RESTRICTオプション, 9.5 ラベル付きデータの削除, 9.5 demobld.sqlファイル, 7.3.1.1 DISABLE_POLICYプロシージャ, 7.4.6 DISABLE_SCHEMA_POLICYプロシージャ, 10.3, 10.5.4 DISABLE_TABLE_POLICYプロシージャ, 10.3, 10.4.3 任意アクセス制御(DAC), 1.1.3.1, 3.5.4 分散データベース

接続, 13.2

複数のポリシー, 3.6.2

Oracle Label Securityの構成, 13.1

リモート・セッション・ラベル, 13.3

支配

定義, 3.4.2, 3.4.2

ファンクション, A.1.3

最大の下限, 5.4.4.2

インバース・グループ, 15.9

最小の上限, 5.4.4.1

概要, A.1.1

DOMINATED_BYファンクション, A.1.3, A.1.3.3, A.1.3.7 DOMINATESファンクション, A.1.1, A.1.3, A.1.3.1, A.1.3.5 DROP USER CASCADEの制限, E.2.4 DROP_ALL_COMPARTMENTSプロシージャ, 8.2.7 DROP_ALL_GROUPSプロシージャ, 8.2.11 DROP_COMPARTMENTプロシージャ, 7.5.7 DROP_COMPARTMENTSファンクション, 8.2.6 DROP_GROUPプロシージャ, 7.5.11 DROP_GROUPSプロシージャ, 8.2.10 DROP_LABELファンクション, 7.6.3 DROP_LEVELプロシージャ, 7.5.4 DROP_POLICYプロシージャ, 7.4.8 DROP_USER_ACCESSプロシージャ, 8.3.4 DROP_VIEWプロシージャ, 12.5.2 ロール, セキュリティ管理者, 7.2

E

ENABLE_POLICYプロシージャ, 7.4.7

ENABLE_SCHEMA_POLICYプロシージャ, 10.3, 10.5.5

ENABLE_TABLE_POLICYプロシージャ, 10.3, 10.4.4

施行オプション

UPDATE, 9.4.2

組合せ, 9.1.6

除外, 9.1.7

ガイドライン, 9.1.6

INVERSE_GROUP, 15.3.1

リスト, 9.1.1

概要, 9.1.1

表示, 9.1.8

Evaluation Assurance Level(EAL)4, 1.1.1 例

Oracle Label Security, 4.3

EXEMPT ACCESS POLICY権限, 9.1.7, 9.1.7 エクスポート・ユーティリティ

LBACSYSの制限, E.2.3

ポリシーの施行, 9.1.7

行ラベル, 3.5.2.1, 14.1, 14.2.2

F

FULL権限, 3.5.1, 3.5.2.2, 3.5.2.4

ファンクション・コール, C.1, C.2

G

GLBDファンクション, 5.4.4.2

最小単位, データ・アクセス, 3.4.3

GREATEST_LBOUNDファンクション, 5.4.4.2, 11.4.4.1

インバース・グループ, 15.8.14

GROUP_READファンクション, 5.6.6.2 GROUP_WRITEファンクション, 5.6.6.2 グループ

定義, 2.2.4

例, 2.2.4

階層, 2.2.4, 2.2.4, 2.4, 2.4, E.1.2.19

インバース, 15.2

親, 2.2.4, 2.2.4, 2.2.4, 3.4.1.2, 3.4.1.2, 7.5.8, 7.5.10, 15.3.4

読取り/書込みアクセス, 3.4.1.2

認可の設定, 3.3.1.3

H

HIDE, 5.1.1.1, 7.4.4, 7.4.5

HIDEオプション

デフォルト, 7.4.4

説明, 9.1.2

例, 5.1.1.3

非表示列のインポート, 14.2.5

データの挿入, 5.5.4

エクスポートされない, 14.1

表単位, 5.3.2.2

PL/SQLの制限, E.2.6

スキーマ・レベル, 9.1.1

I

インポート・ユーティリティ

ラベル付きデータのインポート, 14.2.1.2, 14.2.2

ポリシーのインポート, 14.1

ラベルなしデータのインポート, 14.2.4

Oracle Label Security, 14.2

索引, 14.4.2, 14.4.2 INITIAL_LABEL変数, A.2 INITIAL_ROW_LABEL変数, A.2 初期化パラメータ

AUDIT_TRAIL, 12.2

COMPATIBLE, 14.5

INSERT_CONTROLオプション, 9.1.1, 9.1.1, 9.3.1 ラベル付きデータの挿入, 5.5, 9.3 INTO TABLE句, 14.3.2 インバース・グループ

ラベル・コンポーネント, 15.3.2

COMPACCESS権限, 15.3.5, 15.6

計算されるラベル, 15.3.3

支配, 15.9

実装, 15.3

概要, 15.2

最大読取りグループ, 15.3.3.2

最大書込みグループ, 15.3.3.2

親子関係の非サポート, 15.3.4

読取りアルゴリズム, 15.4

セッション・ラベル, 15.7

SET_DEFAULT_LABEL, 15.7.1

SET_LABEL, 15.7.2

SET_ROW_LABEL, 15.7.1, 15.7.2

ユーザー権限, 15.3.5

書込みアルゴリズム, 15.5

INVERSE_GROUP施行オプション

プロシージャの動作, 15.8

実装, 15.3.1

L

ラベル・コンポーネント

定義, 7.1.2, 7.5

分散環境, 13.4

業界別の例, 2.2.5

相互関係, 2.4

有効な文字, 2.2.1, 2.2.1, 7.4.3

ラベル評価プロセス

COMPACCESS読取り, 3.5.2.3

COMPACCESS書込み, 3.5.2.3

インバース・グループ, COMPACCESS, 15.6

LABEL_UPDATE, 9.4.2

読取りアクセス, 3.4.2

読取りアクセス, インバース・グループ, 15.4

書込みアクセス, 3.4.3

書込みアクセス, インバース・グループ, 15.5

LABELファンクション, 5.6.6.2 ラベル・タグ

文字列からの変換, 5.3.1

文字列への変換, 5.3.2

分散環境, 13.4.1

例, 5.1.2.1

データの挿入, 5.5.2

概要, 2.3

手動で定義, 5.1.2.1, 5.1.2.2

方針, 14.4.3

WHERE句で使用, 5.4.1

LABEL_DEFAULTオプション

ラベル付けファンクション, 9.1.3.1, 9.2.1, 9.2.2

区分の認可, 3.3.1.2

グループの認可, 3.3.1.3

定義, 9.1.1

ラベルなしデータのインポート, 14.2.4

ラベル付きデータの挿入, 5.5.3

施行オプション, 9.1.6, 9.1.6

SET_ROW_LABEL, 5.6.3

LABEL_TO_CHARファンクション, 5.3.2, 5.3.2.1.3, 5.4.3 LABEL_UPDATEオプション

ラベル付けファンクション, 9.1.3.2, 9.2.2

権限, 9.1.3.2

WRITE_CONTROL, 9.1.4.2

WRITEDOWN, 3.5.3

WRITEUP, 3.5.1, 3.5.1, 3.5.1, 3.5.3

定義, 9.1.1, 9.1.1

評価プロセス, 9.4.2

施行オプション, 9.1.6

ラベルベース・セキュリティ, 2.1 ラベル付けファンクション

ALL_CONTROLおよびNO_CONTROL, 9.1.5

CHECK_CONTROL, 9.3.1

LABEL_DEFAULT, 9.1.3.1, 9.1.3.2, 9.2.1

LABEL_UPDATE, 9.1.3, 9.1.3.3

LBACSYS, 9.2.2

作成, 9.2.3

例, 9.2.1

動作, 9.2.2

ラベルなしデータのインポート, 14.2.4

有効, 9.1.3

データの挿入, 5.5.3

概要, 3.5.7

手動による挿入のオーバーライド, 9.3.2

指定, 9.2.4

テスト, 9.2.2

UPDATE, 9.4.3

使用, 9.2.1

施行オプション, 9.1.6, 9.1.6

ラベル

管理, 2.5

パフォーマンス, 3.5.2.1

データおよびユーザー, 2.4

マージ, 5.4.5

比較できない, A.1.2

関係, A.1

構文, 2.3

有効, 2.3, 5.1.2

インバース・グループ, 15.3.3

LBAC_DBAロール, 7.4.1 LBAC_LABEL型, 9.2.2 LBACSYSスキーマ

ラベル付けファンクション, 9.2.2

データベースの追加作成, 14.5

データ・ディクショナリ表, 14.4.1

エクスポート制限, 14.1, E.2.3

LEAST_UBOUNDファンクション, 5.4.4.1, 5.4.5, 11.4.4.2

インバース・グループ, 15.8.13

レベル

定義, 2.2.2

例, 2.2.2

認可の設定, 3.3.1.1

LUBDファンクション, 5.4.4.1

M

マテリアライズド・ビュー, 13.6.1.1, 13.6.3.2

最大読取りグループ, 15.3.3.2

最大書込みグループ, 15.3.3.2, 15.3.3.2

MAX_LEVELファンクション, 5.6.6.2

MERGE_LABELファンクション, 5.4.5, 5.4.5

MIN_LEVELファンクション, 5.6.6.2

N

NO_CONTROLオプション, 9.1.1, 9.1.1, 9.1.5

NOAUDITプロシージャ, 12.3.1, 12.3.3, 12.3.3, 12.4.2

NUMBER型, 5.1.1

NUMERIC_LABELファンクション, 11.4.1.1

NUMERIC_ROW_LABELファンクション, 11.4.1.2

O

オブジェクト権限

Oracle Label Securityの権限, 3.5.4

トラステッド・ストアド・プログラム・ユニット, 3.5.6, 11.1.1

任意アクセス制御, 1.1.3.3

OCIの例, A.2.5 OCIインタフェース, A.2 OCI_ATTR_APPCTX_LIST, A.2.2 OCI_ATTR_APPCTX_SIZE, A.2.1 OCIAttrGet, A.2.2 OCIAttrSet, A.2, A.2.1, A.2.4 OCIParamGet, A.2.3 OptionsA, B.2.1 Oracle Database Conrfiguration Assistant(DBCA)

Oracle Label Security, インストール, 4.1

Oracle Enterprise Manager

ラベルの管理, 2.5

Oracle Internet Directory

スタンバイ・データベースへのスイッチオーバー後のOLSの構成, 6.10.4

Oracle Data GuardでのOID, 6.10.4

『Oracle Internet Directory管理者ガイド』, 6.10.1 Oracle Label Security(OLS)

作成, 4.2

例, 4.3

インストール, 4.1

ORDER BY句, 5.4.1, 5.4.2

P

パッケージ

Oracle Label Security, 7.3.1

トラステッド・ストアド・プログラム・ユニット, 11.1

パーティション化, 5.1.2.2, 14.4.4 パフォーマンス、Oracle Label Security

ANALYZEコマンド, 14.4

索引, 14.4.2

ラベル・タグ方針, 14.4.3

パーティション化, 14.4.4

READ権限, 3.5.2.1

PL/SQL

VPDポリシーの作成, 1.3.2

オーバーロードされるプロシージャ, 7.5.1

インポート用ラベルの再作成, 14.2.2

SA_UTLパッケージ, 11.4

トラステッド・ストアド・プログラム・ユニット, 11.1

ポリシー

スキーマへの適用, 10.3, 10.5

表への適用, 10.3, 10.4

作成, 7.1.1

施行時のガイドライン, 9.1.6

施行オプション, 1.3.4.4, 3.5.7, 5, 9.1.1, 9.1.1, 9.1.6

管理, 7.4

複数, 5.1.2, 8.1, E.2.2

権限, 1.1.3.3, 1.3.4.3, 3.5.4, 8.4

用語, 10.1

ポリシー・ラベル列

索引付け, 14.4.2

非表示のときのデータの挿入, 5.5.4

概要, 5.1.1, 5.1.1

取出し, 5.3.2.1.1

非表示の取出し, 5.3.2.2

ラベル・タグの格納, 2.3

policy_DBAロール, 7.2, 7.4.2, 7.6, 8.1, 8.4, 10.4, 10.5 述語

アクセス調整, 3.5.7

エラー, 9.6.1

ラベル・タグのパフォーマンス方針, 14.4.3

複数, 9.6.2

ポリシーでの使用, 9.6.1

権限

COMPACCESS, 3.5.1, 3.5.2.3

FULL, 3.5.1, 3.5.2.2, 3.5.2.4

Oracle Label Security, 3.5.1

PROFILE_ACCESS, 3.5.1, 3.5.2.4

プログラム・ユニット, 3.5.6

READ, 3.5.1, 3.5.2.1

行ラベル, 3.5.3

トラステッド・ストアド・プログラム・ユニット, 11.3.5

WRITEACROSS, 3.5.1, 3.5.3, 3.5.3.3

WRITEDOWN, 3.5.1, 3.5.3, 3.5.3.2, 3.5.6

WRITEUP, 3.5.1, 3.5.3, 3.5.3.1

PRIVSファンクション, 5.6.6.2 プロシージャ, オーバーロードされる, 7.5.1 PROFILE_ACCESS権限, 3.5.1, 3.5.2.4 伝播, C.1

R

RAC, C.1

読取りアクセス

アルゴリズム, 3.4.2, 3.5.2.2

概要, 3.4.1.1

読取りラベル, 3.3.2 READ権限, 3.5.1, 3.5.2.1 READ_CONTROLオプション

アルゴリズム, 3.4.2

CHECK_CONTROL, 9.1.3.3

子行, 9.3.3

定義, 9.1.1, 9.1.1

参照整合性, 9.4.4

他のオプション, 9.1.6

述語, 9.6.1

READ_ONLYファンクション, 8.2.4, 8.2.5, 8.2.8, 8.2.9 READ_WRITEファンクション, 8.2.4, 8.2.5, 8.2.8, 8.2.9 リード・ダウン, 3.4.2 参照整合性, 9.3.3, 9.4.4, 9.5 解放性, 15.2 リモート・ユーザー, 13.2 REMOVE_SCHEMA_POLICYプロシージャ, 10.3, 10.5.3 REMOVE_TABLE_POLICYプロシージャ, 10.3, 10.4.2 REPADMINアカウント, 13.6.1.1, 13.6.3.1, 13.6.3.2 レプリケーション

マテリアライズド・ビュー(スナップショット), 13.6.1.1, 13.6.3.2, 13.6.4

Oracle Label Security, 13.6, 13.6.1.2

RESTORE_DEFAULT_LABELSプロシージャ, 5.6.1, 5.6.4 制限事項, Oracle Label Security, E.2 行ラベル

デフォルト, 5.6.3

行ラベル

区分の変更, 8.2.4

デフォルト, 3.3.1.2, 3.3.1.3, 3.3.2, 5.6.1, 11.4.3.2, C.2

例, 3.2.3

分散環境, 13.3

挿入, 5.5.1

LABEL_DEFAULTオプション, 5.5, 9.1.3.1

権限, 3.5.3

リストア, 5.6.4

デフォルトの保存, 5.6.5

設定, 5.6.3, 11.4.3.2

区分の設定, 8.2.2

グループの設定, 8.2.3

レベルの設定, 8.2.1

概要, 3.2.2

更新, 3.5.3

表示, 11.4.1.2

ROW_LABELファンクション, 5.6.6.2

S

SA_COMPONENTSパッケージ, 7.5

SA_POLICY_ADMIN, 10

SA_POLICY_ADMINパッケージ, 10

SA_SESSIONファンクション

定義, 5.6.1

セキュリティ属性の表示, 5.6.6.2

SA_SYSDBAパッケージ, 7.4 SA_USER_ADMINパッケージ

ストアド・プログラム・ユニットの管理, 11.2

概要, 8.1

SA_USER_NAMEファンクション, 5.6.6.2, 8.6 SA_UTLパッケージ

支配ファンクション, A.1.3.5

概要, 11.4

SAVE_DEFAULT_LABELSプロシージャ, 5.6.1, 5.6.5 スキーマ

ポリシーの適用, 7.1.4, 7.4.5, 9.1.6

デフォルトのポリシー・オプション, 7.4.4

共有の制限, E.2.5

セキュリティ

概要, 1.1

標準, 1.1.1

セキュリティ評価

EAL4, 1.1.1

セキュリティ・ポリシー

概要, 1.1.2

VPD, 1.3.3

セッション・ラベル

変更, 5.6.2

計算される, 3.3.2

分散データベース, 13.3

例, 3.2.3

OCIインタフェース, A.2

リストア, 5.6.4

SA_UTL.SET_LABEL, 11.4.3.1

デフォルトの保存, 5.6.5

区分の設定, 8.2.2

グループの設定, 8.2.3

レベルの設定, 8.2.1

概要, 3.2.1

表示, 11.4.1.1

SET_ACCESS_PROFILEファンクション, E.2.5 SET_ACCESS_PROFILEプロシージャ, 8.5, 8.6 SET_COMPARTMENTSプロシージャ, 8.2.2 SET_DEFAULT_LABELファンクション, 8.3.2

インバース・グループ, 15.7.1

SET_DEFAULT_LABELプロシージャ

インバース・グループ, 15.8.7

SET_GROUPSプロシージャ, 8.2.3

インバース・グループ, 15.8.5

SET_LABELファンクション

RESTORE_DEFAULT_LABELS, 5.6.4

定義, 5.6.1, 5.6.6.2, 5.6.6.2

インバース・グループ, 15.7.2

リモート・データベース, 13.3

SA_UTL.SET_LABEL, 11.4.3.1

使用, 5.6.2

SET_LABELプロシージャ

インバース・グループ, 15.8.11

SET_LEVELSプロシージャ, 8.2.1 SET_PROG_PRIVSファンクション, 11.2, 11.2, 11.2 SET_ROW_LABELファンクション

インバース・グループ, 15.7.1, 15.7.2

SET_ROW_LABELプロシージャ, 5.6.1, 5.6.3, 8.3.3, 11.4.3.2, 15.7.2.1, 15.7.2.2

インバース・グループ, 15.8.8, 15.8.12

SET_USER_LABELSプロシージャ, 8.3.1

インバース・グループ, 15.8.6

SET_USER_PRIVSファンクション, 8.4 共有スキーマの制限, E.2.5 SQL*Loader, 14.3 STRICTLY_DOMINATED_BYファンクション, A.1.3, A.1.3.4, A.1.3.8 STRICTLY_DOMINATESファンクション, A.1.3, A.1.3.2, A.1.3.6 SYSアカウント

ポリシーの施行, 9.1.7

SYS_CONTEXT

ラベル付けファンクション, 9.2.2

変数, A.2

SYSDBA権限, 12.2 システム権限, 1.1.3.3, 3.5.4, 3.5.5, 3.5.6

T

タスク, 概要, 7.1

TO_DATA_LABELファンクション, 5.5.5, 7.1.3, 7.6.1

TO_LBAC_DATA_LABELファンクション, 9.2.2

トリガー, 9.2.2

トラステッド・ストアド・プログラム・ユニット

作成, 11.3.1

エラー処理, 11.3.5

例, 11.1.2

実行, 11.3.5

概要, 11.1

権限, 3.5.6, 11.3.5

再コンパイル, 11.3.3

置換, 11.3.4

U

UPDATE_CONTROLオプション, 9.1.1, 9.1.1, 9.4.2

ラベル付きデータの更新, 9.4

ユーザー認証

区分, 3.3.1.2

グループ, 3.3.1.3

レベル, 3.3.1.1

概要, 3.3

USER_SA_SESSIONビュー, 5.6.6.1

V

ビュー

アクセス調整, 3.5.5

ALL_SA_AUDIT_OPTIONS, E.1.2.1

ALL_SA_COMPARTMENTS, E.1.2.2

ALL_SA_GROUPS, E.1.2.4

ALL_SA_LABELS, E.1.2.3, E.1.2.5

ALL_SA_LEVELS, E.1.2.6

ALL_SA_POLICIES, E.1.2.7

ALL_SA_PROG_PRIVS, E.1.2.8

ALL_SA_SCHEMA_POLICIES, E.1.2.9

ALL_SA_TABLE_POLICIES, E.1.2.10

ALL_SA_USER_LABELS, E.1.2.12

ALL_SA_USER_LEVELS, E.1.2.13

ALL_SA_USER_PRIVS, E.1.2.14

ALL_SA_USERS, E.1.2.11

監査, E.1.3

DBA_policyname_AUDIT_TRAIL, E.1.3

DBA_SA_AUDIT_OPTIONS, 12.3.4, E.1.2.15, E.1.3

DBA_SA_COMPARTMENTS, E.1.2.16

DBA_SA_DATA_LABELS, E.1.2.17

DBA_SA_GROUP_HIERARCHY, E.1.2.19

DBA_SA_GROUPS, E.1.2.18

DBA_SA_LABELS, E.1.2.20

DBA_SA_LEVELS, E.1.2.21

DBA_SA_POLICIES, E.1.2.22

DBA_SA_PROG_PRIVS, E.1.2.23

DBA_SA_SCHEMA_POLICIES, 9.1.8, E.1.2.24

DBA_SA_TABLE_POLICIES, 9.1.8, E.1.2.25

DBA_SA_USER_COMPARTMENTS, E.1.2.27

DBA_SA_USER_GROUPS, E.1.2.28

DBA_SA_USER_LABELS, E.1.2.29

DBA_SA_USER_LEVELS, E.1.2.30

DBA_SA_USER_PRIVS, E.1.2.31

DBA_SA_USERS, E.1.2.26

USER_SA_SESSION, 5.6.6.1

仮想プライベート・データベース(VPD)

ポリシー, 1.3.2

W

書込みアクセス

アルゴリズム, 3.4.3, 3.5.2.2

概要, 3.4.1

書込みラベル, 3.3.2 WRITE_CONTROLオプション

アルゴリズム, 3.4.3

定義, 9.1.1, 9.1.1

概要, 9.1.4.2

LABEL_UPDATE, 9.1.4.2

INSERT, UPDATE, DELETE, 9.1.4.2

他のオプション, 9.1.6

WRITEACROSS権限, 3.5.1, 3.5.3, 3.5.3.3, 9.1.1, 9.1.3.2, 9.4.2 WRITEDOWN権限, 3.5.1, 3.5.3, 3.5.3.2, 3.5.6, 9.1.1, 9.1.3.2, 9.4.2 WRITEUP権限, 3.5.1, 3.5.3, 3.5.3.1

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2018, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。