プライマリ・コンテンツに移動
Oracle® Database 2日でセキュリティ・ガイド
12c リリース2 (12.1)
B71287-07
目次へ移動
目次
索引へ移動
索引

前
次

8 Oracle Label Securityによる行レベルのセキュリティの強制

Oracle Label Securityにより、行レベルのセキュリティを強制できます。

トピック:

関連項目:

Oracle Label Security管理者ガイド

Oracle Label Securityについて

Oracle Label Security(OLS)は、データベース表に行レベルのセキュリティを提供します。セキュリティのレベルを定義する1つまたは複数のセキュリティ・ラベルを表のデータ行に割り当てることで、セキュリティを実装できます。

この機能では、データベース表を行レベルで保護し、セキュリティ・ラベルに基づいてこれらの行に異なるセキュリティ・レベルを割り当てます。その後、OLSラベルに基づいてユーザーのセキュリティ認可を作成できます。

たとえば、非常に機密性の高いデータを含む行にはHIGHLY SENSITIVEというラベルを割り当て、機密性がそれほど高くないデータを含む行にはSENSITIVEというラベルを割り当てたりできます。すべてのユーザーがアクセスできる行にはPUBLICというラベルを割り当てます。ラベルは必要なだけ作成でき、使用する環境のセキュリティ要件に適合させることができます。マルチテナント環境では、ラベルはローカル・プラガブル・データベース(PDB)に適用され、セッション・ラベルはローカル・ユーザーに適用されます。

ラベルを作成して割り当てたら、Oracle Label Securityを使用して、これらのラベルに基づき特定の行に特定のユーザー認可を割り当てます。以降、Oracle Label Securityはデータ行のラベルとユーザーのセキュリティ・クリアランスを自動的に比較し、行のデータにユーザーがアクセスできるかどうかを決定します。

Oracle Label Securityポリシーには次のコンポーネントがあります。

  • ラベル。データおよびユーザー、ユーザーとプログラム・ユニットの認証のラベルは、保護されている特定のオブジェクトへのアクセスを制御します。ラベルは、次の要素で構成されています。

    • レベル。レベルにより、行に割り当てる機密性のタイプ(たとえば、SENSITIVEHIGHLY SENSITIVEなど)が指定されます。

    • コンパートメント。(オプション)データは、レベルが同じでも、企業内の別々のプロジェクト(たとえばACME MergerやIT Securityなど)に属すことができます。コンパートメントはこの例ではプロジェクトのことで、より厳密なアクセス制御を定義できます。コンパートメントは行政環境でよく使用されます。

    • グループ。(オプション)グループは、データを所有する組織またはデータにアクセスする組織を識別します。たとえば、UK、US、Asia、Europeなどです。グループは商業環境と行政環境の両方で使用され、柔軟性が高いことからコンパートメントのかわりに使用されることもあります。

  • ポリシー。ポリシーは、ラベル、ルール、認証と関連付けられる名前です。

Oracle Label Securityのラベルとポリシーは、Enterprise Managerで作成するか、SA_SYSDBASA_COMPONENTSSA_LABEL_ADMIN PL/SQLパッケージを使用して作成できます。PL/SQLパッケージの詳細は、Oracle Label Security管理者ガイドを参照してください。このマニュアルには、Enterprise Managerを使用してOracle Label Securityのラベルとポリシーを作成する方法が記載されています。

たとえば、ユーザーがアプリケーション表のSELECT権限を持っているとします。次の図にあるように、ユーザーがSELECT文を実行すると、Oracle Label Securityは選択された各行を評価して、このユーザーがアクセスできるかどうかを決定します。決定は、セキュリティ管理者がユーザーに割り当てた権限とアクセス・ラベルに基づいて行われます。Oracle Label Securityを設定して、UPDATEDELETEINSERT文でもセキュリティ・チェックを行うことができます。

仮想プライベート・データベース、Oracle Label Security、データ・リダクション間の相違点

Oracle仮想プライベート・データベース(VPD)、Oracle Label Security (OLS)およびOracle Data Redactionでは、データベース表で表示できるデータをユーザーごとに制限することができます。

しかし、どの機能を使用すべきでしょうか。仮想プライベート・データベースは、アクセス要件の決定に利用できる既存のデータがある場合に効果的です。たとえば、営業担当者はその本人が入力した顧客注文表の行と列しか閲覧できないように構成できます。Oracle Label Securityは、表のアクセス要件の指定に利用できる一般的なデータ(ユーザー・アカウント、従業員IDなど)がないときに便利です。このタイプのユーザー・アクセス権を決定する場合は、表の行に機密性のレベルを割り当てます。Oracle Data Redactionでは、3つの異なる(リダクション)スタイルから選択できます。リダクションは、ユーザーがデータにアクセスしたときに適用され、データベース表に直接は適用されません。

Oracle Virtual Private DatabaseとOracle Label Securityが相互に補完しあう場合もあります。次の実習形式のOracle Technology Networkチュートリアルでは、仮想プライベート・データベース・ポリシーでOracle Label Securityユーザー・クリアランスと最小クリアランスを比較する方法が示されています。ユーザー・クリアランスがしきい値を超えている場合、Salary列は非表示になりません。

http://www.oracle.com/technetwork/database/security/ols-cs1-099558.html

表8-1では、Oracle Virtual Private Database,、Oracle Label SecurityおよびOracle Data Redactionの機能を比較しています。

表8-1 Virtual Private Database、Label SecurityおよびData Redactionの比較

機能 VPD OLS Data Redaction

完全マスキング、部分マスキングおよびランダム・マスキングを提供

不可

不可

ユーザーのアクセス時にリアルタイムでデータをリダクション

不可

不可

行レベル・セキュリティの提供

不可

列レベル・セキュリティ(列マスク)の提供

不可

表、ビューまたはシノニムへのユーザー定義のPL/SQLパッケージのバインド

なし脚注 1

不可

PL/SQLプロシージャから戻されるWHERE句を動的に追加することによるSQLの変更

不可

不可

権限を持っているユーザーによるデータベース操作の制限 2

不可

不可

不可

行の機密性ラベルおよびユーザーのセキュリティ・レベルに基づいた一連の行へのアクセスの制御

不可

不可

保護されている表に行の機密性ラベルを格納するように設計された列(オプションで非表示)の追加 3

不可

不可

自身を管理するユーザー・アカウントの提供

なし脚注4

あり脚注5

不可

行レベル・セキュリティに対する事前定義済のPL/SQLパッケージの提供

不可

不可

Oracle Databaseのデフォルトのインストールでの提供

Oracle Databaseの追加オプションとしての提供(ライセンスが付与されている必要あり)

不可

不可

脚注1

Oracle Label Securityは、表にセキュリティ・ポリシーをアタッチする際に、ユーザーが作成したパッケージではなく、事前定義されたPL/SQLパッケージを使用します。

脚注2

権限ユーザーのアクセスを制限する場合は、Oracle Database Vaultの使用を検討してください。

脚注3

透明性を確保し、追加の列を表示するように設計されていないアプリケーションを破損しないために、通常この列は非表示です。

脚注4

Oracle Virtual Private Databaseはユーザー・アカウントを提供しませんが、Virtual Private Databaseポリシーの管理のみを目的としたユーザー・アカウントを作成できます。

脚注5

LBACSYSアカウントは、Oracle Label Securityポリシーを管理します。これによって、特定のユーザー・アカウントがこれらのポリシーに対して責任を負うことから、セキュリティの層が増し、別のユーザーがポリシーを不正に変更する危険性が軽減されます。

Oracle Label Securityのポリシー計画のガイドライン

Oracle Label Securityポリシーを作成する前 に、アプリケーション・スキーマにラベルを適用する場所と方法を決定する必要があります。

アプリケーション・データのOracle Label Securityポリシーを適用する場所と方法を決定するには、次のガイドラインに従います。

  1. アプリケーション・スキーマを分析します。Oracle Label Securityポリシーを適用する必要がある表を特定します。多くの場合、Oracle Label Securityポリシーが必要となるアプリケーションの表は限られています。たとえば、ルックアップ値や定数を格納している表などは、通常セキュリティ・ポリシーで保護する必要はありません。ただし、患者の病歴や従業員の給与などの機密データを含む表は、ポリシーを使用して保護する必要があります。

  2. データ・レベルの使用状況を分析します。表の特定後、表のデータを評価して、表のセキュリティ・レベルを決定します。分析のこの段階では、ビジネス活動について熟知しているユーザーの意見も参考にしてください。

    データ・レベルはデータの機密性を表します。データ・レベルには、PUBLICSENSITIVEHIGHLY SENSITIVEなどがあります。今後、機密性がどう変化するかも考慮する必要があります。そうすることで、強固なラベル定義が作成できます。

    データ・レコードに割り当てられた機密性ラベルのレベル・コンポーネントが、ユーザーのクリアランスより低いレベルの場合、このレコードにアクセスするユーザーにはこの行へのアクセス権が付与されます。

  3. データ・コンパートメントの使用状況を分析します。データ・コンパートメントは主に、行政環境で使用されます。使用するアプリケーションが商業アプリケーションの場合、多くの場合はデータ・コンパートメントを作成しません。

  4. データ・グループを分析します。データ・グループとデータ・コンパートメントは通常、組織、地域、データ所有者によってデータへのアクセスを制御するために使用されます。たとえば、アプリケーションが販売アプリケーションの場合、国または地域によって販売データへのアクセスを制御できます。

    コンパートメントおよびグループと一緒に機密性ラベルがデータ・レコードに割り当てられた場合、このデータを読み取るユーザーは、データ・ラベル、データ・ラベルのすべてのコンパートメント、機密性ラベル内の少なくとも1つのグループのレベルと同等またはそれ以上のレベルのユーザー・クリアランスを持っている必要があります。グループは階層になっているため、データ・ラベルに割り当てられた機密性ラベルの1つのグループの親を所有している場合は、そのレコードにもアクセスできます。

  5. ユーザー分布を分析します。ユーザーを複数のユーザー・タイプに分類します。たとえば、通常ユーザー、特権ユーザー、管理ユーザーのいずれかに指定します。ユーザーのカテゴリを作成したら、手順2で作成したデータ・レベルと比較します。カテゴリは、手順1で実行したスキーマ分析で識別した各表に正確に対応する必要があります。次に、ユーザー分布の組織構造を手順4で識別したデータ・グループと比較します。

  6. 特権ユーザーと管理ユーザーを確認して、割り当てるOracle Label Security認可を決定します。Oracle Label Securityには、ユーザーに割り当てることのできる特別な認可が複数あります。多くの場合、通常ユーザーに特別な認可は必要ありません。認可の詳細は、『Oracle Label Security管理者ガイド』を参照してください。

  7. 収集したデータを確認し、ドキュメント化します。この手順は企業全体の連続性を維持するために重要であり、ドキュメントは企業のセキュリティ・ポリシーの一部となります。たとえば、このドキュメントには保護されるアプリケーションのリストとその理由などが含まれます。

チュートリアル: ユーザーに基づいた表データへのアクセスのレベルの作成

ユーザーに基づいて異なるレベルで表データへのOracle Label Securityアクセスを作成できます。

トピック:

ユーザーに基づいた表データへのアクセス・レベルの作成について

このチュートリアルでは、Oracle Label Securityを使用する一般的な方法を説明します。

このチュートリアルでは、HR.LOCATIONS表にセキュリティ・ラベルを適用します。ユーザーskingkpartnerldoranは、この表内の特定の行に対して、LOCATIONS表の都市に基づくアクセス権を持っています。

Oracle Label Securityを使用して、行データに焦点を当て、データの機密性に基づいて様々なアクセス・レベルを設計することにより、ユーザーによるデータ・アクセスを制限します。ユーザー権限または組織内のユーザーのジョブ・タイトルなどの他の方法に焦点を当ててユーザー・アクセスを制限する必要がある場合、仮想プライベート・データベース・ポリシーとともに使用するPL/SQLファンクションまたはプロシージャを作成できます。詳細は、「Oracle Virtual Private Databaseを使用したアクセスの制限」 を参照してください。

HR.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の有効化

デフォルトのOracle DatabaseのインストールでOracle Label Securityはインストールされますが、手動で有効にする必要があります。

Oracle Label Securityを有効にする手順:

  1. SYSDBA管理権限を持つユーザーSYSとして、データベース・インスタンスにログインします。

    次に例を示します。

    sqlplus sys as sysdba
    Enter password: password 
    
  2. Oracle Label Securityがデータベースに登録されているかどうかを確認します。

    SELECT STATUS FROM DBA_OLS_STATUS WHERE NAME = 'OLS_CONFIGURE_STATUS';
    

    TRUEが返される場合、Oracle Label Securityはデータベースに登録されています。出力がFALSEの場合は、次の手順を実行します。

    EXEC LBACSYS.CONFIGURE_OLS;
  3. Oracle Label Securityが有効がどうかを確認します。PARAMETER列では大/小文字が区別されるため、ここに示されているとおりに入力してください。

    SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Oracle Label Security';
    

    TRUEが返される場合、Oracle Label Securityは有効です。手順2: LBACSYSアカウントの有効化に進みます。FALSEが返される場合は、次の手順を実行して有効にします。

    EXEC LBACSYS.OLS_ENFORCEMENT.ENABLE_OLS;
    
  4. Oracle Label Securityの登録と有効化が必要だった場合は、SYSOPER権限を使用してユーザーSYSとして接続します。

    CONNECT sys as sysoper
    Enter password: password
    
  5. データベースを再起動します。

    SHUTDOWN IMMEDIATE
    STARTUP

手順2: LBACSYSアカウントの有効化

Oracle Label Securityを有効にしたら、LBACSYSと呼ばれるデフォルトのOracle Label Securityアカウントを有効にする必要があります。

Oracle Label SecurityのLBACSYSユーザー・アカウントを有効にするには、次のようにします。

  1. ターゲット・データベースのデータベース・ホームページに、SYSDBA管理権限を使用してユーザーSYSとしてアクセスします。

    詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

  2. 「管理」メニューから、「セキュリティ」を選択し、「ユーザー」を選択します。

  3. LBACSYSアカウントを選択し、「編集」をクリックします。

    アカウントがアクティブ(ステータスがOPEN)の場合、手順3: Oracle Label Securityのチュートリアルで使用する1つのロールおよび3人のユーザーを作成するに進みます。

  4. ユーザーの編集: LBACSYSページで、次の設定を入力します。

    • 「パスワードの入力」および「パスワードの確認」: パスワードの作成要件に示されている要件を満たすパスワードを入力します。

    • ステータス: ステータスをロック解除に設定します。

  5. 「適用」をクリックします。

  6. 「システム権限」タブを選択します。

  7. システム権限ページで「リストの編集」ボタンを選択します。

  8. システム権限の変更ページで、「使用可能なシステム権限」リストから「SELECT ANY DICTIONARY」を選択し、「選択したシステム権限」リストに移動します。「OK」をクリックします。

  9. ユーザーの編集ページで「適用」をクリックします。

手順3: Oracle Label Securityのチュートリアルで使用する1つのロールおよび3人のユーザーを作成する

ロールと3人のユーザーを作成し、これらのユーザーにロールを付与します。

トピック:

ロールの作成

emp_roleロールは、これから作成する3人のユーザーに必要な権限を付与します。

emp_roleロールを作成するには、次のようにします。

  1. データベースのホームページにアクセスします。

    詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。NORMAL権限を持つユーザーSYSTEMとしてログインします。

  2. 「管理」メニューから、「セキュリティ」を選択し、「ロール」を選択します。

  3. ロール・ページで、「作成」をクリックします。

  4. ロールの作成ページの「名前」フィールドでEMP_ROLEと入力し、「認証」は「なし」のままにします。

  5. 「オブジェクト権限」サブページを選択します。

  6. 「オブジェクト・タイプの選択」リストから「表」を選択し、次に「追加」をクリックします。

    「表オブジェクト権限の追加」ページが表示されます。

  7. 「表オブジェクトの選択」でHR.LOCATIONSと入力し、HRスキーマのLOCATIONS表を選択します。次に「使用可能な権限」で、SELECTを「選択した権限」リストに移動します。

  8. 「OK」をクリックして「ロールの作成」ページに戻り、「OK」をクリックして「ロール」ページに戻ります。

Oracle Label Securityユーザーの作成

作成する必要がある3人のユーザーは、その職に応じて、HR.LOCATIONS表への異なるレベルのアクセス権を持つことになります。

Steven King(sking)は広報部長で、HR.LOCATIONS表への完全な読取りアクセス権を持ちます。Karen Partners(kpartner)は販売部マネージャでより制限されたアクセス権を持ち、Louise Doran(ldoran)は販売担当者でアクセス権が最も制限されています。

ユーザーを作成するには、次のようにします。

  1. 「管理」メニューから、「セキュリティ」を選択し、「ユーザー」を選択します。

    ユーザー・ページが表示されます。

  2. 「作成」をクリックします。

  3. ユーザーの作成ページで、次の情報を入力します。

    • 名前: SKING

    • プロファイル: DEFAULT

    • 認証: パスワード

    • 「パスワードの入力」および「パスワードの確認」: パスワードの作成要件に示されている要件を満たすパスワードを入力します。

    • デフォルト表領域: EXAMPLE

    • 一時表領域: TEMP

    • ステータス: 「ロック解除」に設定します。

    • ロール: 「ロール」サブページを選択し、「リストを編集」を選択してemp_roleロールをskingに付与します。「使用可能なロール」リストからemp_roleを選択し、「移動」をクリックして「選択したロール」リストに移動します。「OK」をクリックします。「ユーザーの作成」ページで、CONNECTロールとemp_roleロールの両方で「デフォルト」ボックスが選択されていることを確認します。

    • システム権限: システム権限サブページを選択し、「リストの編集」をクリックしてCREATE SESSION権限を付与します。skingにはADMIN OPTIONオプションを付与しないでください。

  4. 「OK」をクリックして「ユーザーの作成」ページに戻り、そこで「OK」をクリックして「ユーザー」ページに戻ります。

  5. 「ユーザー」ページでSKINGを選択し、「アクション」「類似作成」に設定して「実行」をクリックします。

  6. ユーザーの作成ページで、kpartnerおよびldoranにアカウントを作成してください。

    名前とパスワードを作成します。(パスワードの作成要件を参照してください。)ロールやシステム権限を付与する必要はありません。これらのアカウントのロールおよびシステム権限は、skingアカウントで定義され、自動的に作成されます。

この段階で、同じ権限を持つ3人のユーザーが作成されました。これらのすべてのユーザーは、EMP_ROLEロールによってHR.LOCATIONS表に対するSELECT権限を持っています。

手順4: Oracle Label SecurityのACCESS_LOCATIONSポリシーを作成する

ユーザー・アカウントを作成した後、ACCESS_LOCATIONSポリシーを作成できます。

ACCESS_LOCATIONSポリシーを作成する手順は、次のとおりです。

  1. NORMALロールが選択されているユーザーLBACSYSとして、Enterprise Managerターゲット・データベースにログインします。

  2. 「管理」メニューから、「セキュリティ」「Oracle Label Security」を選択します。

  3. ラベル・セキュリティ・ポリシー・ページで、「作成」をクリックします。

  4. 「Label Securityポリシーの作成」ページで、次の情報を入力します。

    • 名前: ACCESS_LOCATIONS

    • ラベル列: OLS_COLUMN

      以降で、表にポリシーを適用するときに、このラベル列が表に追加されます。デフォルトでは、ポリシーのラベル列のデータ型はNUMBER(10)です。

    • ラベル列の非表示: ラベル列が非表示にならないように、このボックスの選択を解除します。(デフォルトでは選択が解除されています。)

      通常、ラベル列は非表示にしますが、開発段階ではチェックできるように表示しておきます。ポリシーの作成が完了し、使用が開始された後、アプリケーションから見えないようにこの列は非表示にします。多くのアプリケーションは、新たな列を表示するようには設計されていないため、列を非表示にすると、アプリケーションが破損しなくなります。

    • 有効: このボックスを選択すると、ポリシーが有効になります。(デフォルトで有効にする必要があります。)

    • インバース・ユーザーの読取りおよび書込みグループ(INVERSE_GROUP): このオプションは選択しないでください。

    • デフォルトのポリシー強制オプション: 「ポリシー強制の適用」を選択して、次のオプションを選択します:

      すべての問合せ用(READ_CONTROL)

      ラベル列のUPDATE操作にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)

  5. 「OK」をクリックします。

    ACCESS_LOCATIONSポリシーが「Label Securityポリシー」ページに表示されます。

手順5: ACCESS_LOCATIONSポリシーのレベル・コンポーネントを定義する

この段階では、ポリシーが作成され、ポリシーの強制オプションが設定されています。次に、ポリシーで使用するラベル・コンポーネントを作成します。

少なくとも、PUBLICまたはSENSITIVEなど、1つ以上のレベルを作成し、詳細名、短縮名、機密性レベルを表す数値を定義する必要があります。区分およびグループはオプションです。

レベル数値は、対応するラベルに必要な機密性のレベルを表します。セキュリティ・ポリシーに追加のレベルが必要になる場合に備えて、後で拡張できるような数値の範囲を選択します。たとえば、LOW_SENSITIVITYHIGH_SENSITIVITYというレベルを追加する必要が生じた場合、LOW_SENSITIVITYには7300、HIGH_SENSITIVITYには7600という数値を割り当て、ポリシーにより作成されるセキュリティ・スケールに適合させることができます。通常、番号が大きいほどデータの機密性が高くなります。

コンパートメントは、ラベルが割り当てられたデータの機密性を表す領域を識別し、レベル内のより詳細なレベルを表します。コンパートメントはオプションです。

グループは、データを所有する組織またはデータにアクセスする組織を識別します。グループは、データを制御された方法で配布したり、組織の変更に適切なタイミングで対処する場合に役立ちます。グループはオプションです。

この手順では、レベル・コンポーネントを定義します。レベル・コンポーネントは、ACCESS_LOCATIONSポリシーで作成する必要があるSENSITIVECONFIDENTIALPUBLICラベルの名前と関係に影響します。

ACCESS_LOCATIONSポリシーのラベル・コンポーネントを定義する手順は、次のとおりです。

  1. 「Label Securityポリシー」ページでACCESS_LOCATIONSポリシーを選択し、次に「編集」を選択します。

  2. Label Securityポリシーの編集ページで、ラベル・コンポーネント・サブページを選択します。

  3. 「レベル」で、「 5行追加」をクリックし、次のように詳細名、短縮名および数値タグを入力します(フィールド間を移動するには、[Tab]キーを押します)。

    詳細名 短縮名 数値タグ

    SENSITIVE

    SENS

    3000

    CONFIDENTIAL

    CONF

    2000

    PUBLIC

    PUB

    1000

  4. 「適用」をクリックします。

手順6: ACCESS_LOCATIONSポリシーのデータ・ラベルを作成する

この手順では、ACCESS_LOCATIONポリシーのデータ・ラベルを作成します。

データ・ラベルを作成するには、各レベルに数値タグを割り当てる必要があります。このタグの数値は、後でポリシーを表に適用するときにセキュリティ列に格納されます。これは、ラベルの機密性とは関係がなく、ポリシーのラベルの識別にのみ使用されます。

データ・ラベルを作成する手順は、次のとおりです。

  1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

  2. ACCESS_LOCATIONSポリシーの選択ボタンを選択します。

  3. 「アクション」リストで「データ・ラベル」を選択し、次に「実行」をクリックします。

  4. データ・ラベル・ページで、「追加」をクリックします。

  5. データ・ラベルの作成ページで、次の情報を入力します。

  6. 「OK」をクリックします。

    「データ・ラベル」ページにデータ・ラベルが表示されます。

  7. もう一度「追加」をクリックし、CONFレベルのデータ・ラベルを次のように作成します。

    • 数値タグ: 2000と入力します。

    • レベル: リストからCONFを選択します。

  8. 「OK」をクリックします。

  9. もう一度「追加」をクリックし、SENSレベルのデータ・ラベルを次のように作成します。

    • 数値タグ: 3000と入力します。

    • レベル: リストからSENSを選択します。

  10. 「OK」をクリックします。

    データ・ラベル・ページにCONFPUBおよびSENSラベルが表示されます。

    後で、HR.LOCATIONS表にポリシーを適用したときに、タグの数値はセキュリティ列に格納されます。これは、ラベルの機密性とは関係がなく、ポリシーのラベルの識別にのみ使用されます。

手順7: ACCESS_LOCATIONSポリシーのユーザー認可を作成する

次に、ポリシーのユーザー認可を作成します。

ポリシーに対するユーザー認証を作成する手順は、次のとおりです。

  1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

  2. ACCESS_LOCATIONSポリシーの選択ボタンを選択します。

  3. 「アクション」リストで「認可」を選択し、次に「実行」をクリックします。

  4. 認可ページで、「ユーザーの追加」をクリックします。

  5. ユーザーの追加: ユーザー・ページの「データベース・ユーザー」で、「追加」をクリックします。

    「検索と選択: ユーザー」ページが表示されます。SKINGと入力して、「実行」をクリックします。

    通常、データベース・ユーザー・アカウントは、たとえばCREATE USER SQL文を使用してデータベースにすでに作成されています。

    その他のオプションは「データベース以外のユーザー」です。アプリケーション・ユーザーの多くは、データベース・ユーザー以外のユーザーとなります。データベース・ユーザー以外のユーザーは、データベース内には存在していません。Oracle Label Securityの命名方式に一致し、VARCHAR2(30)の長さのフィールドに適合していれば、どのユーザー名も追加できます。ただし、アプリケーションがデータベースに接続したときに、データベース・ユーザー以外のユーザーに関連するセキュリティ情報は、Oracle Databaseにより自動的には構成されません。この場合、アプリケーションは、Oracle Label Security関数を呼び出し、データベース・ユーザーではないユーザーのラベル認可を行う必要があります。

  6. ユーザーSKINGのチェック・ボックスを選択して、「選択」をクリックします。

    「ユーザーの作成」ページにユーザーSKINGが表示されます。

  7. ユーザーSKINGのチェック・ボックスを選択して、「次へ」をクリックします。

    (SKINGのチェック・ボックスを表示するために、ページの更新が必要な場合があります。)

  8. 「権限」ページで「次へ」を選択して、「監査」ページに移動します。

    ラベル認可を介してポリシーが強制されます。「権限」ページではユーザーによるポリシーのラベル認可をオーバーライド可能にするため、オプションは選択しないでください。

  9. 「レベル、区分およびグループ」ページで、次の設定を入力します。

    • 最大レベル: SENS(SENSITIVE)

    • 最小レベル: CONF(CONFIDENTIAL)

    • デフォルト・レベル: SENS

    • 行レベル: SENS

  10. 「次」をクリックして、監査ページに移動します。

  11. 「ユーザーの追加: 監査」ページの「監査」ペインで、すべての監査の操作がNoneに設定されていることを確認し、「次へ」をクリックします。

    確認ページが表示されます。

  12. 設定が正しいことを確認し、「終了」をクリックします。

    「確認」ページに、選択したすべての認可設定が表示されます。

  13. 手順4から12までを繰り返してユーザーKPARTNERに対して次の認可を作成し、このユーザーがHR.LOCATIONSの機密データおよびパブリック・データを読み取れるようにします。

    • 権限: 権限は選択しません。

    • ラベル、コンパートメントおよびグループ: 4つすべてのレベルを次のように設定します。

      • 最大レベル: CONF(CONFIDENTIAL)

      • 最小レベル: PUB(PUBLIC)

      • デフォルト・レベル: CONF

      • 行レベル: CONF

    • 監査:すべてNoneに設定します。

  14. ユーザーLDORANに対して次の認可を作成します。このユーザーは、HR.LOCATIONSのパブリック・データの読取りのみが許可されます。

    • 権限: 権限は選択しません。

    • レベル、区分およびグループ: 4つすべてのレベルをPUBに設定します。

    • 監査:すべてNoneに設定します。

手順8: 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. 「ポリシー強制オプション」で、「デフォルトのポリシー強制を使用」を選択します。

    「デフォルトのポリシー強制を使用」を選択すると、自動的に次のオプションが選択されます。

    • すべての問合せ用(READ_CONTROL)

    • ラベル列の更新にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)

  9. 「OK」をクリックします。

    ACCESS_LOCATIONSポリシーがHR.LOCATIONS表に適用されます。

手順9: HR.LOCATIONSデータにACCESS_LOCATIONSラベルを追加する

ACCESS_LOCATIONSポリシーをHR.LOCATIONS表に適用したら、ポリシーのラベルをLOCATIONSOLS_COLUMNに適用する必要があります。

ユーザーHR(表の所有者)がこれを達成するには、ユーザーはLOCATIONSの非表示OLS_COLUMN列にデータラベルを追加する前に、場所にFULLアクセスが必要です。

トピック:

HR.LOCATIONS表に対するHR FULLポリシー権限の付与

ラベル・セキュリティ管理ユーザーLBACSYSは、必要な権限をHRに付与できます。

ACCESS_LOCATIONSポリシーへの完全なアクセス権をHRに付与するには、次のようにします。

  1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

  2. ACCESS_LOCATIONSポリシーの選択ボタンを選択します。

  3. 「アクション」リストから「認可」を選択し、「実行」をクリックします。

  4. 認可ページで、「ユーザーの追加」をクリックします。

  5. ユーザーの追加ページの「データベース・ユーザー」で、「追加」をクリックします。

  6. 検索と選択ウィンドウで、HRユーザーのボックスを選択し、「選択」をクリックします。

    ユーザーの追加ページにユーザーHRが表示されます。

  7. 「次」をクリックして権限ページを表示します。

  8. 「すべてのラベル・セキュリティ・チェックを省略(FULL)」権限を選択し、「次へ」をクリックします。

  9. 「次へ」をクリックして、レベル、区分およびグループ・ページを表示します。

  10. 「次へ」をクリックします。

  11. 監査ページで、「次」をクリックして確認ページを表示します。

  12. 「終了」をクリックします。

    この段階で、HRは他のユーザーとともに「認可」ページにリストされています。

  13. Enterprise Managerを終了しないでください。

HR.LOCATIONSのOLS_COLUMN表の更新

この時点で、ユーザーHRHR.LOCATIONS表のOLS_COLUMN列を更新して、CITY列の都市に基づいて表内の特定の行に割り当てられるデータ・ラベルを追加できます。

HR.LOCATIONSのOLS_COLUMN表を更新する手順は、次のとおりです。

  1. SQL*Plusで、ユーザーHRとして接続します。

    CONNECT HR
    Enter password: password
    

    HRとしてログインできない場合、このアカウントはロックされているか、期限が切れているため、SYSTEMとしてログインしてから、次の文を入力します。passwordは、HRアカウントに適したパスワードに置き換えます。セキュリティを向上させるため、以前のリリースのOracle Databaseで使用されたパスワードを再利用しないでください。パスワードの作成要件を参照してください。

    ALTER USER HR ACCOUNT UNLOCK IDENTIFIED BY password
    

    このALTER USER文を実行したら、ユーザーHRとして再度ログインしてみてください。

  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', 'ROMA');
    
  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;
    

    次の出力が表示されます。

    LABEL_TO_CHAR(OLS_COLUMN)
    -----------------------------------------------------------------------------
    CONF
    PUB
    SENS
    PUB
    PUB
    PUB
    PUB
    PUB
    PUB
    PUB
    SENS
    PUB
    PUB
    SENS
    PUB
    CONF
    PUB
    CONF
    PUB
    PUB
    PUB
    PUB
    PUB
     
    23 rows selected. 

    注意:

    前述の問合せでラベル列名(OLS_COLUMN)を明示的に使用すると、ラベル列が非表示になっていても表示できます。

    ラベル列が非表示であるときに、ラベル列名を明示的に指定しない場合、ラベル列は問合せ結果に表示されません。たとえば、ラベル列が非表示である場合、SELECT * FROM LOCATIONS問合せを実行しても、ラベル列は表示されません。この機能を使用すると、アプリケーションからラベル列が見えないようにできます。ラベル列が追加される前に設計されたアプリケーションには、ラベル列は認識されず、表示されません。

手順10: ACCESS_LOCATIONSポリシーをテストする

ACCESS_LOCATIONSポリシーの作成は完了しました。次に、ポリシーをテストします。ポリシーは、3人の各ユーザーとしてSQL*Plusにログインし、HR.LOCATIONS表に対してSELECTを実行することでテストできます。

ACCESS_LOCATIONSポリシーをテストする手順は、次のとおりです。

  1. SQL*Plusでユーザーskingとして接続します。

    CONNECT sking
    Enter password: password
    
  2. 次のように入力します。

    次のコマンドは、読み取りやすいように表の列幅を書式設定します。この手順を実行するのは、(kpartnerおよびldoranのログイン時も含めて)セッション全体に対して1回のみです。

    COL city HEADING City FORMAT a25
    COL country_id HEADING Country FORMAT a11
    COL Label format a10
    

    次に、SELECT文を次のように入力します。

    SELECT CITY, COUNTRY_ID, LABEL_TO_CHAR (OLS_COLUMN)
    AS LABEL FROM HR.LOCATIONS ORDER BY OLS_COLUMN;
    

    ユーザーskingは、HR.LOCATIONS表の23行すべてにアクセスできます。アクセスはラベルCONFおよびSENSが付けられた行に対してのみ認可されていますが、ラベルPUBが付けられた行を読み取ることができます(ただし、書き込むことはできません)。

    City                      Country     LABEL
    ------------------------- ----------- ----------
    Venice                    IT          PUB
    Utrecht                   NL          PUB
    Bern                      CH          PUB
    Geneva                    CH          PUB
    Sao Paulo                 BR          PUB
    Stretford                 UK          PUB
    Mexico City               MX          PUB
    Hiroshima                 JP          PUB
    Southlake                 US          PUB
    South San Francisco       US          PUB
    South Brunswick           US          PUB
    Seattle                   US          PUB
    Toronto                   CA          PUB
    Whitehorse                CA          PUB
    Bombay                    IN          PUB
    Sydney                    AU          PUB
    London                    UK          PUB
    Oxford                    UK          CONF
    Munich                    DE          CONF
    Roma                      IT          CONF
    Singapore                 SG          SENS
    Tokyo                     JP          SENS
    Beijing                   CN          SENS
    
    23 rows selected.
    
  3. ユーザーkpartnerldoranで、手順1と手順2を繰り返します。

    ユーザーKPARTNERは、ラベルCONFおよびPUBが付けられた行にアクセスできます。

    City                      Country     LABEL
    ------------------------- ----------- ----------
    Venice                    IT          PUB
    Utrecht                   NL          PUB
    Bern                      CH          PUB
    Mexico City               MX          PUB
    Hiroshima                 JP          PUB
    Southlake                 US          PUB
    South San Francisco       US          PUB
    South Brunswick           US          PUB
    Seattle                   US          PUB
    Toronto                   CA          PUB
    Whitehorse                CA          PUB
    Bombay                    IN          PUB
    Sydney                    AU          PUB
    London                    UK          PUB
    Stretford                 UK          PUB
    Sao Paulo                 BR          PUB
    Geneva                    CH          PUB
    Oxford                    UK          CONF
    Munich                    DE          CONF
    Roma                      IT          CONF
    20 rows selected.
    

    ユーザーLDORANは、ラベルPUBが付けられた行にアクセスできます。

    City                      Country     LABEL
    ------------------------- ----------- ----------
    Venice                    IT          PUB
    Hiroshima                 JP          PUB
    Southlake                 US          PUB
    South San Francisco       US          PUB
    South Brunswick           US          PUB
    Seattle                   US          PUB
    Toronto                   CA          PUB
    Whitehorse                CA          PUB
    Bombay                    IN          PUB
    Sydney                    AU          PUB
    London                    UK          PUB
    Stretford                 UK          PUB
    Sao Paulo                 BR          PUB
    Geneva                    CH          PUB
    Bern                      CH          PUB
    Utrecht                   NL          PUB
    Mexico City               MX          PUB
    
    17 rows selected.
    
  4. SQL*Plusを終了します。

手順11: このチュートリアルで使用したコンポーネントを削除する(オプション)

コンポーネントが不要になった場合、このチュートリアルで作成したコンポーネントを削除できます。

このチュートリアルで使用したコンポーネントを削除するには、次のようにします。

  1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

  2. ACCESS_LOCATIONSポリシーを選択して「削除」をクリックします。「確認」ページで、「列の削除」チェック・ボックスを選択してから、「はい」をクリックします。

    ACCESS_LOCATIONSポリシーを削除すると、HR.LOCATIONS表からOLS_COLUMN列も削除されます。

  3. Enterprise Managerからログアウトし、ユーザーSYSTEMとして再度ログインします。

  4. 「管理」メニューから、「セキュリティ」を選択し、「ユーザー」を選択します。

  5. ユーザーKPARTNERを選択して「削除」をクリックします。

  6. 「確認」ページで「はい」をクリックします。

  7. ユーザーldoranskingで、手順5と手順6を繰り返します。

  8. 「データベース・インスタンス」リンクをクリックしてデータベースのホームページに戻ります。

  9. 「管理」メニューから、「セキュリティ」を選択し、「ロール」を選択します。

  10. emp_roleロールを選択し、次に「削除」を選択します。

  11. 「確認」ダイアログ・ボックスで、「はい」をクリックします。

  12. Enterprise Managerからログアウトします。

  13. 必要に応じて、Oracle Label Securityを無効にします。

    1. SYSDBA管理権限を持つSYSとして、またはLBAC_DBAロールを付与されたユーザーとしてデータベース・インスタンスにログインします。

      次に例を示します。

      sqlplus lbacsys
      Enter password: password
      
    2. 次のプロシージャを実行します。

      EXEC LBACSYS.OLS_ENFORCEMENT.DISABLE_OLS
      
    3. データベースを再起動します。

      CONNECT SYS AS SYSOPER
      Enter password: password
      
      SHUTDOWN IMMEDIATE
      STARTUP