ファクタを使用すると、クライアントIPアドレスまたはドメインなどの属性に基づいて、Database Vaultの制限を実行するようにできます。
内容は次のとおりです。
ファクタは、データベースのIPアドレスなど、Oracle Database Vaultが認識できる名前付きの変数または属性です。
ファクタは、データベースに接続するためのデータベース・アカウントの認可や、データの可視性および管理性を制限するフィルタ・ロジックの作成などのアクティビティに使用できます。
Oracle Database Vaultには、サイトのドメイン、IPアドレス、データベースなどのコンポーネントに対する制御を設定できる様々なファクタが用意されています。独自のPL/SQL取得メソッドを使用してカスタム・ファクタを作成することもできます。
次の点に注意してください。
ルール・セットのルールとともにファクタを使用できます。DVF
ファクタ・ファンクションは、ルール式で使用できるファクタ固有のファンクションです。
ファクタには値(アイデンティティ)があり、それぞれのファクタ・タイプによってさらに分類されます。ファクタ・タイプの詳細は、「ファクタ作成のための「一般」ページの入力」の「ファクタ・タイプ」を参照してください。
また、Oracle Label Securityラベルを使用してファクタを統合できます。
Oracle Database Vaultに作成するファクタ上でレポートを実行できます。詳細情報を参照してください。
この章では、Oracle Database Vault Administratorを使用してファクタを構成する方法を説明します。また、Oracle Database VaultのファクタAPIを使用して、ファクタを構成することもできます。
Oracle Database Vaultには、デフォルトのファクタが用意されています。
これらのファクタごとに、ファクタの値を取得するファンクションが関連付けられています。これらのファンクションのリストは、「Oracle Database VaultのDVF PL/SQLファクタ・ファンクション」を参照してください。
独自のPL/SQL取得メソッドを使用してカスタム・ファクタを作成できます。使用できる便利なPL/SQLファンクション(デフォルト・ファクタの多くに使用される)は、SYS_CONTEXT
SQLファンクションで、ユーザー・セッションに関するデータを取得します。たとえば、SYS_CONTEXT
のCLIENT_PROGRAM_NAME
属性を使用して、データベース・セッションに使用されるプログラムの名前を検索できます。カスタム・ファクタを作成すると、デフォルト・ファクタの問合せに使用されるファンクションと同様に値を問い合せることができます。
SYS_CONTEXT
ファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
独自のセキュリティ構成でデフォルトのファクタを使用できます。不要な場合には削除できます。(Oracle Database Vaultによる内部使用には不要です。)
デフォルト・ファクタは次のとおりです。
Authentication_Method: 認証方式です。次に、ユーザー・タイプの後に返される方式を続けて示します。
パスワードで認証されるエンタープライズ・ユーザー、ローカル・データベース・ユーザー、またはパスワード・ファイルを使用するSYSDBA
/SYSOPER
(パスワードを使用するユーザー名によるプロキシ): PASSWORD
Kerberosで認証されるエンタープライズ・ユーザーまたは外部ユーザー: KERBEROS
SSLで認証されるエンタープライズ・ユーザーまたは外部ユーザー: SSL
RADIUSで認証される外部ユーザー: RADIUS
オペレーティング・システムで認証される外部ユーザーまたはSYSDBA
/SYSOPER
: OS
DCEで認証される外部ユーザー: DCE
証明書、識別名(DN)またはパスワードを使用しないユーザー名によるプロキシ: NONE
認証方式がパスワード、KerberosまたはSSLの場合、IDENTIFICATION_TYPE
を使用して外部ユーザーとエンタープライズ・ユーザーを区別できます。
Client_IP: クライアントが接続されているコンピュータのIPアドレスです。
Database_Domain: DB_DOMAIN
初期化パラメータに指定されているデータベースのドメインです。
Database_Hostname: インスタンスが実行されているコンピュータのホスト名です。
Database_Instance: 現在のインスタンスのインスタンス識別番号です。
Database_IP: インスタンスが実行されているコンピュータのIPアドレスです。
Database_Name: DB_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
/ALTER USER
構文のIDENTIFIED
句が反映されます。次に、スキーマ作成時に使用される構文の後に返される識別タイプを続けて示します。
IDENTIFIED BY
password
: LOCAL
IDENTIFIED EXTERNALLY
: EXTERNAL
IDENTIFIED GLOBALLY
: GLOBAL SHARED
IDENTIFIED GLOBALLY
AS DN
: GLOBAL PRIVATE
Lang: 既存のLANGUAGE
パラメータより短い形式の言語名のISO略称です。
Language: セッションで現在使用中の言語と地域、およびデータベース・キャラクタ・セットです。次の形式で示されます。
language_territory.characterset
次に例を示します。
AMERICAN_AMERICA.WE8MSWIN1252
言語、地域およびキャラクタ・セットの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
Machine: 現在のセッションを確立したデータベース・クライアントのホスト名です。コンピュータがクライアントまたはサーバー・セッションに使用されていたかどうかを調べる必要がある場合には、この設定をDatabase_Hostnameファクタと比較して特定できます。
Network_Protocol: 接続文字列のPROTOCOL=protocol
部分に指定されている、通信に使用されるネットワーク・プロトコルです。
Proxy_Enterprise_Identity: プロキシ・ユーザーがエンタープライズ・ユーザーである場合、Oracle Internet Directory DNです。
Proxy_User: SESSION_USER
にかわって現行セッションを開いたデータベース・ユーザーの名前です。
Session_User: 現行ユーザーが認証されたデータベース・ユーザー名です。この値は、セッションを通して同じです。
「一般」ページでは、名前などの、ファクタの一般的な識別情報を入力する必要があります。
「一般」ページで、次の情報を入力します。
名前: 28文字以内(大/小文字混在、空白なし)で名前を入力します。Oracle Database Vaultにより、選択されたファクタの名前に基づいてDVF
スキーマに作成されるファクタ・ファンクションの有効なOracle識別子が作成されます。たとえば、GetNetworkIP
という名前のファクタを作成した場合、Oracle Database VaultによりDVF.F$GETNETWORKIP
ファンクションが作成されます。この属性は必須です。
名前は名詞で始まり、導出値の簡単な説明で終わることをお薦めします。
DVF
ファクタ・ファンクションについては、「Oracle Database VaultのDVF PL/SQLファクタ・ファンクション」で説明します。
説明: ファクタの説明テキストを入力します。大/小文字の両方を使用して1024文字以内で指定できます。この属性はオプションです。
ファクタ・タイプ: リストから、ファクタのタイプまたはカテゴリを選択します。この属性は必須です。
ファクタ・タイプには名前と説明があり、ファクタ分類の目的でのみ使用されます。ファクタ・タイプは、ファクタの分類に使用されるカテゴリ名です。デフォルトの物理ファクタ・タイプには、認証方式、ホスト名、ホストIPアドレス、インスタンス識別子およびデータベース・アカウント情報などが含まれます。時間や認証方式などのインストールされたファクタ・タイプに加え、アプリケーション名や証明書情報などのユーザー定義のファクタ・タイプも作成できます。
特定のファクタ・タイプに関連付けられているファクタは、DVSYS.DBA_DV_FACTOR
データ・ディクショナリ・ビューに問い合せることで参照できます。次に例を示します。
SELECT NAME FROM DVSYS.DBA_DV_FACTOR WHERE FACTOR_TYPE_NAME='Authentication Method';
出力結果は次のようになります。
NAME ------------------------------ Network_Protocol Authentication_Method Identification_Type
「構成」ページは、ファクタの識別や評価方法などの設定を定義します。
内容は次のとおりです。
「ファクタの識別」で、ファクタのアイデンティティの解決方法を選択する必要があります。
「構成」ページの「ファクタの識別」で、次の情報を入力します。
メソッド別: 「取得メソッド」フィールドに指定されたPL/SQL式を実行して、ファクタ・アイデンティティを設定します。
たとえば、式でシステム日付を取得するとします。
to_char(sysdate,'yyyy-mm-dd')
2014年12月15日の場合、「メソッド」オプションで次の値が返されます。
2014-12-15
定数: 「取得メソッド」フィールドで検出された定数値を取得してファクタ・アイデンティティを解決します。
ファクタ: 子ファクタのアイデンティティを親ファクタにマップすることでファクタ・アイデンティティを特定します。親ファクタは、子ファクタと呼ばれる第2のファクタに基づいて値が解決されるファクタです。リレーションシップを確立するには、アイデンティティをマップします。(このオプションに取得メソッド式を指定する必要はありません。)
アイデンティティのマップの詳細は、「他のファクタを使用するアイデンティティを構成するためのアイデンティティ・マップの使用方法」を参照してください。
ファクタ・アイデンティティはファクタの実際の値です(IP_Addressタイプを使用するファクタのIPアドレスなど)。
取得メソッドやアイデンティティ・マップ・ロジックに応じて、1つのファクタに複数のアイデンティティが存在する場合もあります。たとえば、Oracle Real Application Clusters環境ではDatabase_Hostnameなどのファクタには、複数のアイデンティティが存在することがあります。RDBMS環境では、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
DVSYS.GET_FACTOR
ファンクションを使用して、パブリックからのアクセスが可能になったファクタのアイデンティティを検出することもできます。次に例を示します。
SELECT DVSYS.GET_FACTOR('DATABASE_IP') FROM DUAL;
次のような出力結果が表示されます。
GET_FACTOR('DATABASE_IP') ------------------------------------------------------------- 192.0.2.1
関連項目:
ファクタ・アイデンティティの詳細は、「ファクタへのアイデンティティの追加」を参照してください
「評価」で、ファクタの評価方法とアイデンティティの割当て方法を選択する必要があります。
セッション・ファクタのパフォーマンスへの影響の詳細は、「ファクタのパフォーマンスへの影響」を参照してください。この属性は必須です。
「構成」ページの「評価」で、次の情報を入力します。
セッション: データベース・セッションの作成時にファクタを評価します。
アクセス: データベース・セッションが初めて作成された際や、ファクタがアクセスされる(アプリケーションによる参照など)たびにファクタが評価されます。
起動時: データベース・セッションの起動時にファクタを評価します。
「ファクタ・ラベリング」で、ファクタ・アイデンティティによるOracle Label Security(OLS)ラベルの取得方法を選択する必要があります。
Oracle Label Security統合を使用する場合は、この設定が適用されます。OLSラベルを使用する場合、この属性は必須です。(OLSラベルとファクタの統合については、「Oracle Database VaultとOracle Label Securityの統合」も参照)。
「構成」ページの「ファクタ・ラベリング」で、次の情報を入力します。
自己: Oracle Label Securityポリシーに関連付けられているラベルから直接ファクタのアイデンティティをラベル付けします。
ファクタ: 子ファクタ・ラベルが複数ある場合は、適用可能なOracle Label Securityポリシーに関連付けられているOracle Label Securityのアルゴリズムを使用してOracle Database Vaultによりラベルがマージされます。適用可能なそれぞれのOracle Label Securityポリシーに対して、ファクタ・アイデンティティはラベルを割り当てることができます。
「取得メソッド」に、ファクタのアイデンティティを取得するPL/SQL式または定数を入力する必要があります。
「構成」ページの「取得メソッド」で、PL/SQLの取得メソッドを入力します。大/小文字混在で最大255文字まで使用できます。
次の取得メソッドでは、ユーザー・セッションのUSERENV
名前空間からデータベース名(DB_NAME)を取得することで、DB_NAMEファクタの値が設定されます。
UPPER(SYS_CONTEXT('USERENV','DB_NAME'))
「取得メソッド」により、ファクタの識別がメソッドまたは定数によって行われるファクタが識別されます。
ファクタの識別がファクタによって行われる場合、Oracle Database Vaultはアイデンティティ・マップによってファクタを識別します。独自のPL/SQL取得メソッドを作成するか、Oracle Database Vaultに用意されているファンクションを使用できます。取得メソッドの作成に使用可能な、ファクタに固有の一般的なユーティリティ・ファンクションについては、次の項を参照してください。
取得メソッドの例として、Oracle Database Vaultが提供するデフォルトのファクタも参照してください。これらのファクタの説明は、「デフォルトのファクタ」を参照してください。
「ファクタの識別」で次の設定を選択した場合、「取得メソッド」フィールドは必須です。
メソッド: 「取得メソッド」フィールドにメソッドを入力します。
定数: 「取得メソッド」フィールドに定数を入力します。
ファクタ・アイデンティティとして返される値は、VARCHAR2
文字列またはこの型に変換可能である必要があります。
式には、パッケージ・ファンクションまたはスタンドアロン・ファンクションを含めることができます。式がschema
.function_name
などの完全修飾ファンクションであることを確認してください。完全なSQL文は含めないでください。アプリケーション・パッケージまたはファンクションを使用している場合は、オブジェクトのGRANT EXECUTE
権限のあるDVSYS
を指定する必要があります。
次の書式を使用してファンクション・シグネチャを記述します。
FUNCTION GET_FACTOR RETURN VARCHAR2
検証メソッドは、PL/SQL式を使って、ファクタのアイデンティティを検証するためのブール値を返します。
「検証メソッド」で、ブール値(TRUE
またはFALSE
)を返すPL/SQL式を入力し、(DVSYS.GET_FACTOR
ファンクションで)取得されるファクタのアイデンティティまたは(DVSYS.SET_FACTOR
ファンクションで)ファクタに割り当てられる値を検証する必要があります。
取得または割り当てられる値に対してメソッドがFalseと評価されると、ファクタ・アイデンティティはNULLに設定されます。このオプションの機能により、ファクタが正しく取得および設定されることがさらに確実になります。このフィールドには、大/小文字混在で最大で255文字まで入力できます。
式には、パッケージ・ファンクションまたはスタンドアロン・ファンクションを含めることができます。式がschema
.function_name
などの完全修飾ファンクションであることを確認してください。完全なSQL文は含めないでください。アプリケーション・パッケージまたはファンクションを使用している場合は、オブジェクトのGRANT EXECUTE
権限のあるDVSYS
を指定する必要があります。
「構成」ページの「検証メソッド」で、次の形式のいずれかを使用するファンクションを作成します。
FUNCTION
IS_VALID
RETURN BOOLEAN
この書式では、ファンクション・ロジック内のDVF.F$
factor_name
ファンクションを使用できます。セッションによって評価されるファクタに適しています。
FUNCTION
IS_VALID
(
p_factor_value
VARCHAR2
)
RETURN BOOLEAN
この書式では、ファクタ値が検証ファンクションに直接渡されます。これは、アクセスごとに評価するファクタに適しています。また、セッションごとに評価するファクタにも有効です。
関連項目:
検証メソッドの作成に使用可能な、ファクタに固有の一般的なユーティリティ・ファンクションについては、次の項を参照してください。
「オプション」ページは、ファクタへのルール・セットの割り当て、エラー・オプションの設定、および非統合監査環境における監査オプションの設定を行います。
内容は次のとおりです。
ファクタ・アイデンティティの設定をルール・セットによって制御する場合は、「割当てルール・セット」でルール・セットを選択します。
たとえば、ルール・セットを使用して、既知のアプリケーション・サーバーまたはプログラムからデータベース・セッションが発生する時期を決定できます。ルール・セットの作成方法は、「ルール・セットの構成」で説明しています。
「オプション」ページの「ルール・セットの割当て」で、リストからルール・セットを選択します。
この属性は、JDBC接続プールを使用するWebアプリケーションなどのデータベース・アプリケーションで、現在のデータベース・セッションに対するファクタ・アイデンティティを動的に設定する必要がある場合に特に有用です。たとえば、Webアプリケーションで、そのWebアプリケーションにログインするデータベース・アカウントの地理的位置を割り当てる場合があります。これを行うために、WebアプリケーションではJDBCコール可能文またはOracle Data Provider for .NET (ODP.NET)を使用して、PL/SQLファンクションDVSYS.SET_FACTOR
を実行できます。次に例を示します。
BEGIN DVSYS.SET_FACTOR('GEO_STATE','VIRGINIA'); END;
その後、GEO_STATEファクタの割当てルールを作成し、その他のファクタまたはルール式に基づいてGEO_STATEファクタの設定を許可または禁止できます。詳細は、「ファクタの設定」を参照してください。
「エラー・オプション」で、ファクタ・アイデンティティを解決できない場合に行わなければならないる処理を設定する必要があります。
「オプション」ページの「エラー・オプション」で、次の値から選択します。
エラー・メッセージの表示: データベース・セッションに対するエラー・メッセージを表示します。
エラー・メッセージを表示しない: エラー・メッセージは表示されません。
「エラー・メッセージを表示しない」を選択して監査を有効にする利点は、潜在的な侵入者のアクティビティを追跡できるということです。監査レポートにより侵入者のアクティビティを把握できますが、エラー・メッセージが表示されないため、侵入者は監査が行われていることに気付きません。
新規ファクタを作成すると、アイデンティティを構成できます。これを実行するには、ファクタを編集してアイデンティティを追加します。
統合監査環境を使用していない場合は、「監査オプション」で監査証跡を生成します。
「オプション」ページの「監査オプション」で、次の値から選択します。
行わない: 監査は実行されません。
常時: ファクタの評価時には、常に監査レコードが作成されます。次に説明する条件から選択できます。
場合による: 1つ以上の条件に基づいて監査レコードが作成されます。「場合による」を選択すると、デフォルトで「取得エラー」および「取得がNULL」オプションが選択されます。
次に示した条件から選択できます。
「常時」および「場合による」オプションに選択できる条件は次のとおりです。
取得エラー: エラー(No data found
、Too many rows
など)のため、ファクタのアイデンティティを解決および割当てできない場合に、監査レコードを作成します。
取得がNULL: ファクタのアイデンティティがNULL
に解決された場合に、監査レコードが作成されます。
検証エラー: 検証メソッド(存在する場合)でエラーが返された場合に、監査レコードが作成されます。
検証がFalse: 検証メソッド(存在する場合)でFALSE
が返された場合に、監査レコードが作成されます。
信頼レベルがNULL: ファクタの解決されたアイデンティティに割り当てられている信頼レベルがNULL
の場合に、監査レコードが作成されます。
信頼レベルの詳細は、「ファクタ・アイデンティティの作成および構成」を参照してください。
信頼レベルがゼロ未満: ファクタの解決されたアイデンティティに割り当てられている信頼レベルがゼロ未満の場合に、監査レコードが作成されます。
統合監査が有効になっているかどうかは、監査がファクタに対してどのように処理されるかに影響します。
非統合監査環境では、Oracle Database Vaultは、監査証跡をDVSYS.AUDIT_TRAIL$
表に書き込みます(「Oracle Database Vaultの監査」を参照)。
統合監査が有効な場合、この設定では監査レコードは取得されません。かわりに、『Oracle Databaseセキュリティ・ガイド』の説明に従い、この情報を取得する監査ポリシーを作成できます。
ファクタの監査レポートを使用して、生成された監査レコードを表示できます。(詳細は、「ファクタに関連するレポートおよびデータ・ディクショナリ・ビュー」を参照)。また、一度に複数の監査オプションを選択できます。各オプションはビット・マスクに変換され、集計の動作を決定するために追加されます。ファクタにエラーがないかぎり、監査のパフォーマンスへの影響はほとんどありません。
新しいファクタを作成したら、ファクタにアイデンティティを追加できます。
内容は次のとおりです。
アイデンティティはファクタの実際の値で、例えばIP_Addressファクタのアイデンティティは192.0.2.4です。
指定されたデータベース・セッションのファクタ・アイデンティティは、「ファクタの作成」で説明されている「ファクタの識別」および「取得メソッド」フィールドを使用して実行時に割り当てられます。次のような場合には、さらにアイデンティティを構成できます。
ファクタの既知のアイデンティティを定義する場合
ファクタ・アイデンティティに信頼レベルを追加する場合
ファクタ・アイデンティティにOracle Label Securityラベルを追加する場合
アイデンティティ・マップを使用して子ファクタによりファクタ・アイデンティティを解決する場合
関連項目:
ファクタ・アイデンティティの作成および使用方法の例は、「チュートリアル: セッション・データに基づくユーザー・アクティビティの制限」を参照してください信頼レベルを使用することにより、信頼できるかどうかの尺度を示す数値を割り当てることができます。
信頼値1は信頼度が低いことを意味します。値が大きければ信頼度も高くなります。負の値またはゼロは信頼できないことを意味します。ファクタ取得メソッドにより返されたファクタ・アイデンティティがアイデンティティに定義されていない場合は、Oracle Database Vaultによりそのアイデンティティに自動的に負の信頼レベルが割り当てられます。
実行時にファクタ・アイデンティティの信頼レベルを特定するために、DVSYS
スキーマのGET_TRUST_LEVEL
およびGET_TRUST_LEVEL_FOR_IDENTITY
ファンクションを使用できます。
たとえば、Networkという名前のファクタを作成したとします。Networkファクタに次のようなアイデンティティを作成できます。
Intranet(信頼レベル10)
VPN(仮想プライベート・ネットワーク)(信頼レベル5)
Public(信頼レベル1)
ポリシー決定の基準を信頼レベルに置くルール式(またはカスタム・アプリケーション・コード)を作成できます。たとえば、DVSYS.GET_TRUST_LEVEL
ファンクションを使用して、5より大きい信頼レベルを検出できます。
DVSYS.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 Database Vaultのファクタ関連のファンクションについては、「Oracle Database VaultレルムのAPI」を参照してください
ファクタ・アイデンティティにOracle Label Security(OLS)ラベルを割り当てることができます。
簡単に説明すると、ラベルはデータベース表の行に権限を割り当てるために行の識別子の役割を果します。ファクタの「ファクタ・ラベリング」属性により、ファクタが「自己」または「ファクタ」のいずれにラベル付けされるかが決まります。「ファクタ・ラベリング」属性に「自己」を設定すると、OLSラベルをファクタ・アイデンティティに関連付けられます。「ファクタ・ラベリング」属性に「ファクタ」を設定すると、Oracle Database Vaultにより子ファクタ・アイデンティティのラベルからファクタ・アイデンティティ・ラベルが導出されます。ラベルのある子ファクタ・アイデンティティが複数ある場合は、適用可能なファクタのOracle Label Securityポリシーに関連付けられているOLSアルゴリズムを使用して、Oracle Database Vaultによりラベルがマージされます。
関連項目:
ラベルの詳細は、『Oracle Label Security管理者ガイド』を参照してください。ファクタ・アイデンティティを削除する場合、ファクタに関連するOracle Database Vaultビューに問い合せることで、そのファクタ・アイデンティティへの参照を特定できます。
詳細は、「Oracle Database Vaultのデータ・ディクショナリ・ビュー」を参照してください。
アイデンティティ・マッピングを使用すると、ファクタのグループを使ってアイデンティティ値を管理することができます。
内容は次のとおりです。
ファクタ・アイデンティティを作成する間に、そのアイデンティティをマップできます。
アイデンティティ・マッピングは、他(子)のファクタを使用してファクタを識別するプロセスです。これはファクタの組合せをファクタの論理アイデンティティに変換する方法です。また、連続するアイデンティティ値(温度など)や連続しない大きなアイデンティティ値(IPアドレスの範囲など)を論理セットに変換する方法でもあります。アイデンティティのマッピングにおける構成の問題を確認するには、「アイデンティティ構成の問題」レポートを実行します。
親ファクタの別のアイデンティティを構成ファクタの別のアイデンティティにマップできます。たとえば、INTRANETアイデンティティは192.0.2.1から192.0.2.24の範囲のIPアドレスにマップします。REMOTEアイデンティティは、192.0.2.1から192.0.2.24の範囲のアドレスを除くIPアドレスにマップします。
アイデンティティ・マップに基づいて、セキュリティ・ポリシーを作成できます。たとえば、企業ネットワーク(INTRANET)内から接続している従業員とは対照的に、VPN(REMOTE)経由で接続している従業員には少ない権限を定義できます。
関連項目:
アイデンティティ・マップの使用方法の例は、「チュートリアル: セッション・データに基づくユーザー・アクティビティの制限」を参照してください2つのファクタに親子関係を作成すると、ファクタにアイデンティティをマップできます。
親ファクタを作成し、「ファクタ」に属性「ファクタの識別」を設定します。
ファクタの作成方法は、「ファクタの作成」で説明しています。
「アイデンティティ」ページで、親ファクタに、新しいファクタ・アイデンティティを作成します。
アイデンティティの作成方法は、「ファクタ・アイデンティティの作成および構成」で説明しています。
親ファクタのファクタとアイデンティティの組合せを、子のファクタとアイデンティティの組合せにマップします。次の手順に従います。
「アイデンティティ」ページで、既存のアイデンティティを選択して「編集」をクリックするか、「新規アイデンティティの追加」をクリックして新しいアイデンティティを作成します。
「新規のアイデンティティとマッピングの追加」ウィンドウで、少なくとも「アイデンティティ」サブページの「値」フィールドが入力されていることを確認します。
「アイデンティティのマップ」サブページをクリックします。
「マッピングの追加」をクリックします。
次の情報を入力します。
子ファクタ名: リストから子ファクタ名を選択します。
演算子: リストから演算子を選択します。
最小値: 最小値を入力します。
最大値: 最大値を入力します。
たとえば、ファクタ・ネットワークへの構成がClient_IP、「演算子」が「BETWEEN
」、「最小値」が192.0.2.1、「最大値」が192.0.2.24に設定されているシナリオを想定します。この場合、クライアントIPアドレスが192.0.2.1から192.0.2.24の指定されたアドレスの範囲内である場合は、親ファクタが事前に定義されたアイデンティティ(INTRANETなど)と評価されます。
「OK」をクリックして、「新規のアイデンティティ・マッピングの追加」ウィンドウを終了します。
「OK」をクリックして、「新規のアイデンティティとマッピングの追加」ウィンドウを終了します。
「完了」、「終了」の順にクリックします。
このプロセスを繰り返して、親ファクタ・アイデンティティの構成ファクタをさらに追加します。たとえば、ProgramファクタがOracle General Ledgerに解決され、Client_IPが192.0.2.1から192.0.2.24の間の場合には、値ACCOUNTING-SENSITIVEに解決するようNetworkファクタを構成できます。そのため、IPアドレスが192.0.2.12のクライアント上で稼働している、認可済の経理金融アプリケーション・プログラムがデータベースにアクセスすると、NetworkファクタはACCOUNTING-SENSITIVEに解決されます。Networkの値がACCOUNTING-SENSITIVEのデータベース・セッションには、Networkの値がINTRANETのデータベース・セッションよりも多くのアクセス権があります。
ファクタを削除する前に、そのファクタへの参照を削除する必要があります。
ファクタに関連するOracle Database Vaultビューを問い合せることで、ファクタとそのアイデンティティへの様々な参照を確認できます。詳細は、「Oracle Database Vaultのデータ・ディクショナリ・ビュー」を参照してください。
セッションが確立されると、Oracle Database Vaultではファクタが処理されます。
セッションが開始した時刻に基づいて、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を再び有効にして、問題の原因となっているファクタ・コードを修正します。これを実行する方法の例は、「テストが失敗した場合」で説明しています。
データベース・セッションのファクタは、DVF
ファクタ・ファンクションまたはDVSYS.GET_FACTOR
ファンクションを使用していつでも取得できます。
使用可能なファクタのリストを検索するには、「DVSYS.DBA_DV_FACTORビュー」で説明する DVSYS.DBA_DV_FACTOR
データ・ディクショナリ・ビューに問い合せます。
例8-1に、DVSYS.GET_FACTOR
ファンクションの使用例を示します。
例8-1 DVSYS.GET_FACTORを使用したファクタの取得
SELECT DVSYS.GET_FACTOR('client_ip') FROM DUAL;
DVF
ファクタ・ファンクションから取得されたファクタ値、またはDVSYS.GET_FACTOR
を次に示す方法で使用できます。
Oracle Database Vaultルール式
Oracle Database Vault環境のすべてのデータベース・セッションで使用可能なカスタム・アプリケーション・コード
DVF
ファクタ・ファンクションについては、「Oracle Database VaultのDVF PL/SQLファクタ・ファンクション」で詳しく説明しています。
「セッション確立時のファクタの処理」で説明されているように、ファクタ評価をセッションに設定した場合は、Oracle Database Vaultにより、確立したセッション・コンテキストから値が取得されます。
「セッション確立時のファクタの処理」で説明されているように、ファクタ評価を「アクセス」に設定した場合は、ファクタが取得されるたびに、Oracle Database Vaultにより手順2から手順5(または手順6)が実行されます。
ファクタにエラー・オプションを定義し、エラーが発生した場合には、エラー・メッセージが表示されます。
データベース・セッション中はいつでもファクタにアイデンティティを割り当てることができますが、ファクタ割り当てルール・セットがTrueと評価される場合に限ります。
DVSYS.SET_FACTOR
ファンクションを使用することにより、アプリケーション・コード内でこれを実行できます。Javaコードでは、JDBCクラスjava.sql.CallableStatement
を使用してこの値を設定できます。次に例を示します。
java.sql.Connection connection ; ... java.sql.CallableStatement statement = connection.prepareCall("{call DVSYS.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(またはエラー)が返された場合、DVSYS.SET_FACTOR
ファンクションを使用してファクタの設定を試行すると、エラー・メッセージが表示されます。
このチュートリアルでは、ファクタを使用して非定型ツール(SQL*Plusなど)がデータベースにアクセスできないようにする方法を示します。
内容は次のとおりです。
関連項目:
ファクタ・アイデンティティのマップの例は、「チュートリアル: セッション・データに基づくユーザー・アクティビティの制限」を参照してください
Oracle Database VaultファクタとOracle Label Securityラベルの統合の例は、「チュートリアル: Oracle Database VaultとOracle Label Securityの統合」を参照してください
多くのデータベース・アプリケーションには、ユーザーのアクションを明示的に制御する機能が含まれています。
ただし、非定型問合せツール(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言語リファレンス』を参照してください
このチュートリアルでOracle Database Vaultコンポーネントをテストする時は、後でHR
アカウントとOE
アカウントを使う必要があります。
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
はコマンド・ルールをただちに使用できるように有効化します。
Oracle Database Vaultの変更を有効にするために、SQL*Plusセッションを再起動する必要はありません。
SQL*Plusで、ユーザーHR
として接続を試行します。
CONNECT HR --Or, CONNECT HR@hrpdb Enter password: password
次のような出力結果が表示されます。
ERROR: ORA-47306: 20461: Limit SQL*Plus Access rule set failed
ユーザーHR
は、SQL*Plusの使用を阻止されます。
次に、ユーザーOE
として接続を試行します。
CONNECT OE --Or, CONNECT OE@hrpdb Enter password: password
次のような出力結果が表示されます。
ERROR: ORA-47306: 20461: Limit SQL*Plus Access rule set failed
ユーザーOE
も、SQL*Plusの使用を阻止されます。
ここで、ユーザーSYSTEM
として接続を試行します。
CONNECT SYSTEM --Or, CONNECT SYSTEM@hrpdb Enter password: password Connected.
ユーザーSYSTEM
はデータベース・インスタンスにログインできる必要があります。SYS
、Database Vault所有者アカウントおよびDatabase Vaultアカウント・マネージャ・アカウントもログインできます。
テストが失敗した場合
SYSTEM
として(またはルール式で指定されているその他の管理ユーザーのいずれかとして)データベース・インスタンスにログインできない場合、SQL*Plusは使用できません。
この問題は、次の方法で対処できます。
このチュートリアルでは、ユーザーが使用しているドメインなど、セッション・データに基づいたユーザー・アクティビティを制限する方法を示します。
内容は次のとおりです。
ファクタ・アイデンティティ・マップを使用して、データベース・アクティビティのセッションベースのユーザー制限を設定できます。
たとえば、次の基準を使用して、データベースへの管理アクセスを制御するとします。
管理者が正しいIPアドレスからデータベースにアクセスしていることを確認する。
データベース・アクセスを管理者の標準勤務時間に制限する。
このような構成は、様々なタイプの管理者(ローカルの内部管理者だけでなく、海外および契約管理者も含む)を制限する場合に便利です。
このチュートリアルでは、管理者が使用しているコンピュータのIPアドレスに基づく、セキュアおよび非セキュアなネットワーク・アクセスのアイデンティティが含まれるように、Domainファクタを変更します。管理者が標準勤務時間外に、あるいは異なるIPアドレスからアクションを実行しようとすると、Oracle Database Vaultはそれを阻止します。
アイデンティティをDomainファクタに追加後、これをClient_IPファクタにマップします。
Oracleでは、ファクタ設計のガイドラインを提供しています。
セキュリティまたは外部システムからのセッションに関するその他のコンテキスト情報を統合するには、UTL_TCP
、UTL_HTTP
、DBMS_LDAP
およびDBMS_PIPE
などのOracleユーティリティ・パッケージを使用できます。
ファクタの識別が「ファクタによる識別」に設定されている場合は、取得メソッドを指定しないでください。取得メソッドが必要なのは、ファクタを「メソッド」または「定数」に設定した場合のみです。
ファクタに割当てルール・セットがある場合は、検証メソッドの使用を検討します。これにより、無効なアイデンティティが発行されないことを検証できます。
指定されている値は、クライアント・ソフトウェアが信頼されていて、クライアント・ソフトウェアからの通信チャネルが安全であることがわかっている場合にのみ信頼できるため、クライアント指定のProgram、OS Userおよびその他のファクタは注意して使用します。
時間ベースのファクタなど、同じセッション内のある起動と次の起動で、取得メソッドによって返される値が変わる可能性がある場合には、「アクセス」評価オプションのみを指定します。
従来のSQLおよびPL/SQLの最適化技術を使用して、ファクタ取得メソッドに使用されるファンクションの内部ロジックを最適化します。パフォーマンスと最適化の詳細は、Oracle Database SQLチューニング・ガイドを参照してください。
取得メソッドによって返される離散値がわかっている場合は、各値にアイデンティティを定義し、信頼レベルを割り当てられるようにします。ファクタに基づくアプリケーション・ロジックに信頼レベルを使用するにつれ、信頼レベルによりファクタに値が追加されます。
通常、より多くのファクタに基づくセキュリティ・ポリシーは、少ないファクタに基づくセキュリティ・ポリシーよりも強力です。別のファクタによって識別される新しいファクタを作成し、アイデンティティ・マップを使用してファクタの組合せを論理グループに保存できます。これにより、ファクタをOracle Label Securityラベルと統合する際の、親ファクタのラベル付けもより簡単になります。(詳細は、「Oracle Database VaultとOracle Label Securityの統合」を参照)。
Oracle Label Securityを統合する際は、ファクタとラベル付けされているファクタよりも、自己とラベル付けされているファクタを構成してデバッグする方が簡単です。
1つ以上のセキュリティ、エンドユーザーまたは環境属性を関連付けられたデータベース・セッションで使用できるように、それらの属性を渡すデータベース・クライアント・アプリケーションを設計できます。これを行うには、属性ごとに1つのファクタを作成し、割当てルール・セットを使用してこれらの属性が割り当てられる場合(特定のWebアプリケーションを指定された名前付きアプリケーション・サーバー・コンピュータで使用するときのみ、など)を制御します。この方法で使用されるOracle Database Vaultファクタは、OracleプロシージャDBMS_SESSION.SET_IDENTIFIER
に非常によく似ていますが、設定可能な場合を制御する機能も含まれています。DBMS_SESSION
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
ファクタの複雑さは、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パフォーマンス・チューニング・ガイド』を参照してください
個々のSQL文およびPL/SQL文の実行を監視するには、『Oracle Database SQLチューニング・ガイド』を参照してください
Oracle Database Vaultには、ファクタおよびそれらのアイデンティティに関する情報を示すレポートとデータ・ディクショナリ・ビューが用意されています。
表8-1に、Oracle Database Vaultレポートを示します。これらのレポートの実行方法の詳細は、「Oracle Database Vaultレポート」を参照してください。
表8-1 ファクタおよびアイデンティティに関連するレポート
レポート | 説明 |
---|---|
評価に失敗したファクタの検出など、ファクタが監査されます。 |
|
無効なルール・セットまたは不完全のルール・セットなどの構成問題の表示、またはファクタに影響を与える可能性のある問題の監査が行われます。 |
|
アイデンティティが割り当てられていないファクタが表示されます。 |
|
無効なラベル・アイデンティティがあるファクタ、またはアイデンティティがマップされていないファクタが表示されます。 |
|
ルールが定義されていないか、有効ではなく、それらを使用するファクタに影響を与える可能性があるルール・セットが表示されます。 |
表8-2に、既存のファクタおよびファクタ・アイデンティティに関する情報を提供するデータ・ディクショナリ・ビューを示します。
表8-2 ファクタおよびファクタ・アイデンティティに使用されるデータ・ディクショナリ・ビュー
データ・ディクショナリ・ビュー | 説明 |
---|---|
現行のデータベース・インスタンス内の既存のファクタが表示されます。 |
|
子ファクタの関連によりアイデンティティが決定される各ファクタの関係が表示されます。 |
|
システムで使用されているファクタ・タイプの名前および説明が表示されます。 |
|
各ファクタのアイデンティティが表示されます。 |
|
各ファクタのアイデンティティのマップが表示されます。 |