内容は次のとおりです。
透過的機密データ保護は、機密情報を保持する列を表から探し出して分類するための手段です。
この機能を使用して、機密データを保持する列をデータベース表で特定し、このデータを分類して、指定されたクラスのこのデータ全体を保護するポリシーを作成できます。この種の機密データの例としては、クレジット・カード番号や社会保障番号などがあります。
TSDPポリシーは、次にOracle Data RedactionまたはOracle Virtual Private Databaseのいずれかの設定を使用して、これらの表の列の機密データを保護します。TSDPポリシーが保護する表の列レベルで適用され、クレジット・カード情報を含むすべてのNUMBER
データ型の列などの特定の列のデータ型を対象とします。分類するすべてのデータの均一のTSDPポリシーを作成して、コンプライアンス規制が変更される場合に必要に応じてこのポリシーを変更できます。オプションで、他のデータベースで使用するTSDPポリシーをエクスポートできます。
TSDPポリシーの利点は多くあります。多数のデータベースを使用する大きい組織全体にTSDPポリシーを簡単に作成および適用できます。これにより、TSDPポリシーが対象とするデータの保護を見積もることが可能なため、監査者にとって非常に便利です。TSDPは、似たセキュリティ制限を持つデータが多くあり、ポリシーをこのすべてのデータに一貫して適用する必要がある政府の環境に特に役立ちます。ポリシーは、リダクション、暗号化、そのアクセスの制御、そのアクセスの監査、監査証跡でのマスクを行うことができます。TSDPを使用しない場合、各リダクション・ポリシー、列レベルの暗号化構成および列ごとの仮想プライベート・データベース・ポリシーを構成する必要があります。
透過的機密データ保護には、次の利点があります。
これらの利点は次のとおりです。
機密データ保護を一度構成して、必要に応じてこの保護をデプロイします。 透過的機密データ保護ポリシーを構成して、実際にターゲット・データを指定することなくどのようにデータのクラス(たとえば、クレジット・カード列など)を保護する必要があるかを指定できます。つまり、透過的機密データ保護ポリシーを作成する場合、保護する実際のターゲット列の参照を含む必要がありません。透過的機密データ保護ポリシーは、データベースの機密列のリストおよび指定された機密タイプのポリシーの関連付けに基づいて、これらのターゲット列を確認します。これは、透過的機密データ保護ポリシーを作成した後に追加の機密データをデータベースに追加する場合に便利です。ポリシーを作成した後、単一の手順で機密データの保護を有効化できます(たとえば、ソース・データベース全体に基づく保護の有効化など)。新しいデータの機密タイプ、機密タイプおよびポリシーの関連付けは、機密データの保護方法を決定します。これによって、新しい機密データが追加される場合、現在の透過的機密データ保護ポリシーの要件を満たしているかぎり、保護を構成する必要がありません。
複数の機密列の保護を管理できます。適切な属性(ソース・データベースの識別、機密タイプ自体、特定のスキーマ、表、列など)に基づいて複数の機密列の保護を有効化または無効化できます。この精度により、データ・セキュリティの上位レベルの制御が提供されます。この機能の設計により、これらのコンプライアンス規制の範囲に該当する大きいデータ・セットの特定のコンプライアンス要件に基づいてデータ・セキュリティを管理できます。個別の列ごとではなく特定のカテゴリに基づいて、データ・セキュリティを構成できます。たとえば、クレジット・カード番号または社会保障番号の保護を構成できますが、このデータを含むデータベースの各列の保護を構成する必要はありません。
Oracle Enterprise Manager Cloud Controlアプリケーション・データ・モデル(ADM)機能を使用して識別された機密列を保護できます。Cloud Control ADM機能を使用して、機密タイプを作成し、機密列のリストで検出できます。次に、このリストの機密列および対応する機密タイプをデータベースにインポートできます。そこから、この情報を使用して、透過的機密データ保護ポリシーを作成および管理できます。
透過的機密データ保護を使用するには、次のPL/SQLパッケージに対するEXECUTE
権限が必要です。
これらの権限は次のとおりです。
機密列および機密タイプをデータベースにインポートして管理できるDBMS_TSDP_MANAGE
。このパッケージのプロシージャは、実行者権限で実行されます。通常、アプリケーション・データベース管理者には、このパッケージの権限が付与されます。
TSDPポリシーの作成に使用されるDBMS_TSDP_PROTECT
。このパッケージのプロシージャは、実行者権限で実行されます。通常、セキュリティ・データベース管理者には、このパッケージの権限が付与されます。
データ・リダクション・ポリシーを作成する場合のDBMS_REDACT
。通常、セキュリティ・データベース管理者には、このパッケージの権限が付与されます。
Oracle Virtual Private Database機能をTSDPポリシーに組み込む場合のDBMS_RLS
。通常、セキュリティ・データベース管理者には、このパッケージの権限が付与されます。
業務分離を強化するために、アプリケーション・データベース管理者がTSDPポリシー作成の1つの領域(DBMS_TSDP_MANAGE
パッケージの場合と同様)を制御するか、セキュリティ・データベース管理者(DBMS_TSDP_PROTECT
、DBMS_REDACT
およびDBMS_RLS
パッケージ用)が制御できるように、これらのパッケージが設計されています。
マルチテナント環境では、TSDPポリシーを現在のPDBのみに適用できます。
TSDPポリシーをマルチテナント・コンテナ・データベース(CDB)全体に適用することはできません。これは、コンテナで使用するために、TSDPポリシーが現在のPDBでユーザーが作成したオブジェクト用に設計されているためです。DBA_TSDP_POLICY_FEATUREデータ・ディクショナリ・ビューを問い合せて、TSDPポリシー、および関連付けられているセキュリティ機能のリストを確認できます。すべてのPDBを検索するには、DBA_PDBSビューを問い合せます。
透過的機密データ保護ポリシーを作成する前に、機密タイプを作成し、保護が必要な機密列を確認して、機密列をADMからデータベースにインポートする必要があります。
内容は次のとおりです。
機密タイプは、機密として指定するデータのクラスです。
たとえば、すべてのクレジット・カード番号のcredit_card_type
機密タイプを作成できます。
機密タイプを作成するには、Enterprise Manager Cloud Controlアプリケーション・データ・モデルから機密タイプを作成するか、DBMS_TSDP_MANAGE.ADD_SENSITIVE_TYPE
PL/SQLプロシージャを使用します。
機密タイプを削除するには、DBMS_TSDP_MANAGE.DROP_SENSITIVE_TYPE
プロシージャを使用します。
次に、機密タイプcredit_card_num_type
を作成する例を示します。
BEGIN DBMS_TSDP_MANAGE.ADD_SENSITIVE_TYPE ( sensitive_type => 'credit_card_num_type', user_comment => 'Type for credit card columns using a number data type'); END; /
この例の説明は、次のとおりです。
sensitive_type
: 取得する機密タイプを説明する名前を作成します。この値は大/小文字を区別するので、後で参照する場合は、作成した大/小文字を使用していることを確認してください。DBA_SENSITIVE_COLUMN_TYPES
データ・ディクショナリ・ビューを問い合せて、既存の機密タイプを確認できます。
user_comment
: オプションで、機密タイプの説明を入力します。
関連項目:
アプリケーション・データ・モデルの詳細は、Oracle Database Testingガイドを参照してください。
DBMS_TSDP_MANAGE.ADD_SENSITIVE_TYPE
PL/SQLプロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
機密列を定義したら、保護する列を特定します。
保護する列を識別するには、定義した機密タイプに基づいて、Enterprise Manager Cloud Controlアプリケーション・データ・モデルを使用してこれらの列を識別するか、DBMS_TSDP_MANAGE.ADD_SENSITIVE_COLUMN
プロシージャを使用できます。
データベースの機密列のリストから列を削除するには、DBMS_TSDP_MANAGE.DROP_SENSITIVE_COLUMN
プロシージャを使用します。
次に、ADMからデータベースに機密列リストをインポートします。
アプリケーション・データ・モデルを使用して機密列のリストを作成した場合、DBMS_TSDP_MANAGE.IMPORT_DISCOVERY_RESULT
プロシージャを実行して、このリストをデータベースにインポートします。
DBMS_TSDP_MANAGE.ADD_SENSITIVE_COLUMN
プロシージャを使用してこれらの列を識別した場合、この手順を回避できます。
次に、Cloud Controlアプリケーション・データ・モデルを現在のデータベースにインポートする例を示します。
BEGIN DBMS_TSDP_MANAGE.IMPORT_DISCOVERY_RESULT ( discovery_result => xml_adm_result, discovery_source => 'ADM_Demo'); END; /
この例の説明は、次のとおりです。
discovery_result
は、機密列および関連付けられている機密タイプのリストを表します。このリストはXML形式です。
discover_source
は、discovery_result
設定で参照された機密列のリストを含むアプリケーション・データ・モデルの名前を表します。Enterprise Manager Cloud Controlのデータ検出およびモデリング・ページからアプリケーション・データ・モデルのリストを確認できます。(このページにアクセスするには、「エンタープライズ」メニューから、「クオリティ管理」、「データ検出およびモデリング」の順に選択します。「機密列」タブで、機密列および関連付けられているタイプのリストを確認できます。)
機密列の特定後、アプリケーション・データ・モデルを使用して機密列のリストを作成し、このリストをデータベースにインポートした場合、透過的機密データ保護ポリシーを作成します。
内容は次のとおりです。
DBMS_TSDP_PROTECT.ADD_POLICY
プロシージャは、透過的機密データ保護ポリシーを作成します。
機密列の特定後、アプリケーション・データ・モデルを使用して機密列のリストを作成し、このリストをデータベースにインポートしたら、透過的機密データ保護ポリシーを作成します。透過的機密データ保護ポリシーを作成するには、使用する仮想プライベート・データベースまたはOracle Data Redaction設定にポリシーを構成し、これらの設定をDBMS_TSDP_PROTECT.ADD_POLICY
で定義された透過的機密データ保護ポリシーに適用します。
次の構成要素を持つ無名ブロックを定義して、ポリシーを作成できます。
ポリシーにOracle Data Redactionを使用している場合、部分的なデータ・リダクションなど、使用するデータ・リダクションのタイプの指定
ポリシーにOracle Virtual Private Databaseを使用している場合、使用するVPD設定の指定
ポリシーを有効にする場合にテストする条件。たとえば、ポリシーを有効にする前に満たす必要がある列のデータ型など。
DBMS_TSDP_PROTECT.ADD_POLICY
プロシージャを使用して、これらの構成要素を結合する名前付きの透過的機密データ保護ポリシー
機密タイプが作成された後、SYS
スキーマに配置されます。
部分的な数値データ型ベースのデータ・リダクション・ポリシーを使用する透過的機密データ保護ポリシーを作成できます。
例11-1に、このタイプのポリシーを作成する方法を示します。
ポリシーを作成するには、例11-1に示すように、DBMS_TSDP_PROTECT.ADD_POLICY
プロシージャを使用します。
例11-1 透過的機密データ保護ポリシーの作成
DECLARE redact_feature_options DBMS_TSDP_PROTECT.FEATURE_OPTIONS; policy_conditions DBMS_TSDP_PROTECT.POLICY_CONDITIONS; BEGIN redact_feature_options ('expression') := 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') =''APPUSER'''; redact_feature_options ('function_type') := 'DBMS_REDACT.PARTIAL'; redact_feature_options ('function_parameters') := '0,1,6'; policy_conditions(DBMS_TSDP_PROTECT.DATATYPE) := 'NUMBER'; policy_conditions(DBMS_TSDP_PROTECT.LENGTH) := '16'; DBMS_TSDP_PROTECT.ADD_POLICY ('redact_partial_cc', DBMS_TSDP_PROTECT.REDACT,redact_feature_options, policy_conditions); END; /
この例の説明は、次のとおりです。
redact_feature_options DBMS_TSDP_PROTECT.FEATURE_OPTIONS
は、FEATURE_OPTIONS
データ型を使用する変数redact_feature_options
を作成します。詳細は、Oracle Data Redactionまたは仮想プライベート・データベース機能オプションの設定を参照してください。
policy_conditions DBMS_TSDP_PROTECT.POLICY_CONDITIONS
は、POLICY_CONDITIONS
データ型を使用する変数policy_conditions
を作成します。詳細は、透過的機密データ保護ポリシーの条件の設定を参照してください。
redact_feature_options
の3行目は、データ・リダクション・ポリシー設定をredact_feature_option
変数に書き込みます。この例では、データ・リダクション・ポリシーをユーザーAPPUSER
に適用して、数値データ型の部分的なデータ・リダクションとしてポリシーを定義します。この場合のfunction_parametersパラメータの使用方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。
policy_conditions
の2行目は、TSDPポリシー条件を保護されたNUMBER
データ型の列のpolicy_conditions
変数(つまり、データ型および長さ)に書き込みます。
DBMS_TSDP_PROTECT.ADD_POLICY
は、redact_partial_cc
TSDPポリシーを作成するDBMS_TSDP_PROTECT.ADD_POLICY
プロシージャを実行します。詳細は、DBMS_TSDP_PROTECT.ADD_POLICYプロシージャの指定を参照してください。
VPD用の類似したポリシーの例を確認する場合は、手順4: 透過的機密データ保護ポリシーの作成および有効化を参照してください。
TSDP機能オプションは、透過的機密データ保護ポリシーに使用するOracle Data Redactionまたは仮想プライベート・データベース設定を示します。
Data Redactionの場合、redact_feature_options
変数名を使用して機能オプションを定義し、型にはデータ型VARCHAR2(TSDP_PARAM_MAX
)の結合配列であるDBMS_TSDP_PROTECT.FEATURE_OPTIONS
型を使用する必要があります。DBMS_REDACT.ADD_POLICY
パラメータに対応するパラメータと値のペアでこれらのオプションを初期化します。
たとえば、部分的なデータ・リダクションを使用するTSDPポリシーを指定する場合、例11-1に次のパラメータと値のペアを示します。
redact_feature_options ('function_type') := 'DBMS_REDACT.PARTIAL';
保護された列の数値データ型を使用する部分的なデータ・リダクション・ポリシーの場合、例11-1では、次の追加のパラメータと値のペアを指定しています。
redact_feature_options ('expression') := 'expression'; redact_feature_options ('function_parameters') := 'values';
同様に、仮想プライベート・データベースの場合、vpd_feature_options
変数を使用して、VPD機能オプションを定義します。例:
vpd_feature_options ('statement_types') := 'SELECT, INSERT, UPDATE, DELETE';
関連項目:
データ・リダクション・ポリシー作成パラメータの詳細は、『Oracle Database Advanced Securityガイド』を参照してください
使用できるVPDパラメータの詳細は、TSDPポリシーに使用されるDBMS_RLS.ADD_POLICYパラメータを参照してください
オプションで、透過的機密データ保護ポリシーの条件を指定できます。
ただし、条件を省略する場合、DECLARE
変数の次の行を引き続き含む必要があります。(この場合、policy_conditions
のデフォルト値は、空の結合配列です。)
policy_conditions SYS.DBMS_TSDP_PROTECT.POLICY_CONDITIONS;
条件を定義するには、policy_conditions
変数名を使用し、型にはデータ型VARCHAR2(TSDP_PARAM_MAX)
の結合配列であるDBMS_TSDP_PROTECT.POLICY_CONDITIONS
型を使用します。2つの条件が単一のターゲット機密列で満たされていることを確認します。ターゲット列のプロパティは、列に適用する対応するDBMS_TSDP_PROTECT.FEATURE_OPTIONS
設定のすべての条件プロパティを満たす必要があります
例11-1は、次のポリシー条件を示しています。
policy_conditions(DBMS_TSDP_PROTECT.DATATYPE) := 'NUMBER'; policy_conditions(DBMS_TSDP_PROTECT.LENGTH) := '16';
オプションで、POLICY_CONDITIONS
設定の次の1つ以上のキーを指定できます。
DBMS_TSDP_PROTECT.DATATYPE
では、データ型を指定できます。
DBMS_TSDP_PROTECT.LENGTH
では、DBMS_TSDP_PROTECT.DATATYPE
キーのデータ型の長さを指定できます。
DBMS_TSDP_PROTECT.PARENT_SCHEMA
では、ポリシーを特定のスキーマに制限できます。この設定を省略すると、ポリシーはデータベースのすべてのスキーマに適用されます。
DBMS_TSDP_PROTECT.PARENT_TABLE
では、ポリシーをDBMS_TSDP_PROTECT.PARENT_SCHEMA
キーで指定された表に制限できます。この設定を省略すると、ポリシーは指定されたスキーマ内のすべての表に適用されます。
DBMS_TSDP_PROTECT.ADD_POLICY
プロシージャでTSDPポリシーに名前を付与し、FEATURE_OPTIONS
およびPOLICY_CONDITIONS
の設定を実行します。
ポリシーでは、redact_feature_options
とpolicy_conditions
設定が連携します。ポリシーがターゲット・オブジェクトで有効な場合(DBMS_TSDP_PROTECT.ENABLE_PROTECTION
*プロシージャを使用)、redact_feature_options
設定は、対応するpolicy_condition
設定を満たしている場合のみ適用されます。次のパラメータを入力します。
透過的機密データ保護ポリシーの名前を付け、必要な設定を実行するプロシージャを指定するには、次のパラメータを含めます。
policy_name
は、TSDPポリシーの名前を作成します。入力する名前は、作成時に使用された大/小文字の区別が使用され、データベースに格納されます。たとえば、redact_partial_cc
を入力した場合、データベースはredact_partial_cc
ではなくredact_partial_cc
として格納します。
security_feature
は、TSDPポリシーが使用するセキュリティ機能を表します。DBMS_TSDP_PROTECT.REDACT
を入力して、Oracle Data Redactionを指定します。
policy_enable_options
は、DBMS_TSDP_PROTECT.FEATURE_OPTIONS
型に定義された変数を表します。
policy_apply_condition
は、DBMS_TSDP_PROTECT.POLICY_CONDITIONS
型に定義された変数を表します。
例11-1は、次のポリシー・セットを示しています。
DBMS_TSDP_PROTECT.ADD_POLICY('redact_partial_cc', DBMS_TSDP_PROTECT.REDACT, redact_feature_options, policy_conditions);
保護されるソースの現在のデータベース、特定の表の列または特定の列タイプに対して透過的機密データ保護ポリシーを有効にすることができます。
内容は次のとおりです。
保護されるソースの現在のデータベースに対して透過的機密データ保護を有効にすることができます。
保護を無効化する必要がある場合、DBMS_TSDP_PROTECT.DISABLE_PROTECTION_SOURCE
プロシージャを実行します。
このタイプの保護を有効にするには、DBMS_TSDP_PROTECT.ENABLE_PROTECTION_SOURCE
プロシージャを実行します。
次に、orders_db
データベースの透過的機密データ保護ポリシーを有効化する例を示します。
BEGIN DBMS_TSDP_PROTECT.ENABLE_PROTECTION_SOURCE( discovery_source => 'orders_db'); END; /
表の特定の列に対して透過的機密データ保護を有効にすることができます。
表ごとに1つのポリシーのみ有効化できることに注意してください。保護を無効化する必要がある場合、DBMS_TSDP_PROTECT.DISABLE_PROTECTION_COLUMN
プロシージャを実行します。
このタイプの保護を有効にするには、DBMS_TSDP_PROTECT.ENABLE_PROTECTION_COLUMN
プロシージャを実行します。
次に、特定の表の列の透過的機密データ保護ポリシーredact_partial_cc
を有効化する例を示します。
BEGIN DBMS_TSDP_PROTECT.ENABLE_PROTECTION_COLUMN( schema_name => 'OE', table_name => 'CUST_CC', column_name => 'CREDIT_CARD', policy => 'redact_partial_cc'); END; /
「ORA-45622: ポリシーの強制中に警告が生成されました」
エラーが表示される場合、ポリシーの構成をチェックします。この例では、この列がNUMBER
データ型で長さが16
の場合、redact_partial_cc
ポリシーが列で有効です。OE.CUST_CC.CREDIT_CARD
列がredact_partial_cc
ポリシーに関連付けられていても、この列が条件(データ型および長さ)を満たさない場合はポリシーが無効です。
VARCHAR2
データ型を使用するすべての列など、特定の列タイプに対して透過的機密データ保護を有効にすることができます。
保護を無効化する必要がある場合、DBMS_TSDP_PROTECT.DISABLE_PROTECTION_TYPE
プロシージャを実行します。
このタイプの保護を有効にするには、DBMS_TSDP_PROTECT.ENABLE_PROTECTION_TYPE
プロシージャを実行します。
次に、credit_card_num_type
機密タイプを使用するすべての列の透過的機密データ保護を有効化する例を示します。
BEGIN DBMS_TSDP_PROTECT.ENABLE_PROTECTION_TYPE( sensitive_type => 'credit_card_num_type'); END; /
別のデータベースに対してポリシーをエクスポートまたはインポートできます。
別のデータベースに対してTSDPポリシーをエクスポートまたはインポートするには、Oracle Data Pumpを使用して、ポリシーを含むデータベースのフル・エクスポートまたはインポートを実行します。
エクスポートおよびインポート操作が透過的機密データ保護ポリシーだけでなくデータベース全体に適用されるので注意してください。
関連項目:
Oracle Data Pumpの使用方法の詳細は、『Oracle Databaseユーティリティ』を参照してください。
Oracle Database Vault環境のOracle Data Pumpの使用の詳細は、『Oracle Database Vault管理者ガイド』を参照してください。
DBMS_TSDP_PROTECT.ALTER_POLICY
プロシージャで、TSDPポリシーを変更できます。
DBA_TSDP_POLICY_FEATURE
データ・ディクショナリ・ビューを問い合せて、既存のポリシーおよび保護定義のリストを確認できます。
透過的機密データ保護ポリシーを変更するには、DBMS_TSDP_PROTECT.ALTER_POLICY
プロシージャを使用します。
次に、既存の透過的機密データ保護ポリシーを変更する例を示します。
DECLARE redact_feature_options SYS.DBMS_TSDP_PROTECT.FEATURE_OPTIONS; policy_conditions SYS.DBMS_TSDP_PROTECT.POLICY_CONDITIONS; BEGIN redact_feature_options ('expression') := 'SYS_CONTEXT(''USERENV'',''SESSION_ USER'') =''APPUSER'''; redact_feature_options ('function_type') := 'DBMS_REDACT.PARTIAL'; redact_feature_options ('function_parameters') := '9,1,6'; policy_conditions(DBMS_TSDP_PROTECT.DATATYPE) := 'NUMBER'; policy_conditions(DBMS_TSDP_PROTECT.LENGTH) := '22'; DBMS_TSDP_PROTECT.ALTER_POLICY ('redact_partial_cc', redact_feature_options, policy_conditions); END; /
この例の説明は、次のとおりです。
redact_feature_options SYS.DBMS_TSDP_PROTECT.FEATURE_OPTIONS
は、FEATURE_OPTIONS
データ型を使用する変数redact_feature_options
を作成します。
policy_conditions SYS.DBMS_TSDP_PROTECT.POLICY_CONDITIONS
は、POLICY_CONDITIONS
データ型を使用する変数policy_conditions
を作成します。
redact_feature_options ... redact_feature_options
は、データ・リダクション・ポリシー設定をredact_feature_option
変数に書き込みます。この例では、データ・リダクション・ポリシーをユーザーAPPUSER
に適用して、数値データ型の部分的なデータ・リダクションとしてポリシーを定義します。この場合のfunction_parameters
パラメータの使用方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。
policy_conditions ... policy_conditions
は、TSDPポリシー条件を保護されたNUMBER
データ型の列のpolicy_conditions
変数(つまり、データ型および長さ)に書き込みます。
DBMS_TSDP_PROTECT.ALTER_POLICY ...
は、redact_partial_cc
TSDPポリシーを変更してredact_feature_options
およびpolicy_conditions
変数に設定された定義を使用するDBMS_TSDP_PROTECT.ALTER_POLICY
プロシージャを実行します。
TSDPポリシー全体を削除するか、またはポリシーから条件有効オプションの組合せを削除できます。
ポリシーが1つの条件有効オプションの組合せのみ持つ場合、Oracle Databaseはポリシー全体を削除します。削除する前にポリシーを無効化する必要はありませんが、関連付けられている機密列、機密タイプの順に削除する必要があります。
事前定義のREDACT_AUDIT
ポリシーを使用してバインド値をマスクできます。これは、イベントの設定時にトレース・ファイルに表示されます。
内容は次のとおりです。
事前定義のREDACT_AUDIT
透過的機密データ保護ポリシーはバインド値をマスクします。
SQL文で使用されるバインド変数のバインド値は、監査の構成時に監査レコードに表示できます。同様に、バインド値は、適切なイベントの設定時にトレース・ファイルに表示できます。V$SQL_BIND_DATA
動的ビューを問い合せる場合、バインド値も表示できます。
REDACT_AUDIT
透過的機密データ保護ポリシーは、監査レコード、トレース・ファイルおよびV$SQL_BIND_DATA
ビューの問合せでアスタリスク(*
)としてデータを表示します。デフォルトでは、REDACT_AUDIT
ポリシーがデータベースの機密タイプに関連付けられます。機密として列を識別する場合、デフォルトではREDACT_AUDIT
ポリシーが有効です。
REDACT_AUDIT
ポリシーを無効化および有効化できますが、変更または削除できません。
バインド変数は、条件やSELECT
アイテム、INSERT
またはUPDATE
操作のある機密列の使用に影響します。
内容は次のとおりです。
WHERE
句を含むSQL問合せに機密列を含めることができます。
WHERE
句を含むSQL問合せには、比較演算子(=
、IS
、IS NOT
、LIKE
、BETWEEN
、IN
など)とともに使用したり、副問合せで使用する機密列およびバインド変数を含めることができます。
次の比較問合せでは、VAR1
および機密列SALARY
が比較条件>
を使用して比較される式に表示されているため、VAR1
のバインド値がマスクされます。
SELECT EMPLOYEE_ID FROM HR.EMPLOYEES WHERE SALARY > :VAR1;
次の問合せでは、VAR1
、VAR2
および機密列SALARY
が比較等価条件=
を使用する式に表示されているため、VAR1
およびVAR2
のバインド値がマスクされます。
SELECT EMPLOYEE_ID FROM HR.EMPLOYEES WHERE SALARY + :VAR1 = TO_NUMBER(:VAR2, '9G999D99');
浮動小数点条件の場合、機密列およびバインド変数が評価される式に表示されます。次の例では、VAR1
および機密列SALARY
がIS NOT NAN
条件の式に表示されているため、VAR1
のバインド値がマスクされます。
SELECT COUNT( ) FROM HR.EMPLOYEES WHERE (SALARY * :VAR1) IS NOT NAN;
パターン一致条件では、機密列およびバインド変数が引数として表示されます。次の例では、VAR1
および機密列LAST_NAME
がLIKE
条件の引数であるため、VAR1
のバインド値がマスクされます。
SELECT LAST_NAME FROM HR.EMPLOYEES WHERE LAST_NAME LIKE :VAR1;
BETWEEN
条件の場合、機密列およびバインド変数が引数である式に表示されます。次の例では、VAR1
、VAR2
およびSALARY
がBETWEEN
条件の引数である式に表示されているため、VAR1
およびVAR2
のバインド値がマスクされます。
SELECT EMPLOYEE_ID FROM HR.EMPLOYEES WHERE SALARY BETWEEN :VAR1 AND :VAR2;
次の例では、機密列およびバインド変数がIN
条件の引数です。ここでは、VAR1
、VAR2
および機密列SALARY
がIN
条件の引数として表示されているため、VAR1
およびVAR2
のバインド値がマスクされます。
SELECT COUNT( ) FROM HR.EMPLOYEES WHERE SALARY IN ( :VAR1, :VAR2);
条件に引数としてネストされた副問合せがある場合、ネストされた副問合せに表示されるバインド変数および機密列は条件に関連付けられているとみなされません。次の問合せでは、機密列SALARY
列および副問合せは、次より大きい条件>
の式です。
SELECT EMPLOYEE_ID FROM HR.EMPLOYEES WHERE SALARY > (SELECT SALARY FROM HR.EMPLOYEES WHERE MANAGER_ID = :VAR1);
ただし、変数VAR1
およびMANAGER_ID
が条件=
を使用して比較される式に表示されるため、変数VAR1
が列MANAGER_ID
に関連付けられます。MANAGER_ID
が機密列ではないため、変数VAR1
は機密とみなされません。変数VAR1
は、機密列SALARY
と関連付けられているとみなされません。
論理条件、モデル条件、多重集合条件、XML条件、複合条件、IS OF
型条件およびEXISTS
条件の場合、バインド変数および機密列が相互に関連付けられることはありません。これは、これらの条件の構造または性質のためです。
SELECT
項目の列が機密である場合、SELECT
項目のすべてのバインドが機密とみなされます。
たとえば、HR.EMPLOYEES.SALARY
およびHR.EMPLOYEES.COMMISSION_PCT
が機密列であるとします。次の問合せでは、機密列SALARY
と同じSELECT
項目に表示されているため、バインド変数VAR1
が機密とみなされ、バインド値がマスクされます。
SELECT (SALARY * :VAR1) AS BONUS AS FROM HR.EMPLOYEES WHERE EMPLOYEE_ID = :VAR2;
次の例では、SALARY
と同じSELECT
項目に表示されているため、バインド変数VAR1
が機密とみなされます。機密列COMMISSION_PCT
と同じSELECT
項目に表示されているため、VAR2
が機密とみなされます。
SELECT (SALARY * :VAR1), (COMMISSION_PCT * :VAR2), (EMPNO + :VAR3) AS BONUS AS FROM PAYROLL.ACCOUNT;
複数のバインド変数を1つのINSERT
またはUPDATE
文の異なる列に割り当てることができます。
次のINSERT
文を考えてみます。
INSERT INTO PAYROLL.ACCOUNT (ACCOUNT_NUM, SALARY) VALUES (:VAR1 * :VAR2 , :VAR3);
このINSERT
文では、次が発生します。
バインド変数VAR1
およびVAR2
が式(:VAR1 * :VAR2
)に表示され、機密列ACCOUNT_NUM
に割り当てられます。
バインド変数VAR3
が機密列SALARY
に割り当てられます。
次のUPDATE
文を考えてみます。
UPDATE PAYROLL.ACCOUNT SET ACCOUNT_NUM = :VAR1, SALARY = :VAR2;
このUPDATE
文では、次が発生します。
バインド変数VAR1
が機密列ACCOUNT_NUM
に割り当てられます。
バインド変数VAR2
が機密列SALARY
に割り当てられます。
ビューの列が機密列を参照する場合、ビューの問合せに表示されるバインド変数が機密とみなされます。
たとえば、HR.EMPLOYEES
表のSALARY
列を機密と識別するとします。次に、ビューEMPLOYEES_VIEW
を次のように作成します。
CREATE OR REPLACE VIEW HR.EMPLOYEES_VIEW AS SELECT * FROM HR.EMPLOYEES;
ユーザーがSQL文でこのビューからSALARY
列を参照する場合、SALARY
列に関連付けられているバインド変数が機密とみなされ、バインド値がマスクされます。
SELECT EMPLOYEE_ID FROM HR.EMPLOYEES_VIEW WHERE SALARY = :VAR1;
この場合、機密列HR.EMPLOYEES.SALARY
を参照するHR.EMPLOYEES_VIEW.SALARY
列に関連付けられているため、バインド変数VAR1
がマスクされます。
デフォルトでは、REDACT_AUDIT
ポリシーがすべての機密列に有効です。
特定の機密列またはすべての機密列に対して無効化できますが、必要に応じて再度有効化できます。REDACT_AUDIT
ポリシーを変更または削除できないことに注意してください。
REDACT_AUDIT
ポリシーを無効化するには、DBMS_TSDP_PROTECT.DISABLE_PROTECTION_COLUMN
プロシージャを使用します。
次に、HR.EMPLOYEES
のSALARY
列のREDACT_AUDIT
ポリシーを無効化する例を示します。
BEGIN DBMS_TSDP_PROTECT.DISABLE_PROTECTION_COLUMN( schema_name => 'HR', table_name => 'EMPLOYEES', column_name => 'SALARY', policy => 'REDACT_AUDIT'); END; /
次の例は、現在のデータベースのすべての機密列のREDACT_AUDIT
ポリシーを無効化する方法を示します。
BEGIN DBMS_TSDP_PROTECT.DISABLE_PROTECTION_COLUMN( policy => 'REDACT_AUDIT'); END; /
特定の機密列、またはデータベース内のすべての列に対してREDACT_AUDIT
ポリシーを有効化できます。
REDACT_AUDIT
ポリシーを有効化するには、DBMS_TSDP_PROTECT.DISABLE_PROTECTION_COLUMN
プロシージャを使用します。
次に、HR.EMPLOYEES
のSALARY
列のREDACT_AUDIT
ポリシーを再有効化する例を示します。
BEGIN DBMS_TSDP_PROTECT.ENABLE_PROTECTION_COLUMN( schema_name => 'HR', table_name => 'EMPLOYEES', column_name => 'SALARY', policy => 'REDACT_AUDIT'); END; /
次の例は、現在のデータベースのすべての機密列のREDACT_AUDIT
ポリシーを有効化する方法を示します。
BEGIN DBMS_TSDP_PROTECT.ENSABLE_PROTECTION_COLUMN( policy => 'REDACT_AUDIT'); END; /
Oracle Data Redaction機能を透過的機密データ保護ポリシーで使用できます。
Data Redactionの関数タイプ、関数パラメータおよび式をTSDPポリシーの定義に使用できます。たとえば、TSDPポリシーの有効化を設定して、FULL
またはPARTIAL
データ・リダクションを使用できます。この章では、TSDPポリシーを管理する例としてデータ・リダクションを使用します。
関連項目:
データ・リダクション関数タイプを使用するTSDPポリシーの作成方法の例は、透過的機密データ保護ポリシーの作成を参照してください
Oracle Data Redactionの詳細は、『Oracle Database Advanced Securityガイド』を参照してください。
透過的機密データ保護およびOracle Virtual Private Databaseプロシージャを使用すると、これら2つの機能の保護を組み合せることができます。
内容は次のとおりです。
Oracle Virtual Private Database保護を透過的機密データ保護ポリシーに組み込むには、DBMS_TSDP_PROTECT
およびDBMS_RLS
パッケージを使用する必要があります。
この機能の手順は次のとおりです。
適切な述語を使用して、VPDポリシー関数を作成します。後で、TSDPポリシーを作成する場合、DBMS_TSDP_PROTECT.ADD_POLICY
プロシージャのfeature_options
パラメータにDBMS_RLS.ADD_POLICY
プロシージャのpolicy_function
設定を使用して、このVPDポリシー関数を参照します。
VPD関数の詳細は、動的なWHERE句を生成する関数を参照してください。
VPDポリシー関数と似ている必要なVPD設定を使用して、TSDPポリシーを作成します。
TSDPポリシーは、DBMS_RLS.ADD_POLICY
プロシージャのパラメータ設定を使用して、VPD保護を提供します。表11-1に、これらのパラメータを示します。DBMS_RLS.ADD_GROUPED_POLICY
ポリシーのパラメータはサポートされていないので注意してください。
DBMS_TSDP_PROTECT.ASSOCIATE_POLICY
プロシージャを使用して、TSDPポリシーを必要な機密タイプと関連付けます。
次に、DBMS_TSDP_PROTECT.ENABLE_PROTECTION_
*プロシージャのいずれかを使用して、TSDP保護を有効化します。
TSDPポリシーを有効化します。この時点で、Oracle Databaseは、手順1で作成した関数を使用する内部VPDポリシーを作成します。
内部ポリシーの名前は、ORA$VPD
で始まり、識別子と続きます(たとえば、ORA$VPD_6J6L3RSJSN2VAN0XF
など)。このポリシーは、DBA_POLICIES
データ・ディクショナリ・ビューのPOLICY_NAME
列に問い合せて確認できます。
ユーザーが表を問い合せる場合、列の出力は、現在設定されているVPD保護およびTSDPポリシーに基づきます。
この列のTSDPポリシーを無効化するまで、これらの保護は残ります。この時点で、不要になるため、Oracle Databaseが内部VPDポリシーを自動的に削除します。TSDPポリシーを再度有効化すると、内部VPDポリシーが再作成されます。
Oracle Databaseには、TSDPポリシーの動作を調整するための一連のパラメータが用意されています。
表11-1に、DBMS_TSDP_PROTECT.ADD_POLICY
またはDBMS_TSDP_PROTECT.ALTER_POLICY
プロシージャを使用する場合にFEATURE_OPTIONS
パラメータで許可できるDBMS_RLS.ADD_POLICY
パラメータを示します。
表11-1 TSDPポリシーに使用されるDBMS_RLS.ADD_POLICYパラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
|
ポリシー・ファンクションのスキーマ( |
|
|
ポリシーの述語を生成するファンクションの名前。関数がパッケージ内で定義される場合、パッケージの名前(たとえば、 |
|
|
ポリシーを適用する文タイプ。 |
|
|
文タイプ チェックは、ポリシー定義に含まれているセキュリティ関連の列にのみ適用されます。つまり、ポリシーで定義されているセキュリティ関連の列が |
|
|
この値が |
|
|
デフォルト値の |
|
|
デフォルト値の |
|
|
このパラメータを指定すると、透過的機密データ保護は、
|
|
DBMS_RLS.ADD_POLICY
PL/SQLプロシージャの詳細は、「データベース表、ビューまたはシノニムへのポリシーの付加」も参照してください。
このチュートリアルでは、Oracle Virtual Private Database保護を透過的機密データ保護ポリシーに組み込む方法を示します。
TSDPはOracle VPDポリシー関数を、TSDPポリシーが有効になったときに自動作成されるVPDポリシーに関連付けます。
VPDポリシー関数を作成するには、CREATE OR REPLACE FUNCTION
プロシージャを次のように使用します。
CREATE OR REPLACE FUNCTION vpd_function ( v_schema IN VARCHAR2, v_objname IN VARCHAR2) RETURN VARCHAR2 AS BEGIN RETURN 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''HR_APPUSER'''; END vpd_function; /
Oracle Databaseには、透過的機密データ保護ポリシーに関する情報を表示するデータ・ディクショナリ・ビューが用意されています。
表11-2に、これらのビューを示します。これらのビューを使用する前に、SELECT_CATALOG_ROLE
ロールを付与する必要があります。
表11-2 透過的機密データ保護ビュー
ビュー | 説明 |
---|---|
|
透過的機密データの保護ポリシーに関するインポート情報の検出を説明します。 |
|
現在のデータベースに定義されている機密列のタイプを説明します。 |
|
データベースの機密列を説明します。 |
|
検出結果のインポート中に発生したエラーに関する情報を表示します。エラー・コード、スキーマ名、表名、列名および機密タイプに関する情報を表示します。 |
|
透過的機密データ保護ポリシーおよび条件マッピングを示します。このビューは、条件のプロパティと値のペアもリストします。 |
|
透過的機密データ保護ポリシーのセキュリティ機能マッピングを表示します。(現時点で、Oracle Data RedactionおよびOracle Virtual Private Databaseのみサポートされます。) |
|
透過的機密データ保護ポリシーのパラメータを示します |
|
透過的機密データ保護を通じて保護されている列のリストを表示します |
|
ポリシーと機密列タイプのマッピングを表示します |
関連項目:
これらのビューの詳細は、『Oracle Databaseリファレンス』を参照してください