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

Oracle Label Securityを分散構成で使用する場合の特別な考慮事項を理解しておく必要があります。

14.1 Oracle Label Securityの分散構成について

分散データベースをサポートするネットワーク構成においては、複数のOracle Database (または他の)サーバーが同じオペレーティング・システム上で実行される場合も、異なるオペレーティング・システム上で実行される場合もあります。

分散システム内の各コオペラティブ・サーバーは、他のクライアントやサーバーとネットワーク経由で通信します。

図14-1は、クライアントとサーバーを含む分散データベースでOracle Label Securityを使用する場合と使用しない場合を示しています。この章で説明するように、WESTERN_REGIONデータベースからEASTERN_REGIONデータベースへのデータベース・リンクを確立すると、EASTERN_REGIONでのユーザーIDが表示を認可されていれば、このアクセス権をローカル(WESTERN_REGION)では持っていない場合にも、データにアクセスできます。

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

図14-1の説明が続きます
「図14-1 分散データベースでのOracle Label Securityの使用」の説明

14.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ポリシーのユーザーである必要はありません。リモート・データベース上でポリシー・ユーザーとして接続すると、保護されているデータにアクセスできます。

14.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データを取得します。

14.4 分散環境でのラベル

ポリシーで保護するすべてのデータベースには、同じラベル・コンポーネント定義およびラベル・タグを使用する必要があります。

14.4.1 分散環境でのラベル・タグ

分散環境では、複数のデータベース間で同じラベル・タグを使用するように選択できます。

ただし、複数のデータベースで同じタグを使用しないことを選択した場合は、リモート操作の実行時にラベルの文字書式を取得する必要があります。これにより、ラベルの一貫性が保たれます。

次の例では、ラベル文字列の文字列表現は同じです。ただし、ラベル・タグが異なります。取り出されたラベル・タグの値がWESTERN_REGIONデータベース上では11であっても、EASTERN_REGIONデータベース上では2001であれば、タグは意味を持ちません。重大な結果が生じる可能性があります。

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

図14-2の説明が続きます
「図14-2 分散データベースでのラベル・タグ」の説明

リモート・システムからラベルを取り出す場合は、両方のデータベースで同じ数値ラベルを使用している場合を除き、文字列表現を(数値ラベル・タグではなく)戻す必要があります。

Oracle Label Securityで、異なるデータベース上で自動的にラベルを生成できるようにする場合、ラベル・タグは同一になりません。両方のインスタンスで同じラベル・タグを持つラベルを事前に定義しないかぎり、文字列には意味がありますが、数値に意味はありません。

ラベル・タグが複雑にならないように、取出し時には(LABEL_TO_CHARを使用して)ラベルを文字列に変換し、ラベルの格納時にはCHAR_TO_LABELを使用できます。コンポーネント名が同じであれば、操作は成功します。

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

分散環境では、ラベルが適切にソートされるように、レベル・コンポーネントの数値書式による同じ相対ランキングを使用します。

次の例で、2つのデータベース内のレベルは実際には同じです。数値書式は異なりますが、各レベルの数値書式の相対ランキングは同じです。コンポーネントの相対順序が同じであれば、ラベルは同一とみなされます。

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

図14-3の説明が続きます
「図14-3 分散データベースでのラベル・コンポーネント」の説明

14.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からもデータを取得できます。

14.6 Oracle Label Securityでのレプリケーション

Oracle Label Securityポリシーで保護されている表でのレプリケーション・オプションの使用方法を理解しておく必要があります。

14.6.1 Oracle Label Securityでのレプリケーションについて

Oracle Label Securityでは、データをレプリケートできます。

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

Oracle Label Securityでは、読取り専用のマテリアライズド・ビュー(スナップショット)を使用してレプリケーションをサポートしています。

Oracle Databaseでは、データのレプリケートにマテリアライズド・ビューを使用します。マテリアライズド・ビューは、マスター表の最新の状態を反映したローカルまたはリモート・マスター表のローカル・コピーです。

次の図で示すように、マスター表は、マスター・ノードとして指定したノードにある、レプリケートする表です。dblinkアカウントを使用して、別のデータベース内の表のマテリアライズド・ビューを作成できます。(この操作は、同じシステム上の同じデータベースでも実行できます。)リモート・マスター表から行を選択し、それらをローカル・マテリアライズド・ビューにコピーできます。ここで、mvEMPは表EMPのマテリアライズド・ビューを表し、mlog$_EMPはマテリアライズド・ビュー・ログを表します。

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

図14-4の説明が続きます
「図14-4 レプリケーションでのマテリアライズド・ビューの使用」の説明

分散環境では、マテリアライズド・ビューにより問合せに伴うネットワークの通信量が大幅に減少し、ノードが使用できないときのデータの可用性が向上します。

14.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により変更されなくなります。

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

Oracle Label Securityでは、マテリアライズド・ビューを作成できます。

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

Oracle Label Securityでは、マテリアライズド・ビューの作成時に一連のステップが実行されます。

次のステップによって、ビューの内容が決定されます。

  1. リモート・データベース内のマスター表の定義が読み取られます。

  2. マスター表内で、マテリアライズド・ビュー定義に定義されている条件を満たす行が読み取られます。

  3. 各行がローカル・データベースのマテリアライズド・ビューに書き込まれます。

Oracle Label Securityでは、ローカル・データベース内で書込みアクセス権を持っている行のみが書き込まれるため、マテリアライズド・ビューの内容は次のものに応じて異なります。

  • 有効なポリシー・オプション

  • ローカル・データベース内で定義した権限

  • セッション・ラベル

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

Oracle Label Securityでは、完全マテリアライズド・ビューがサポートされています。

マスター表のすべての行を読み取り、ローカル・データベース内でマテリアライズド・ビューの各ラベルへの書込みアクセス権を持っていれば、結果はマスター表の完全マテリアライズド・ビューとなります。マテリアライズド・ビューが完全であることを保証するには、マスター表のすべてのデータへの読取りアクセス権と、ローカル・データベース内でマスター表にデータが格納されるすべてのラベルへの書込みアクセス権を持つ必要があります。

ノート:

マテリアライズド・ビューの作成時に付与した権限は取り消さないでください。取り消すと、レプリケーションのリフレッシュを実行できなくなる場合があります。

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

部分マテリアライズド・ビューが作成されるのは、マテリアライズド・ビュー定義にWHERE句を指定した場合です。

部分マテリアライズド・ビューは、リモート・データベースにデータのサブセットを渡す場合に便利な方法です。

部分マテリアライズド・ビューを作成するには、ユーザーがレプリケートするすべての行への書込みアクセス権を持っている必要があります。ユーザーに現在付与されている権限は、DBA_SA_USER_PRIVSデータ・ディクショナリ・ビューを問い合せることで確認できます。

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

マテリアライズド・ビューの作成要件は、作成するマテリアライズド・ビューのタイプに応じて異なります。

14.6.3.1 レプリケーション管理者の要件

通常はREPADMINアカウントを使用するレプリケーション管理者の要件は、構成に応じて異なります。

ただし、通常は次の要件を満たす必要があります。

  • FULL Oracle Label Security権限(すべての構成に必須)が必要です。

  • マスター表に対するSELECT権限が必要です。

  • リモート・ノードからマスター表を含むデータベースへのデータベース・リンクを確立するアカウントであることが必要です。

14.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ポリシーがマテリアライズド・ビューに適用されていても、SCOTTFULL権限を付与しない場合、マテリアライズド・ビューを作成するにはREPADMINアカウントを使用する必要があります。SCOTTには、その表に対するSELECT権限を付与できます。

マテリアライズド・ビューにポリシーが適用されない場合は、権限を追加せずにSCOTTのスキーマにビューを作成できます。この場合、マテリアライズド・ビューは、WHERE条件でレコードをSCOTTが読み取れるレコードに限定するように作成する必要があります。

最後に、SCOTTFULL権限を付与できる場合は、SCOTTのスキーマにマテリアライズド・ビューを作成し、Oracle Label Securityポリシーも適用できます。

マスター表に対するOracle Label Securityポリシーには、任意のポリシー・オプション・セットを含めることができることに注意してください。SCOTTFULLまたはREAD権限を持っている場合は、ポリシー・オプションに関係なくすべての行を選択できます。

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

部分マテリアライズド・ビューには、Oracle Label Securityで保護されたリモート・マスター表の列の一部のみを含めることができます。

Oracle Label Securityで保護されている表で部分マテリアライズド・ビューが使用されている場合、問合せにより取り出した各ラベルでローカル・データベースに書き込むための必要な権限を持っている必要があります。現在付与されている権限は、ALL_SA_USER_PRIVSデータ・ディクショナリ・ビューを問い合せることで確認できます。

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

完全マテリアライズド・ビューには、Oracle Label Securityで保護されたリモート・マスター表のすべての列を含めることができます。

Oracle Label Securityで保護されている表で完全マテリアライズド・ビューが使用されている場合、定義済のマテリアライズド・ビュー問合せにより取り出したすべての行のラベルで、ローカル・データベースへの書込みアクセスができる必要があります。現在付与されている権限は、ALL_SA_USER_PRIVSデータ・ディクショナリ・ビューを問い合せることで確認できます。

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

マスター表の内容または定義が変更された場合、マテリアライズド・ビューをリフレッシュする必要があります。

これにより、マテリアライズド・ビューにマスター表の内容が正確に反映されます。

リモートのマルチレベル表のマテリアライズド・ビューをリフレッシュするには、マテリアライズド・ビュー問合せにより取り出されたすべての行のラベルで、ローカル・データベースに書き込むための権限も必要になります。

警告:

部分マテリアライズド・ビューまたは完全マテリアライズド・ビューをリフレッシュしても、マスター表のすべての行へのREADアクセス権を持っていない場合は、マテリアライズド・ビューに古い行が含まれる可能性があります。その結果、元のマテリアライズド・ビューはマスター表からの更新済の行で上書きされません。

マテリアライズド・ビューを正確にリフレッシュするには、ジョブ・キューを使用してビューを自動的にリフレッシュする必要があります。これらのプロセスには、ビューが完全にリフレッシュされることを保証するために、マスター表のすべての行を読み取るための権限と、読み取った行をマテリアライズド・ビューに書き込むための権限が必要です。これらのプロセスでは、マテリアライズド・ビュー所有者の権限が使用されることに注意してください。

関連項目:

ジョブ・キューの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください