14 分散データベースでのOracle Label Securityの使用
Oracle Label Securityを分散構成で使用する場合の特別な考慮事項を理解しておく必要があります。
- Oracle Label Securityの分散構成について
分散データベースをサポートするネットワーク構成においては、複数のOracle Database (または他の)サーバーが同じオペレーティング・システム上で実行される場合も、異なるオペレーティング・システム上で実行される場合もあります。 - Oracle Label Securityでのリモート・データベースへの接続の動作
分散データベースは、Oracle Label Securityでは標準的な方法で動作します。ローカル・ユーザーは最終的に特定のリモート・ユーザーとして接続されます。 - リモート・セッションでのセッション・ラベルと行ラベル
リモートで接続する場合、接続の確立時に有効なセッション・ラベルと行ラベルを直接制御できます。 - 分散環境でのラベル
ポリシーで保護するすべてのデータベースには、同じラベル・コンポーネント定義およびラベル・タグを使用する必要があります。 - 分散環境でのOracle Label Securityポリシーの使用
Oracle Label Securityでは、すべての標準Oracle Database分散構成がサポートされます。 - 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.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
であれば、タグは意味を持ちません。重大な結果が生じる可能性があります。
リモート・システムからラベルを取り出す場合は、両方のデータベースで同じ数値ラベルを使用している場合を除き、文字列表現を(数値ラベル・タグではなく)戻す必要があります。
Oracle Label Securityで、異なるデータベース上で自動的にラベルを生成できるようにする場合、ラベル・タグは同一になりません。両方のインスタンスで同じラベル・タグを持つラベルを事前に定義しないかぎり、文字列には意味がありますが、数値に意味はありません。
ラベル・タグが複雑にならないように、取出し時には(LABEL_TO_CHAR
を使用して)ラベルを文字列に変換し、ラベルの格納時にはCHAR_TO_LABEL
を使用できます。コンポーネント名が同じであれば、操作は成功します。
親トピック: 分散環境でのラベル
14.4.2 分散環境での数値書式によるラベル・コンポーネント
分散環境では、ラベルが適切にソートされるように、レベル・コンポーネントの数値書式による同じ相対ランキングを使用します。
次の例で、2つのデータベース内のレベルは実際には同じです。数値書式は異なりますが、各レベルの数値書式の相対ランキングは同じです。コンポーネントの相対順序が同じであれば、ラベルは同一とみなされます。
親トピック: 分散環境でのラベル
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ポリシーで保護されている表でのレプリケーション・オプションの使用方法を理解しておく必要があります。
- Oracle Label Securityでのレプリケーションについて
Oracle Label Securityでは、データをレプリケートできます。 - マテリアライズド・ビューの内容
Oracle Label Securityでは、マテリアライズド・ビューを作成できます。 - Oracle Label Securityでのマテリアライズド・ビューの作成要件
マテリアライズド・ビューの作成要件は、作成するマテリアライズド・ビューのタイプによって異なります。 - マテリアライズド・ビューのリフレッシュ方法
マスター表の内容または定義が変更された場合、マテリアライズド・ビューをリフレッシュする必要があります。
14.6.1 Oracle Label Securityでのレプリケーションについて
Oracle Label Securityでは、データをレプリケートできます。
- Oracle Label Securityでサポートされているレプリケーション機能
Oracle Label Securityでは、読取り専用のマテリアライズド・ビュー(スナップショット)を使用してレプリケーションをサポートしています。 - Oracle Label Securityでのレプリケーションに対する行レベルのセキュリティ制限
ポリシー・オプションの1つとしてREAD_CONTROL
が指定されている場合は、Oracle Label Securityポリシーにより表に行レベル・セキュリティ(RLS)が適用されます。
14.6.1.1 Oracle Label Securityでサポートされているレプリケーション機能
Oracle Label Securityでは、読取り専用のマテリアライズド・ビュー(スナップショット)を使用してレプリケーションをサポートしています。
Oracle Databaseでは、データのレプリケートにマテリアライズド・ビューを使用します。マテリアライズド・ビューは、マスター表の最新の状態を反映したローカルまたはリモート・マスター表のローカル・コピーです。
次の図で示すように、マスター表は、マスター・ノードとして指定したノードにある、レプリケートする表です。dblink
アカウントを使用して、別のデータベース内の表のマテリアライズド・ビューを作成できます。(この操作は、同じシステム上の同じデータベースでも実行できます。)リモート・マスター表から行を選択し、それらをローカル・マテリアライズド・ビューにコピーできます。ここで、mvEMP
は表EMP
のマテリアライズド・ビューを表し、mlog$_EMP
はマテリアライズド・ビュー・ログを表します。
分散環境では、マテリアライズド・ビューにより問合せに伴うネットワークの通信量が大幅に減少し、ノードが使用できないときのデータの可用性が向上します。
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では、マテリアライズド・ビューを作成できます。
- マテリアライズド・ビューの内容の決定方法
Oracle Label Securityでは、マテリアライズド・ビューの作成時に一連のステップが実行されます。 - 完全マテリアライズド・ビュー
Oracle Label Securityでは、完全マテリアライズド・ビューがサポートされています。 - 部分マテリアライズド・ビュー
マテリアライズド・ビュー定義でWHERE
句を指定した場合は、部分マテリアライズド・ビューが作成されます。
14.6.2.1 マテリアライズド・ビューの内容の決定方法
Oracle Label Securityでは、マテリアライズド・ビューの作成時に一連のステップが実行されます。
次のステップによって、ビューの内容が決定されます。
-
リモート・データベース内のマスター表の定義が読み取られます。
-
マスター表内で、マテリアライズド・ビュー定義に定義されている条件を満たす行が読み取られます。
-
各行がローカル・データベースのマテリアライズド・ビューに書き込まれます。
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でのマテリアライズド・ビューの作成要件
マテリアライズド・ビューの作成要件は、作成するマテリアライズド・ビューのタイプに応じて異なります。
- レプリケーション管理者の要件
通常はREPADMIN
アカウントを使用するレプリケーション管理者の要件は、構成に応じて異なります。 - マテリアライズド・ビューの所有者の要件
マテリアライズド・ビューのリフレッシュ中には、そのマテリアライズド・ビューの所有者に属する権限が使用されます。 - マルチレベルの部分マテリアライズド・ビューの作成要件
部分マテリアライズド・ビューには、Oracle Label Securityで保護されたリモート・マスター表の行の一部のみを含めることができます。 - マルチレベルの完全マテリアライズド・ビューの作成要件
完全マテリアライズド・ビューには、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ポリシーがマテリアライズド・ビューに適用されていても、SCOTT
にFULL
権限を付与しない場合、マテリアライズド・ビューを作成するにはREPADMIN
アカウントを使用する必要があります。SCOTT
には、その表に対するSELECT
権限を付与できます。
マテリアライズド・ビューにポリシーが適用されない場合は、権限を追加せずにSCOTT
のスキーマにビューを作成できます。この場合、マテリアライズド・ビューは、WHERE
条件でレコードをSCOTT
が読み取れるレコードに限定するように作成する必要があります。
最後に、SCOTT
にFULL
権限を付与できる場合は、SCOTT
のスキーマにマテリアライズド・ビューを作成し、Oracle Label Securityポリシーも適用できます。
マスター表に対するOracle Label Securityポリシーには、任意のポリシー・オプション・セットを含めることができることに注意してください。SCOTT
がFULL
またはREAD
権限を持っている場合は、ポリシー・オプションに関係なくすべての行を選択できます。
14.6.3.3 マルチレベルの部分マテリアライズド・ビューの作成要件
部分マテリアライズド・ビューには、Oracle Label Securityで保護されたリモート・マスター表の列の一部のみを含めることができます。
Oracle Label Securityで保護されている表で部分マテリアライズド・ビューが使用されている場合、問合せにより取り出した各ラベルでローカル・データベースに書き込む
ための必要な権限を持っている必要があります。現在付与されている権限は、ALL_SA_USER_PRIVS
データ・ディクショナリ・ビューを問い合せることで確認できます。
14.6.4 マテリアライズド・ビューのリフレッシュ方法
マスター表の内容または定義が変更された場合、マテリアライズド・ビューをリフレッシュする必要があります。
これにより、マテリアライズド・ビューにマスター表の内容が正確に反映されます。
リモートのマルチレベル表のマテリアライズド・ビューをリフレッシュするには、マテリアライズド・ビュー問合せにより取り出されたすべての行のラベルで、ローカル・データベースに書き込むための権限も必要になります。
警告:
部分マテリアライズド・ビューまたは完全マテリアライズド・ビューをリフレッシュしても、マスター表のすべての行へのREADアクセス権を持っていない場合は、マテリアライズド・ビューに古い行が含まれる可能性があります。その結果、元のマテリアライズド・ビューはマスター表からの更新済の行で上書きされません。
マテリアライズド・ビューを正確にリフレッシュするには、ジョブ・キューを使用してビューを自動的にリフレッシュする必要があります。これらのプロセスには、ビューが完全にリフレッシュされることを保証するために、マスター表のすべての行を読み取るための権限と、読み取った行をマテリアライズド・ビューに書き込むための権限が必要です。これらのプロセスでは、マテリアライズド・ビュー所有者の権限が使用されることに注意してください。
関連項目:
ジョブ・キューの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください