Oracle Data Redactionとは、機密データを、リアルタイムでリダクションする機能です。データベースに保存されているデータは変更せずに、問合せの結果に伏字処理を適用します。
機能の詳細については、こちらのマニュアルの記載を参照してください。
本記事では表HR.EMPの列SALにData Redactionによる伏字処理を適用することにより、Data Redactionの効果と実装の流れについて理解します。
作業内容としては、列SALに保存されている数値の先頭3桁を9で置き換えます。
データベース・アクションにユーザーADMINでサインインして、作業を行います。
列SALの先頭3桁の数値を9で置き換えるために、以下のポリシーredact_salを作成します。ポリシーの作成には、プロシージャDBMS_REDACT.ADD_POLICYを呼び出します。
function_typeとしてDBMS_REDACT.PARTIAL、function_parametersとして9,1,3(伏せ字が9で、1から3桁目までを伏字にする)を指定しています。またexpressionとして1=1(つねに真 - NULLでも同様)とし、必ず伏字が行われるようにしています。
伏字処理の方法には色々な種類があります。また適用条件にも、APEXが提供するコンテキスト、Real Application Securityのネームスペースの利用など、多様な構成が可能です。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
begin | |
dbms_redact.add_policy( | |
object_schema => 'HR' | |
, object_name => 'EMP' | |
, column_name => 'SAL' | |
, policy_name => 'redact_sal' | |
, function_type => DBMS_REDACT.PARTIAL | |
, function_parameters => '9,1,3' | |
, expression => '1=1' | |
, policy_description => 'redact first 3 digit of each salary' | |
, column_description => 'redact by number 9' | |
); | |
end; | |
/ |
Data Redactionの設定は以上で完了です。
DBMS_REDACT.ADD_POLICYには引数enableがあります。無指定の場合はTRUEとなり、ポリシー作成後すぐに有効になります。ポリシーの無効化、有効化を行うにはそれぞれプロシージャDBMS_REDACT.DISABLE_POLICYまたはDBMS_REDACT.ENABLE_POLICYを呼び出します。
作成されたData Redactionのポリシーは、ビューREDACTION_POLICIES、REDACTION_EXPRESSIONS、REDACTION_COLUMNSおよびREDACTION_VALUES_FOR_TYPE_FULLより確認できます。
Data Redactionを構成した結果を確認するために、テスト用のAPEXアプリケーションを実行します。
従業員名に以下を指定します。
SCOTT' or '1' = '1
列SALの先頭3桁がつねに9になっていることが確認できます。
後続の作業に影響があるため、作成したポリシーを削除します。プロシージャDBMS_REDACT.DROP_POLICYを呼び出します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
begin | |
dbms_redact.drop_policy( | |
object_schema => 'HR' | |
, object_name => 'EMP' | |
, policy_name => 'redact_sal' | |
); | |
end; | |
/ |