Oracle Label Securityを分散構成で使用する場合の考慮事項を理解する必要があります。
内容は次のとおりです。
分散データベースをサポートするネットワーク構成では、複数のOracle Database (または他の)サーバーが、同じオペレーティング・システムまたは異なるオペレーティング・システムで実行できます。
分散システム内の各コオペラティブ・サーバーは、他のクライアントやサーバーとネットワーク経由で通信します。
図11-1に、クライアントとサーバーを含む分散データベースで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
を使用できます。コンポーネント名が同じであれば、操作は成功します。
Oracle Label Securityでは、すべての標準Oracle Database分散構成がサポートされます。
保護されているデータにアクセスできるかどうかは、各分散データベースにインストールされているポリシーによって決定されます。
分散環境におけるデータベース間の関係を考慮してください。
同じアプリケーションを2つのデータベースで実行する場合に、両者に同じ保護を適用する場合は、ローカル・データベースとリモート・データベースの両方に同じOracle Label Securityポリシーを適用する必要があります。
ローカル・データベースとリモート・データベースに共通するポリシーがある場合は、ローカルのセッション・ラベルと行ラベルによりリモート・ユーザーのデフォルト・ラベルがオーバーライドされます。
リモート・データベースにローカル・データベースとは異なるポリシーがある場合は、リモート・ポリシーにより、ローカル・ポリシーから独立してデータへのアクセスを制限できます。これに対して、リモート・ポリシーについて認可を持つリモート・ユーザーで接続すると、ローカル認可に関係なく、リモート・ユーザーがアクセス権を持っているすべてのデータにアクセスできます。
リモート・データベースにポリシーが適用されていない場合は、標準的な分散データベースの場合と同様にデータにアクセスできます。
次のように、3つのデータベースでそれぞれ異なるOracle Label Securityポリシーが有効になっている場合を考えます。
ポリシーAの認可を持つユーザーは、データベース1およびデータベース2から保護されているデータを取得できます。リモート・ユーザーは、ポリシーCの認可を持っていれば、データベース3からもデータを取得できます。
Oracle Label Securityポリシーにより保護されている表でレプリケーション・オプションを使用する方法を理解する必要があります。
内容は次のとおりです。
関連項目:
Oracle Database 12cでのレプリケーションとレプリケーション環境の設定方法の詳細な説明は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください
マテリアライズド・ビューの使用に関する全般情報は、『Oracle Database概要』および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください
Oracle Label Securityでデータをレプリケートできます。
Oracle Label Securityでは、読取り専用マテリアライズド・ビュー(スナップショット)を使用したレプリケーションがサポートされます。
Oracle Databaseでは、データのレプリケートにマテリアライズド・ビューを使用します。マテリアライズド・ビューは、マスター表の最新の状態を反映したローカルまたはリモート・マスター表のローカル・コピーです。
図11-4に示すように、マスター表は、マスター・ノードとして指定したノード上でレプリケートする表です。dblink
アカウントを使用して、異なるデータベース内の表のマテリアライズド・ビューを作成できます。(この操作は、同じシステム上の同じデータベースでも実行できます。)リモート・マスター表から行を選択し、それらをローカル・マテリアライズド・ビューにコピーできます。ここで、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 2日でセキュリティ・ガイド』
Oracle Label Securityでは、マテリアライズド・ビューを作成できます。
内容は次のとおりです。
Oracle Label Securityでは、マテリアライズド・ビューの作成時に一連の手順が実行されます。
次の手順により、ビューの内容が決定されます。
リモート・データベース内のマスター表の定義が読み取られます。
マスター表内で、マテリアライズド・ビュー定義に定義されている条件を満たす行が読み取られます。
各行がローカル・データベースのマテリアライズド・ビューに書き込まれます。
Oracle Label Securityでは、ローカル・データベース内で書込みアクセス権を持っている行のみが書き込まれるため、マテリアライズド・ビューの内容は次のものに応じて異なります。
有効なポリシー・オプション
ローカル・データベース内で定義した権限
セッション・ラベル
Oracle Label Securityでは、完全マテリアライズド・ビューがサポートされます。
マスター表のすべての行を読み取り、ローカル・データベース内でマテリアライズド・ビューの各ラベルへの書込みアクセス権を持っていれば、結果はマスター表の完全マテリアライズド・ビューとなります。マテリアライズド・ビューが完全であることを保証するには、マスター表のすべてのデータへの読取りアクセス権と、ローカル・データベース内でマスター表にデータが格納されるすべてのラベルへの書込みアクセス権を持っている必要があります。
注意:
マテリアライズド・ビューの作成時に付与した権限は取り消さないでください。取り消すと、レプリケーションのリフレッシュを実行できなくなる場合があります。
マテリアライズド・ビューの作成要件は、作成するマテリアライズド・ビューのタイプに応じて異なります。
内容は次のとおりです。
通常はREPADMIN
アカウントを使用するレプリケーション管理者の要件は、構成に応じて異なります。
ただし、通常は次の要件を満たす必要があります。
FULL
Oracle Label Security権限(すべての構成に必須)が必要です。
マスター表に対するSELECT
権限が必要です。
リモート・ノードからマスター表を含むデータベースへのデータベース・リンクを確立するアカウントであることが必要です。
関連項目:
レプリケーション管理者とREPADMIN
アカウントの詳細は、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が保護する表で部分マテリアライズド・ビューが使用されている場合、問合せにより取り出した各ラベルで、ローカル・データベースへのWRITE
のための十分な権限があることを確認する必要があります。現在付与されている権限を確認するには、ALL_SA_USER_PRIVSデータ・ディクショナリ・ビューに問い合せます。
マスター表の内容または定義が変更された場合は、マテリアライズド・ビューをリフレッシュする必要があります。
これにより、マテリアライズド・ビューがマスター表の内容を正確に反映していることが確認されます。
リモートのマルチレベル表のマテリアライズド・ビューをリフレッシュするには、マテリアライズド・ビュー問合せにより取り出されたすべての行のラベルで、ローカル・データベースに書き込むための権限も必要になります。
警告:
部分マテリアライズド・ビューまたは完全マテリアライズド・ビューをリフレッシュしても、マスター表のすべての行へのREADアクセス権を持っていない場合は、マテリアライズド・ビューに古い行が含まれる可能性があります。その結果、元のマテリアライズド・ビューはマスター表からの更新済の行で上書きされません。
正確なマテリアライズド・ビューのリフレッシュを行うために、ジョブ・キューを使用してビューを自動的にリフレッシュする必要があります。これらのプロセスには、ビューが完全にリフレッシュされることを保証するために、マスター表のすべての行を読み取るための権限と、読み取った行をマテリアライズド・ビューに書き込むための権限が必要です。これらのプロセスでは、マテリアライズド・ビュー所有者の権限が使用されることに注意してください。
関連項目:
ジョブ・キューの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください