7 ファクタの構成
ファクタを使用すると、Oracle Database Vault認可を決定する複雑な属性をPL/SQLで作成して使用できます。
- ファクタの概要
ファクタは、データベースのIPアドレスなど、Oracle Database Vaultが認識できる名前付き変数または属性です。 - デフォルト・ファクタ
Oracle Database Vaultには一連のデフォルトのファクタが用意されています。 - ファクタの作成
通常、ファクタを作成するには、まずファクタを作成し、ファクタを編集してアイデンティティを含めます。 - ファクタへのアイデンティティの追加
新しいファクタを作成したら、ファクタにアイデンティティを追加できます。 - ファクタの変更
DBMS_MACADM.UPDATE_FACTORプロシージャを使用すると、ファクタの定義を変更できます。 - ファクタの削除
ファクタを削除する前に、そのファクタへの参照を削除する必要があります。 - ファクタの動作
セッションが確立されると、Oracle Database Vaultではファクタが処理されます。 - チュートリアル: データベースへの非定型ツール・アクセスの阻止
このチュートリアルでは、ファクタを使用して非定型ツール(SQL*Plusなど)がデータベースにアクセスできないようにする方法を示します。 - ファクタ設計のガイドライン
Oracleでは、ファクタを設計するためのガイドラインを提供しています。 - ファクタのパフォーマンスへの影響
ファクタの複雑さは、Oracleデータベース・インスタンスのパフォーマンスに影響します。 - ファクタ関連のレポートおよびデータ・ディクショナリ・ビュー
Oracle Database Vaultには、ファクタおよびそのアイデンティティに関する情報が表示されるレポートとデータ・ディクショナリ・ビューが用意されています。
ファクタの概要
ファクタは、データベースのIPアドレスなど、Oracle Database Vaultが認識できる名前付き変数または属性です。
ファクタは、データベースに接続するためのデータベース・アカウントの認可や、データの可視性および管理性を制限するフィルタ・ロジックの作成などのアクティビティに使用できます。
Oracle Database Vaultには、サイトのドメイン、IPアドレス、データベースなどのコンポーネントに対する制御を設定できる様々なファクタが用意されています。独自のPL/SQL取得メソッドを使用してカスタム・ファクタを作成することもできます。ただし、ほとんどの場合に、SYS_CONTEXT PL/SQLファンクションが使用できます。これにより、データベースですぐに利用できる最も一般的に使用されるファクタに対するルールを作成します。Session_User、Proxy_User、Network_Protocol、Moduleなどのファクタは、SYS_CONTEXTファンクションから使用できます。
ファクタには、Oracle Label Securityと組み合せて使用する強力な機能があります。この機能は、コンテキストのパラメータではまだ使用できない、その他のデータベース属性のためのものです。この項では、一般に使用できるファクタを示しますが、そうしたファクタについてはルール定義でSYS_CONTEXTファンクションを使用することをお薦めします。SYS_CONTEXTでは、まだ使用できないファクタのみを作成して使用してください。
次のことに注意してください。
-
ルール・セットのルールとともにファクタを使用できます。
DVFファクタ・ファンクションは、ルール式で使用できるファクタ固有のファンクションです。 -
ファクタには値(アイデンティティ)があり、それぞれのファクタ・タイプによってさらに分類されます。
-
また、Oracle Label Securityラベルを使用してファクタを統合できます。
-
Oracle Database Vaultに作成するファクタ上でレポートを実行できます。
-
CDBルートまたはアプリケーション・ルートではなく、PDBでのみファクタを作成できます。
デフォルトのファクタ
Oracle Database Vaultには一連のデフォルトのファクタが用意されています。
これらのファクタごとに、ファクタの値を取得するファンクションが関連付けられています。
独自のPL/SQL取得メソッドを使用してカスタム・ファクタを作成できます。使用できる便利なPL/SQLファンクション(デフォルト・ファクタの多くに使用される)は、SYS_CONTEXT SQLファンクションで、ユーザー・セッションに関するデータを取得します。たとえば、SYS_CONTEXTのCLIENT_PROGRAM_NAME属性を使用して、データベース・セッションに使用されるプログラムの名前を検索できます。カスタム・ファクタを作成すると、デフォルト・ファクタの問合せに使用されるファンクションと同様に値を問い合せることができます。
独自のセキュリティ構成でデフォルトのファクタを使用できます。不要な場合には削除できます。(Oracle Database Vaultによる内部使用には不要です。)
デフォルト・ファクタは次のとおりです。
-
Authentication_Methodは認証方式です。次に、ユーザー・タイプの後に返される方式を続けて示します。-
パスワードで認証されるエンタープライズ・ユーザー、ローカル・データベース・ユーザー、パスワード・ファイルを使用する
SYSDBAまたはSYSOPER管理権限があるユーザー(パスワードを使用するユーザー名によるプロキシ):PASSWORD -
Kerberos認証済のエンタープライズ・ユーザーまたは外部ユーザー(管理者権限なし):
KERBEROS -
Kerberos認証済のエンタープライズ・ユーザー(管理者権限あり):
KERBEROS_GLOBAL -
Kerberos認証済の外部ユーザー(管理者権限あり):
KERBEROS_EXTERNAL -
SSL認証済のエンタープライズ・ユーザーまたは外部ユーザー(管理者権限なし):
SSL -
SSL認証済のエンタープライズ・ユーザー(管理者権限あり):
SSL_GLOBAL -
SSL認証済の外部ユーザー(管理者権限あり):
SSL_EXTERNAL -
RADIUSで認証される外部ユーザー:
RADIUS -
OSで認証される外部ユーザー、または
SYSDBAまたはSYSOPER管理権限があるユーザー:OS -
証明書付きプロキシ、DN、またはパスワードを使用しないユーザー名:
NONE -
バックグラウンド・プロセス(ジョブ・キュー・スレーブ・プロセス):
JOB -
パラレル問合せスレーブ・プロセス:
PQ_SLAVE
非管理接続では、認証方法が
PASSWORD、KERBEROSまたはSSLの場合は、Identification_Typeファクタを使用して外部ユーザーとエンタープライズ・ユーザーを区別できます。管理接続では、PASSWORD、SSL_EXTERNALおよびSSL_GLOBAL認証方式にはAuthentication_Methodファクタで十分です。 -
-
クライアント識別子は、DBMS_SESSION.SET_IDENTIFIERプロシージャ、Oracle Call Interface (OCI)属性OCI_ATTR_CLIENT_IDENTIFIERまたはOracle Dynamic Monitoring Service (DMS)を使用してアプリケーションによって設定された識別子です。様々なOracle Databaseコンポーネントが、この属性を使用して同じデータベース・ユーザーとして認証される軽量アプリケーション・ユーザーを識別します。 -
Client_IPはクライアントが接続されているコンピュータのIPアドレスです。 -
Database_DomainはDB_DOMAIN初期化パラメータで指定されているデータベースのドメインです。 -
Database_Hostnameはインスタンスが実行されているコンピュータのホスト名です。 -
Database_Instanceは現在のインスタンスのインスタンス識別番号です。 -
Database_IPはインスタンスが実行されているコンピュータのIPアドレスです。 -
Database_NameはDB_NAME初期化パラメータで指定されているデータベースの名前です。 -
DBlink_Infoはデータベース・リンク・セッションのソースです。文字列の形式は、次のとおりです。SOURCE_GLOBAL_NAME=dblink_src_global_name,DBLINK_NAME=dblink_name,SOURCE_AUDIT_SESSIONID=dblink_src_audit_sessionid詳細は、次のとおりです。
-
dblink_src_global_name: ソース・データベースの一意のグローバル名 -
dblink_name: ソース・データベースでのデータベース・リンクの名前 -
dblink_src_audit_sessionid:dblink_nameを使用してリモート・データベースへの接続を開始したソース・データベース
-
-
Domainは特定の機密レベルで動作するランタイム環境(ネットワーク化されたIT環境またはそのサブセットなど)の物理、構成または実装固有のファクタの名前付きコレクションです。データベースへのセキュア・アクセス・パス内にあるDatabase Vaultノードのホスト名、IPアドレスおよびデータベース・インスタンス名などのファクタを使用してドメインを識別できます。ドメインを識別するファクタ識別子の組合せを使用して、各ドメインを一意に特定できます。これらの識別ファクタやその他のファクタを使用して、ドメイン内に最大セキュリティ・ラベルを定義できます。これにより、Database Vaultセッションに関する物理ファクタに応じて、データ・アクセスやコマンドを制限できます。必要なドメインの例として、企業機密、内部パブリック、パートナ、顧客があります。 -
Enterprise_Identityはユーザーのエンタープライズ全体のアイデンティティです。-
エンタープライズ・ユーザーの場合: Oracle Internet Directory識別名(DN)。
-
外部ユーザーの場合: 外部アイデンティティ(Kerberosプリンシパル名、RADIUSおよびDCEスキーマ名、オペレーティング・システム・ユーザー名、証明書DN)。
-
ローカル・ユーザーと
SYSDBAログインおよびSYSOPERログインの場合: NULL
属性の値はプロキシ方式によって異なります。
-
DNによるプロキシの場合: クライアントのOracle Internet Directory DN。
-
証明書によるプロキシの場合: 外部ユーザーではクライアントの証明書DN、グローバル・ユーザーではOracle Internet Directory DN。
-
ユーザー名によるプロキシの場合: クライアントがエンタープライズ・ユーザーの場合はOracle Internet Directory DN、クライアントがローカル・データベース・ユーザーの場合はNULL。
-
-
Identification_Typeはデータベースでユーザー・スキーマが作成された方法です。具体的には、CREATE USERおよびALTER USER構文のIDENTIFIED句が反映されます。次に、スキーマ作成時に使用される構文の後に返される識別タイプを続けて示します。-
IDENTIFIED BYpassword:LOCAL -
IDENTIFIED EXTERNALLY:EXTERNAL -
IDENTIFIED GLOBALLY:GLOBAL SHARED -
IDENTIFIED GLOBALLYAS DN:GLOBAL PRIVATE -
GLOBAL EXCLUSIVE(排他的なグローバル・ユーザー・マッピング) -
GLOBAL SHARED(共有ユーザー・マッピング) -
NONE(認証なしでスキーマを作成する場合)
-
-
Langは既存のLANGUAGEパラメータより短い形式の言語名のISO略称です。 -
Languageはセッションで現在使用中の言語と地域、およびデータベース文字セットです。次の形式で示されます。language_territory.characterset
次に例を示します。
AMERICAN_AMERICA.WE8MSWIN1252
-
Machineは現在のセッションを確立したデータベース・クライアントのホスト名です。コンピュータがクライアントまたはサーバー・セッションに使用されていたかどうかを調べる必要がある場合には、この設定をDatabase_Hostnameファクタと比較して特定できます。 -
モジュールは、DBMS_APPLICATION_INFOPL/SQLパッケージまたはOCIを使用して設定されたアプリケーション名(モジュール)です。 -
Network_Protocolは接続文字列のPROTOCOL=protocol部分で指定されている、通信に使用されるネットワーク・プロトコルです。 -
Proxy_Enterprise_Identityはプロキシ・ユーザーがエンタープライズ・ユーザーである場合、Oracle Internet Directory DNです。 -
Proxy_UserはSESSION_USERのかわりに現行セッションを開いたデータベース・ユーザーの名前です。 -
Session_Userは現行ユーザーが認証されたデータベース・ユーザー名です。この値は、セッションを通して同じです。
ファクタの作成
通常、ファクタを作成するには、まずファクタを作成し、ファクタを編集してアイデンティティを含めます。
ファクタへのアイデンティティの追加
新しいファクタを作成したら、ファクタにアイデンティティを追加できます。
- ファクタ・アイデンティティについて
アイデンティティは、IP_Addressファクタ・アイデンティティの192.0.2.4などファクタの実際の値です。 - ファクタ・アイデンティティの動作
ファクタ・アイデンティティはファクタの実際の値です(IP_Addressタイプを使用するファクタのIPアドレスなど)。 - 信頼レベルについて
信頼レベルを使用することにより、信頼できるかどうかの尺度を示す数値を割り当てることができます。 - ラベル・アイデンティティについて
ファクタ・アイデンティティにOracle Label Security(OLS)ラベルを割り当てることができます。 - ファクタ・アイデンティティの作成および構成
既存のファクタに対するファクタ・アイデンティティを作成および構成できます。 - 他のファクタを使用するアイデンティティを構成するためのアイデンティティ・マッピングの使用方法
アイデンティティ・マッピングを使用すると、ファクタのグループを使用してアイデンティティ値を管理できます。 - ファクタ・アイデンティティの変更
DBMS_MACADM.UPDATE_IDENTITYプロシージャを使用すると、ファクタ・アイデンティティを変更できます。 - ファクタ・アイデンティティの削除
ファクタ・アイデンティティの削除前に、そのアイデンティティへの参照を削除する必要があります。
親トピック: ファクタの構成
ファクタ・アイデンティティについて
アイデンティティは、IP_Addressファクタ・アイデンティティの192.0.2.4などファクタの実際の値です。
特定のデータベース・セッションのファクタ・アイデンティティは、DBMS_MACADM.CREATE_FACTORプロシージャのget_exprパラメータ(ファクタ・アイデンティティの取得)およびidentify_byパラメータ(ファクタ・アイデンティティの決定)を使用して、実行時に割り当てます。次のような場合には、さらにアイデンティティを構成できます。
-
ファクタの既知のアイデンティティを定義する場合
-
ファクタ・アイデンティティに信頼レベルを追加する場合
-
ファクタ・アイデンティティにOracle Label Securityラベルを追加する場合
-
アイデンティティ・マップを使用して子ファクタによりファクタ・アイデンティティを解決する場合
親トピック: ファクタへのアイデンティティの追加
ファクタの識別の動作
ファクタ・アイデンティティはファクタの実際の値です(IP_Addressタイプを使用するファクタのIPアドレスなど)。
取得メソッドやアイデンティティ・マップ・ロジックに応じて、1つのファクタに複数のアイデンティティが存在する場合もあります。たとえば、Oracle Real Application Clusters環境ではDatabase_Hostnameなどのファクタには、複数のアイデンティティが存在することがあります。データベース環境では、Client_IPのようなファクタには複数のアイデンティティが存在する場合があります。取得メソッドはデータベース・セッションに基づいているため、これらのタイプのファクタの取得メソッドでは異なる値が返される場合があります。複数のレポートを使用してファクタ・アイデンティティ構成を追跡できます。
次のようにしてファクタの割当てを構成できます。
-
データベース・セッションの確立時にファクタを割り当てます。
-
個々のリクエストを構成してファクタのアイデンティティを取得します。
Oracle Label Security統合を使用すると、Oracle Label Securityラベルでアイデンティティをラベル付けできます。また、アイデンティティに信頼レベルを割り当てることもできます。信頼レベルは、同じファクタの別のアイデンティティと比較した信頼の度合いを示す数値です。一般に、信頼レベルの数値が高く設定されているほど信頼の度合いも高くなります。信頼レベルの数値が負の場合は信頼できません。
データベース・セッション内では、Oracle Database Vault、および次のようなDVFスキーマ(ファクタ値を取得するファンクションを含む)に存在するパブリックからアクセス可能なPL/SQLファンクションのあるアプリケーションで、ファクタに割り当てられたアイデンティティを使用できます。
dvf.f$factor_name
これにより、(PL/SQL、SQL、Oracle仮想プライベート・データベース、トリガーなどを使用して)Oracleデータベース内からファクタのアイデンティティにグローバルにアクセスできます。たとえば、SQL*Plusでは次のようにします。
CONNECT leo_dvowner
Enter password: password
SELECT DVF.F$DATABASE_IP FROM DUAL;
次のような出力が表示されます。
SELECT DVF.F$DATABASE_IP FROM DUAL; F$DATABASE_IP ------------------------------------------------------------- 192.0.2.1
GET_FACTORファンクションを使用して、パブリック・アクセスが可能になっているファクタのアイデンティティを見つけることもできます。次に例を示します。
SELECT GET_FACTOR('DATABASE_IP') FROM DUAL;
次のような出力結果が表示されます。
GET_FACTOR('DATABASE_IP')
-------------------------------------------------------------
192.0.2.1信頼レベルについて
信頼レベルを使用することにより、信頼できるかどうかの尺度を示す数値を割り当てることができます。
信頼値1は信頼度が低いことを意味します。値が大きければ信頼度も高くなります。負の値またはゼロは信頼できないことを意味します。ファクタ取得メソッドにより返されたファクタ・アイデンティティがアイデンティティに定義されていない場合は、Oracle Database Vaultによりそのアイデンティティに自動的に負の信頼レベルが割り当てられます。
実行時にファクタ・アイデンティティの信頼レベルを特定するために、DVSYSスキーマのGET_TRUST_LEVELおよびGET_TRUST_LEVEL_FOR_IDENTITYファンクションを使用できます。
たとえば、Networkという名前のファクタを作成したとします。Networkファクタに次のようなアイデンティティを作成できます。
-
Intranet (信頼レベル
10) -
VPN (仮想プライベート・ネットワーク)(信頼レベル
5) -
Public (信頼レベル
1)
ポリシー決定の基準を信頼レベルに置くルール式(またはカスタム・アプリケーション・コード)を作成できます。たとえば、GET_TRUST_LEVELファンクションを次のように使用して、5より大きい信頼レベルを検出できます。
GET_TRUST_LEVEL('Network') > 5
または、次のようにDBA_DV_IDENTITYデータ・ディクショナリ・ビューでSELECT文を使用して、信頼レベルが5以上のNetworkファクタを検出できます。
SELECT VALUE, TRUST_LEVEL FROM DBA_DV_IDENTITY WHERE TRUST_LEVEL >= 5 AND FACTOR_NAME='Network'
次のような出力が表示されます。
F$NETWORK GET_TRUST_LEVEL('NETWORK')
------------------------------------
VPN 5
INTRANET 10
前の例では、VPNのNetworkファクタ・アイデンティティは信頼されており(値が5)、INTRANETドメインのアイデンティティはより信頼度の高い10です。
関連トピック
親トピック: ファクタへのアイデンティティの追加
ラベル・アイデンティティについて
ファクタ・アイデンティティにOracle Label Security(OLS)ラベルを割り当てることができます。
簡単に説明すると、ラベルはデータベース表の行に権限を割り当てるために行の識別子の役割を果します。DBMS_MACADM.CREATE_FACTORプロシージャまたはDBMS_MACADM.UPDATE_FACTORプロシージャでは、labeled_byパラメータの設定によって、ファクタにDBMS_MACUTL.G_LABELED_BY_SELFとDBMS_MACUTL.G_LABELED_BY_FACTORSのどちらのラベルを付けるかが決まります。labeled_byをDBMS_MACUTL.G_LABELED_BY_SELFに設定すると、ファクタ・アイデンティティにOLSのラベルを関連付けできます。labeled_byをDBMS_MACUTL.G_LABELED_BY_FACTORSに設定すると、Oracle Database Vaultでは、子のファクタ・アイデンティティのラベル付けからファクタ・アイデンティティ・ラベルを導出します。ラベルのある子ファクタ・アイデンティティが複数ある場合は、適用可能なファクタのOracle Label Securityポリシーに関連付けられているOLSアルゴリズムを使用して、Oracle Database Vaultによりラベルがマージされます。
関連トピック
親トピック: ファクタへのアイデンティティの追加
ファクタ・アイデンティティの作成および構成
既存のファクタに対するファクタ・アイデンティティを作成および構成できます。
他のファクタを使用するアイデンティティを構成するためのアイデンティティ・マップの使用方法
アイデンティティ・マッピングを使用してファクタのグループを使用すると、アイデンティティ値を管理できます。
- アイデンティティ・マッピングについて
ファクトリ・アイデンティティを作成している場合、それをマップできます。 - ファクタへのアイデンティティのマッピング
2つのファクタに親子関係を作成すると、ファクタにアイデンティティをマップできます。 - アデンティティ・マップの削除
2つのファクタ間の親子関係を削除するには、アイデンティティ・マップを削除する必要があります。
親トピック: ファクタへのアイデンティティの追加
アイデンティティ・マッピングについて
ファクタ・アイデンティティを作成する間に、そのアイデンティティをマップできます。
アイデンティティ・マッピングは、他(子)のファクタを使用してファクタを識別するプロセスです。これはファクタの組合せをファクタの論理アイデンティティに変換する方法です。また、連続するアイデンティティ値(温度など)や連続しない大きなアイデンティティ値(IPアドレスの範囲など)を論理セットに変換する方法でもあります。アイデンティティのマッピングにおける構成の問題を確認するには、「アイデンティティ構成の問題」レポートを実行します。
親ファクタの別のアイデンティティを構成ファクタの別のアイデンティティにマップできます。たとえば、INTRANETアイデンティティは192.0.2.1から192.0.2.24の範囲のIPアドレスにマップします。REMOTEアイデンティティは、192.0.2.1から192.0.2.24の範囲のアドレスを除くIPアドレスにマップします。
アイデンティティ・マップに基づいて、セキュリティ・ポリシーを作成できます。たとえば、企業ネットワーク(INTRANET)内から接続している従業員とは対照的に、VPN (REMOTE)経由で接続している従業員には少ない権限を定義できます。
アイデンティティ・マッピングの変更が必要な場合は、アイデンティティ・マップを削除してから再作成する必要があります。
ファクタ・アイデンティティの変更
DBMS_MACADM.UPDATE_IDENTITYプロシージャを使用すると、ファクタ・アイデンティティを変更できます。
親トピック: ファクタへのアイデンティティの追加
ファクタの動作
セッションが確立されると、Oracle Database Vaultではファクタが処理されます。
- セッションの確立時のファクタの処理方法
Oracle Database Vaultは、セッションの開始時に基づいてファクタを評価します。 - 取得メソッドの動作方法
「取得メソッド」により、ファクタの識別がメソッドまたは定数によって行われるファクタが識別されます。 - ファクタの取得方法
データベース・セッション内のファクタは、DVFファクタ・ファンクションまたはGET_FACTORファンクションを使用していつでも取得できます。 - ファクタの設定方法
データベース・セッション中はいつでもファクタにアイデンティティを割り当てられますが、ファクタ割当てルール・セットがTrueと評価される場合にかぎります。 - ファクタ監査の動作
統合監査が有効になっているかどうかは、監査がファクタに対してどのように処理されるかに影響します。
親トピック: ファクタの構成
セッション確立時のファクタの処理
セッションが開始した時刻に基づいて、Oracle Database Vaultではファクタが評価されます。
データベース・セッションが確立されると、次のアクションが発生します。
-
各データベース・セッションの開始時に、Oracle Database Vaultは、データベース・インスタンス内のデフォルトおよびユーザー作成のすべてのファクタの評価を開始します。
適用可能な場合、評価はセッションの通常のデータベース認証、およびOracle Label Securityセッション情報の初期化後に開始されます。
-
ファクタの評価段階において、ファクタ初期化プロセスがメソッドまたは定数によって識別されるすべてのファクタの取得メソッドを実行し、セッションのファクタ・アイデンティティを解決します。
ファクタのエラー・オプション設定は、ファクタ初期化プロセスには影響しません。
-
ファクタに検証メソッドが定義されている場合は、Oracle Database Vaultによりその検証メソッドが実行され、ファクタのアイデンティティ(値)が検証されます。検証メソッドが失敗するかFalseが返された場合、ファクタのアイデンティティは未定義(
NULL)です。 -
ファクタにアイデンティティが定義されている場合、Oracle Database Vaultは定義されているアイデンティティに基づいてファクタの信頼レベルを解決します。ファクタのアイデンティティが定義済のアイデンティティのリストに定義されている場合、Oracle Database Vaultは構成されている信頼レベルを割り当てます。そうでない場合は
-1が設定されます。ファクタにアイデンティティが定義されていない場合、信頼レベルは未定義(NULL)になります。 -
ファクタ評価、ファクタ検証および信頼レベル解決の結果により、Database Vaultはファクタ監査構成の指示に従って評価の詳細を監査します。
-
メソッドまたは定数によって識別されるすべてのファクタの評価が完了すると、ファクタ構成アイデンティティに定義されているアイデンティティ・マップを使用して、その他のファクタによって識別されるファクタが解決されます。
ファクタ構成アイデンティティの評価順序は、アイデンティティ値のASCIIソートにより決まります。Oracle Database Vaultは、アルファベット順で最初にソートされたアイデンティティ・マップを使用して評価します。ファクタ
TESTにXおよびYというアイデンティティがあるとします。さらに、アイデンティティXおよびYに、ファクタA、B、Cのアイデンティティに依存するアイデンティティ・マップがある場合、次のマップが行われます。-
A=1およびB=1のときはXがマップされます。 -
A=1、B=1およびC=2のときはYがマップされます。
この場合、最初に評価されるのは
Xです。Yは評価されませんが、TESTファクタの成功に必要な条件にCのマップが一致した場合はどうなるでしょうか。Xの前にYをマップして、A、BおよびCが最初に評価されるように、逆にマップする必要があります。逆にマップするには、YをVという名前(またはXの前にソートされるアルファベット値)に変更します。これにより適切に解決されます。このアルゴリズムはASCIIソートの順序が適切な場合に機能し、アイデンティティは同レベルの同じ番号のファクタをマップします。
-
-
ファクタの初期化が終了すると、Oracle Database VaultのOracle Label Securityとの統合が行われます。
このプロセスが終了すると、Oracle Database Vaultはコマンド・ルールがCONNECTイベントと関連付けられていることを確認します。ルール・セットがCONNECTイベントと関連付けられている場合は、ルール・セットが評価されます。ルール・セットがFalseと評価されるかエラーが戻されると、セッションは終了します。セッションが終了する前に、ルール・セットに関連付けられた監査またはコール・ハンドラが実行されます。
ノート:
不用意に、他のユーザーをデータベースからロックアウトする可能性があるため、コマンド・ルールをCONNECTイベントに関連付ける際は注意してください。通常、CONNECTのコマンド・ルールを作成する場合は、関連付けられたルール・セットの評価オプションを「いずれかTrue」に設定します。
不用意に他のユーザーをロックアウトした場合は、一時的にOracle Database Vaultを無効にして、CONNECTコマンド・ルールを無効にし、Oracle Database Vaultを再び有効にして、問題の原因となっているファクタ・コードを修正します。これを実行する方法の例は、「テストが失敗した場合」で説明しています。
親トピック: ファクタの動作
取得メソッドの動作
「取得メソッド」により、ファクタの識別がメソッドまたは定数によって行われるファクタが識別されます。
ファクタの識別がファクタによって行われる場合、Oracle Database Vaultはアイデンティティ・マップによってファクタを識別します。独自のPL/SQL取得メソッドを作成するか、Oracle Database Vaultに用意されているファンクションを使用できます。Oracle Database Vaultには、取得メソッドの作成に使用できるファクタ固有のユーティリティ・ファンクションと一般的なユーティリティ・ファンクションが用意されています。
取得メソッドの例として、Oracle Database Vaultが提供するデフォルトのファクタも参照してください。
get_exprパラメータは、次のDBMS_MACADM.CREATE_FACTORまたはDBMS_MACADM.CREATE_UPDATEの設定をidentify_byパラメータに選択すると必須になります。
-
DBMS_MACUTL.G_IDENTIFY_BY_METHOD:get_exprパラメータにメソッドを入力します。 -
DBMS_MACUTL.G_IDENTIFY_BY_CONSTANT:get_exprパラメータに定数を入力します。
ファクタ・アイデンティティとして返される値は、VARCHAR2文字列またはこの型に変換可能である必要があります。
式には、パッケージ・ファンクションまたはスタンドアロン・ファンクションを含めることができます。式がschema.function_nameなどの完全修飾ファンクションであることを確認してください。完全なSQL文は含めないでください。アプリケーション・パッケージまたはファンクションを使用している場合は、オブジェクトのEXECUTE権限のあるDVSYSを指定する必要があります。
次の書式を使用してファンクション・シグネチャを記述します。
FUNCTION GET_FACTOR RETURN VARCHAR2
ファクタの取得
データベース・セッション内のファクタは、DVFファクタ・ファンクションまたはGET_FACTORファンクションを使用していつでも取得できます。
使用可能なファクタのリストを検索するには、DBA_DV_FACTORデータ・ディクショナリ・ビューを問い合せます。
例7-1に、GET_FACTORファンクションの使用例を示します。
例7-1 GET_FACTORを使用したファクタの取得
SELECT GET_FACTOR('client_ip') FROM DUAL;
DVFファクタ・ファンクションまたはGET_FACTORから取得されたファクタ値は、次に示す方法で使用できます。
-
Oracle Database Vaultルール式
-
Oracle Database Vault環境のすべてのデータベース・セッションで使用可能なカスタム・アプリケーション・コード
DBMS_MACADM.CREATE_FACTORまたはDBMS_MACADM.UPDATE_FACTORのeval_optionsパラメータでファクタ評価をDBMS_MACUTL.G_EVAL_ON_SESSIONに設定していると、Oracle Database Vaultは確立したセッション・コンテキストから値を取得します。詳細は、「セッション確立時のファクタの処理」を参照してください。
「セッション確立時のファクタの処理」で説明されているように、ファクタ評価をDBMS_MACUTL.G_EVAL_ON_ACCESSに設定した場合は、ファクタが取得されるたびに、Oracle Database Vaultによりステップ2からステップ5(またはステップ6)が実行されます。
ファクタにエラー・オプションを定義し、エラーが発生した場合には、エラー・メッセージが表示されます。
親トピック: ファクタの動作
ファクタの設定
データベース・セッション中はいつでもファクタにアイデンティティを割り当てられますが、ファクタ割当てルール・セットがTrueと評価される場合にかぎります。
SET_FACTORファンクションを使用することにより、アプリケーション・コード内でこれを実行できます。Javaコードでは、JDBCクラスjava.sql.CallableStatementを使用してこの値を設定できます。次に例を示します。
java.sql.Connection connection ;
...
java.sql.CallableStatement statement =
connection.prepareCall("{call SET_FACTOR('FACTOR_X', ?)}");
statement.setString(1, "MyValue");
boolean result = statement.execute();
...
Oracle Data Provider for .NET(ODP.NET)を使用して記述されたアプリケーションなど、Oracle PL/SQLファンクションの実行が可能なアプリケーションは、このプロシージャを使用できます。
この概念は、ファクタ値の設定時期をルール・セットで制御する機能が追加された標準のOracle DBMS_SESSION.SET_IDENTIFIERプロシージャに似ています。ルール・セットの評価がTrueの場合、「セッション確立時のファクタの処理」のステップ2から5が実行されます。
ファクタに割当てルール・セットを関連付けていない、またはルール・セットでFalse(またはエラー)が返された場合、SET_FACTORファンクションを使用してファクタを設定しようとすると、Oracle Database Vaultによってエラー・メッセージが送信されます。
親トピック: ファクタの動作
ファクタの監査の動作
統合監査が有効になっているかどうかは、監査がファクタに対してどのように処理されるかに影響します。
従来の非統合監査環境では、Oracle Database Vaultは、監査証跡をDVSYS.AUDIT_TRAIL$表に書き込みます。従来の監査は、Oracle Databaseリリース20c以降では非推奨になっている点に注意してください。
統合監査が有効な場合、この設定では監査レコードは取得されません。かわりに、この情報を取得する統合監査ポリシーを作成できます。
ファクタの監査レポートを使用して、生成された監査レコードを表示できます。また、一度に複数の監査オプションを選択できます。各オプションはビット・マスクに変換され、集計の動作を決定するために追加されます。ファクタにエラーがないかぎり、監査のパフォーマンスへの影響はほとんどありません。
関連トピック
親トピック: ファクタの動作
チュートリアル: データベースへの非定型ツール・アクセスの阻止
このチュートリアルでは、ファクタを使用して非定型ツール(SQL*Plusなど)がデータベースにアクセスできないようにする方法を示します。
- このチュートリアルについて
多くのデータベース・アプリケーションには、ユーザーのアクションを明示的に制御する機能が含まれています。 - ステップ1: HRおよびOEユーザー・アカウントの有効化
後でこのチュートリアルでOracle Database VaultコンポーネントをテストするときにHRアカウントとOEアカウントを使用する必要があります。 - ステップ2: ファクタの作成
HRおよびOEアカウントがアクティブであることを確認後、ファクタを作成します。 - ステップ3: ルール・セットおよびルールの作成
ファクタを作成後、ファクタとともに使用するルール・セットおよびルールを作成します。 - ステップ4: CONNECTコマンド・ルールの作成
CONNECTコマンド・ルールは、CONNECTSQL文を制御します。 - ステップ5: 非定期ツール・アクセス制限のテスト
Oracle Database Vaultの変更を有効にするために、SQL*Plusセッションを再起動する必要はありません。 - ステップ6: このチュートリアルのコンポーネントの削除
コンポーネントが不要になった場合、このチュートリアルで作成したコンポーネントを削除できます。
親トピック: ファクタの構成
このチュートリアルについて
多くのデータベース・アプリケーションには、ユーザーのアクションを明示的に制御する機能が含まれています。
ただし、非定型問合せツール(SQL*Plusなど)には、これらの制御機能がないことがあります。このため、ユーザーは非定型ツールを使用して、通常はデータベース・アプリケーションで実行できないアクションを、データベースで実行できる場合があります。Oracle Database Vaultのファクタ、ルール・セットおよびコマンド・ルールを組み合せて使用すると、非定型問合せツールによるデータベースへの不正アクセスを阻止できます。
次のチュートリアルでは、ユーザーHRおよびOEがSQL*Plusを使用するのを阻止します。これを実行するには、システム上でアプリケーションを検索するファクタと、これら4ユーザーにSQL*Plusを制限するためのルールおよびルール・セットを作成する必要があります。次に、ルール・セットに関連付けられるCONNECT SQL文のコマンド・ルールを作成します。このファクタ、Client_Prog_NameはSYS_CONTEXT SQLファンクションのUSERENV名前空間のCLIENT_PROGRAM_NAME属性を使用して、Oracle Databaseの現在のインスタンスへのアクセスに使用されるアプリケーションの名前を検索します。SYS_CONTEXT SQLファンクションには、ユーザー・セッションの状態を検出するための便利なメソッドが多数用意されています。SYS_CONTEXTは、カスタム・ファクタを作成するための貴重なツールです。
関連項目:
SYS_CONTEXTファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください
ステップ1: HRおよびOEユーザー・アカウントの有効化
後でこのチュートリアルのためにOracle Database Vaultコンポーネントをテストするときに、HRおよびOEアカウントを使用する必要があります。
関連トピック
ステップ4: CONNECTコマンド・ルールの作成
CONNECTコマンド・ルールは、CONNECT SQL文を制御します。
このコマンド・ルールは、コマンドラインまたはSQL*Plusへのアクセスにサイトで使用されるその他のツールからSQL*Plusにログインする場合にも適用されます。
-
CONNECTコマンド・ルールを次のように作成します。
BEGIN DBMS_MACADM.CREATE_COMMAND_RULE( command => 'CONNECT', rule_set_name => 'Limit SQL*Plus Access', object_owner => '%', object_name => '%', enabled => DBMS_MACUTL.G_YES); END; /
詳細は、次のとおりです。
-
rule_set_nameは、Limit SQL*Plus Accessルール・セットとCONNECTコマンド・ルールを関連付けます。 -
コマンド・ルールがすべてのユーザーに適用されるように、
object_ownerは%に設定されます。 -
コマンド・ルールがすべてのオブジェクトに適用されるように、
object_nameは%に設定されます。 -
enabledはコマンド・ルールをただちに使用できるように有効化します。
ステップ5: 非定期ツール・アクセス制限のテスト
Oracle Database Vaultの変更を有効にするために、SQL*Plusセッションを再起動する必要はありません。
-
SQL*Plusで、ユーザー
HRとしてPDBへの接続を試行します。CONNECT HR@pdb_name Enter password: password
次の出力が表示されます。
ERROR: ORA-47306: 20461: Limit SQL*Plus Access rule set failed
ユーザー
HRは、SQL*Plusの使用を阻止されます。 -
次に、ユーザー
OEとして接続を試行します。CONNECT OE@pdb_name Enter password: password
次の出力が表示されます。
ERROR: ORA-47306: 20461: Limit SQL*Plus Access rule set failed
ユーザー
OEも、SQL*Plusの使用を阻止されます。 -
ここで、ユーザー
SYSTEMとして接続を試行します。CONNECT SYSTEM@pdb_name Enter password: password Connected.
ユーザー
SYSTEMはデータベース・インスタンスにログインできる必要があります。SYS、Database Vault所有者アカウントおよびDatabase Vaultアカウント・マネージャ・アカウントもログインできます。
テストが失敗した場合
SYSTEMとして(またはルール式で指定されているその他の管理ユーザーのいずれかとして)データベース・インスタンスにログインできない場合、SQL*Plusは使用できません。
この問題は、次の方法で対処できます。
ファクタ設計のガイドライン
Oracleでは、ファクタ設計のガイドラインを提供しています。
-
セキュリティまたは外部システムからのセッションに関するその他のコンテキスト情報を統合するには、
UTL_TCP、UTL_HTTP、DBMS_LDAPおよびDBMS_PIPEなどのOracleユーティリティ・パッケージを使用できます。 -
identify_byパラメータがDBMS_MACUTL.G_IDENTIFY_BY_FACTORに設定されている場合は、取得メソッドを指定(DBMS_MACADM.CREATE_FACTORまたはDBMS_MACADM.UPDATE_FACTORのget_exprパラメータを使用)しないでください。取得メソッドは、ファクタがDBMS_MACUTL.G_IDENTIFY_BY_CONSTANTまたはDBMS_MACUTL.G_IDENTIFY_BY_METHODに設定されている場合にのみ必要です。 -
ファクタに割当てルール・セットがある場合は、検証メソッドの使用を検討します。これにより、無効なアイデンティティが発行されないことを検証できます。
-
指定されている値は、クライアント・ソフトウェアが信頼されていて、クライアント・ソフトウェアからの通信チャネルが安全であることがわかっている場合にのみ信頼できるため、クライアント指定のProgram、OS Userおよびその他のファクタは注意して使用します。
-
時間ベースのファクタなど、取得メソッドから返された値が同じセッション内のある呼出しから次の呼出しに変わる可能性がある場合は、
DBMS_MACUTL.G_EVAL_ON_ACCESSの評価オプションeval_optionsのみを指定してください。 -
従来のSQLおよびPL/SQLの最適化技術を使用して、ファクタ取得メソッドに使用されるファンクションの内部ロジックを最適化します。
-
取得メソッドによって返される離散値がわかっている場合は、各値にアイデンティティを定義し、信頼レベルを割り当てられるようにします。ファクタに基づくアプリケーション・ロジックに信頼レベルを使用するにつれ、信頼レベルによりファクタに値が追加されます。
-
通常、より多くのファクタに基づくセキュリティ・ポリシーは、少ないファクタに基づくセキュリティ・ポリシーよりも強力です。別のファクタによって識別される新しいファクタを作成し、アイデンティティ・マップを使用してファクタの組合せを論理グループに保存できます。これにより、ファクタをOracle Label Securityラベルと統合する際の、親ファクタのラベル付けもより簡単になります。
-
Oracle Label Securityを統合しているときには、一般に、
labeled_byパラメータがDBMS_MACUTL.G_LABELED_BY_SELFに設定されているファクタの方が、DBMS_MACUTL.G_LABELED_BY_FACTORSのラベルが付けられたファクタよりも、構成やデバッグが簡単になります。 -
1つ以上のセキュリティ、エンドユーザーまたは環境属性を関連付けられたデータベース・セッションで使用できるように、それらの属性を渡すデータベース・クライアント・アプリケーションを設計できます。これを行うには、属性ごとに1つのファクタを作成し、割当てルール・セットを使用してこれらの属性が割り当てられる場合(特定のWebアプリケーションを指定された名前付きアプリケーション・サーバー・コンピュータで使用するときのみ、など)を制御します。この方法で使用されるOracle Database Vaultファクタは、Oracleプロシージャ
DBMS_SESSION.SET_IDENTIFIERに非常によく似ていますが、設定可能な場合を制御する機能も含まれています。
親トピック: ファクタの構成
ファクタのパフォーマンスへの影響
ファクタの複雑さは、Oracleデータベース・インスタンスのパフォーマンスに影響します。
各ファクタには、検証メソッドや信頼レベルのような処理される要素があります。セッションによって評価されるDatabase_HostnameおよびProxy_Userのようなファクタの場合は、Oracle Database Vaultによりセッションの初期化中にこのプロセスが実行され、その値に対する後続のリクエスト用に結果がキャッシュされます。
デフォルトのファクタは、典型的なセキュリティ・ポリシーで使用される可能性が高いためキャッシュされます。ただし、ルール・セットやその他のコンポーネントなどで5つのファクタしか使用しない場合、別のことに使用できるリソースが残りのファクタにより消費されます。このような場合は、不要なファクタを削除する必要があります。(Oracle Database Vaultでは、これらのファクタを内部的に使用しないため、不要な場合は削除できます。)
ユーザー数が多い場合やアプリケーション・サーバーで接続の作成や切断を頻繁に行う場合、使用されるリソースがシステムのパフォーマンスに影響を与える可能性があります。不要なファクタは削除できます。
システム・パフォーマンスを確認するには、Oracle Enterprise Manager(Oracle Databaseと一緒にデフォルトでインストールされるOracle Enterprise Manager Cloud Controlを含む)、自動ワークロード・リポジトリ(AWR)およびTKPROFなどのツールを実行します。
ファクタに関連するレポートおよびデータ・ディクショナリ・ビュー
Oracle Database Vaultには、ファクタおよびそのアイデンティティに関する情報が表示されるレポートとデータ・ディクショナリ・ビューが用意されています。
表7-1では、Oracle Database Vaultレポートを示します。
表7-1 ファクタおよびアイデンティティに関連するレポート
| レポート | 説明 |
|---|---|
|
「ファクタの監査」レポート |
評価に失敗したファクタの検出など、ファクタが監査されます。 |
|
「ファクタ構成の問題」レポート |
無効なルール・セットまたは不完全のルール・セットなどの構成問題の表示、またはファクタに影響を与える可能性のある問題の監査が行われます。 |
|
「アイデンティティのないファクタ」レポート |
アイデンティティが割り当てられていないファクタが表示されます。 |
|
「アイデンティティ構成の問題」レポート |
無効なラベル・アイデンティティがあるファクタ、またはアイデンティティがマップされていないファクタが表示されます。 |
|
「ルール・セット構成の問題」レポート |
ルールが定義されていないか、有効ではなく、それらを使用するファクタに影響を与える可能性があるルール・セットが表示されます。 |
表7-2に、既存のファクタおよびファクタ・アイデンティティに関する情報を提供するデータ・ディクショナリ・ビューを示します。
表7-2 ファクタおよびファクタ・アイデンティティに使用されるデータ・ディクショナリ・ビュー
| データ・ディクショナリ・ビュー | 説明 |
|---|---|
|
|
現行のデータベース・インスタンス内の既存のファクタが表示されます。 |
|
|
子ファクタの関連によりアイデンティティが決定される各ファクタの関係が表示されます。 |
|
|
システムで使用されているファクタ・タイプの名前および説明が表示されます。 |
|
|
各ファクタのアイデンティティが表示されます。 |
|
|
各ファクタのアイデンティティのマップが表示されます。 |