Data Redactionポリシーの作成方法

この記事では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

カード番号がリダクションされていることが確認できました。