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