この記事ではOracle Data Redactionのポリシーの作成方法について解説します。
Data Redactionのポリシーとは
Data Redactionのポリシーにはリダクションの対象テーブル、列、リダクション方法などを定義します。
1つのオブジェクト(表、ビュー)に対して1つのポリシーを作成することができます。
ポリシーの設定はDBMS_REDACTプロシージャを使用して行います。
DBMS_REDACT プロシージャ
DBMS_REDACTプロシージャは以下の種類があります。
・DBMS_REDACT.ADD_POLICY:ポリシーを追加します。
・DBMS_REDACT.ALTER_POLICY:ポリシーを変更します。
・DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES:完全リダクションの値を変更します。
・DBMS_REDACT.ENABLE_POLICY:ポリシーを有効化します。
・DBMS_REDACT.DISABLE_POLICY:ポリシーを無効化します。
・DBMS_REDACT.DROP_POLICY:ポリシーを削除します。
ポリシーの作成方法
ポリシーの作成はDBMS_REDACT.ADD_POLICYプロシージャを使用します。
構文は以下の通りです。
DBMS_REDACT.ADD_POLICY (
object_schema IN VARCHAR2 := NULL,
object_name IN VARCHAR2 := NULL,
policy_name IN VARCHAR2,
policy_description IN VARCHAR2 := NULL,
column_name IN VARCHAR2 := NULL,
column_description IN VARCHAR2 := NULL,
function_type IN BINARY_INTEGER := DBMS_REDACT.FULL,
function_parameters IN VARCHAR2 := NULL,
expression IN VARCHAR2,
enable IN BOOLEAN := TRUE,
regexp_pattern IN VARCHAR2 := NULL,
regexp_replace_string IN VARCHAR2 := NULL,
regexp_position IN BINARY_INTEGER :=1,
regexp_occurrence IN BINARY_INTEGER :=0,
regexp_match_parameter IN VARCHAR2 := NULL);
作成例
スキーマ名「TEST」、テーブル名「card」の列「card_no」に対して部分リダクションを設定します。
リダクション形式は「DBMS_REDACT.REDACT_CCN16_F12」を使用します。
これはカード番号に使われる、16桁の番号を最後の4桁以外をリダクションする形式です。
リダクション実施前のテーブルは以下の通りです。
SQL> select * from test.card;
PID NAME CARD_NO
---- ------ -------------------
1 tanaka 1234-5678-1234-5678
ポリシーの作成を実施します。
SQL> BEGIN
2 DBMS_REDACT.ADD_POLICY(
3 object_schema => 'test',
4 object_name => 'card',
5 column_name => 'card_no',
6 policy_name => 'test_redaction',
7 function_type => DBMS_REDACT.PARTIAL,
8 function_parameters => DBMS_REDACT.REDACT_CCN16_F12,
9 expression => '1=1'
10 );
11 END;
12 /
PL/SQLプロシージャが正常に完了しました。
読み取りユーザに切り替えてデータを確認します。
SQL> conn rdtest@xepdb1;
パスワードを入力してください:
接続されました。
SQL> select * from test.card;
PID NAME CARD_NO
---- ------ -------------------
1 tanaka ****-****-****-5678
カード番号がリダクションされていることが確認できました。