13 Oracle Data Redactionポリシーの構成
Oracle Data Redactionポリシーでは、表の列タイプおよび使用するリダクションのタイプに応じて、列でデータをどのようにリダクションするかを定義します。
- Oracle Data Redactionポリシーについて
Oracle Data Redactionポリシーでは、表またはビューでリダクションが発生する条件を定義します。 - Oracle Data Redactionポリシーを作成できるユーザーは?
データ・リダクションには高機密データの保護が伴うため、信頼できるユーザーのみがOracle Data Redactionポリシーを作成する必要があります。 - データ・リダクション・ポリシーの計画
Oracle Data Redactionポリシーを作成する前に、サイトのニーズに最も適したデータ・リダクション・ポリシーを計画する必要があります。 - DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文
データ・リダクション・ポリシーを作成するには、DBMS_REDACT.ADD_POLICY
プロシージャを使用する必要があります。 - データ・リダクション・ポリシーの条件を定義する式の使用
DBMS_REDACT.ADD_POLICY
プロシージャのexpression
パラメータには、ポリシーが適用される条件を設定します。 - 複数の名前付きポリシー式の作成および管理
名前付きの一元管理されるOracle Data Redactionポリシー式は、複数のリダクション・ポリシーで使用でき、複数の表またはビューに適用できます。 - 完全データ・ポリシーの作成と完全リダクション値の変更
完全リダクション・ポリシーを作成して、データ列のすべての内容をリダクションできます。また、必要に応じて、デフォルトの完全リダクション値を変更できます。 - DBMS_REDACT.NULLIFYリダクション・ポリシーの作成
表またはビューの列の表示された値に対してNULL値を返すOracle Data Redactionポリシーを作成できます。 - 部分リダクション・ポリシーの作成
部分データ・リダクションでは、様々な種類のデータ型についてデータの一部をリダクションできます。 - 正規表現ベースのリダクション・ポリシーの作成
正規表現ベースのリダクション・ポリシーでは、検索置換モデルに基づいてデータをリダクションできます。 - ランダム・リダクション・ポリシーの作成
ランダム・リダクション・ポリシーは、リダクションされたデータをランダムに生成した値(Ukjsl32[[]]]s
など)で表します。 - リダクションを使用しないポリシーの作成
開発環境でポリシーをテストする場合には、まったくリダクションを使用しないポリシーを作成できます。 - Oracle Data Redactionポリシーからのユーザーの除外
アクセスしたデータにOracle Data Redactionポリシーを適用しないように、ユーザーを除外することができます。 - Oracle Data Redactionポリシーの変更
DBMS_REDACT.ALTER_POLICY
プロシージャでは、Oracle Data Redactionポリシーを変更できます。 - 複数列のリダクション
データ・リダクション・ポリシーで2つ以上の列をリダクションできます。 - Oracle Data Redactionポリシーの有効化と無効化
Oracle Data Redactionポリシーは、必要に応じて無効化してから再度有効化できます。 - Oracle Data Redactionポリシーの削除
DBMS_REDACT.DROP_POLICY
プロシージャは、Oracle Data Redactionポリシーを削除します。 - チュートリアル: SQL式を使用したリダクションされた値を含むレポートの作成
SQL式を使用して、Oracle Data Redactionポリシーが定義された列に基づくレポートを作成できます。 - Oracle Data Redactionポリシーのデータ・ディクショナリ・ビュー
Oracle Databaseには、データ・リダクション・ポリシーに関する情報をリストするデータ・ディクショナリ・ビューが用意されています。
親トピック: Oracle Data Redactionの使用
13.1 Oracle Data Redactionポリシーについて
Oracle Data Redactionポリシーでは、表またはビューでリダクションが発生する条件を定義します。
データ・リダクション・ポリシーには、次のような特徴があります。
-
データ・リダクション・ポリシーは、実行するリダクションの種類、リダクションの出現方法およびリダクションを実行するタイミングを定義します。Oracle Databaseは、実行時に、データがアプリケーションに戻される直前にリダクションを実行します。
-
データ・リダクション・ポリシーでは、値の完全なリダクション、部分的なリダクション、ランダムなリダクションが可能です。さらに、テスト環境でポリシーをテストする場合には、データをまったくリダクションしないようにデータ・リダクション・ポリシーを定義することもできます。
-
データ・リダクション・ポリシーは、ポリシー式が
TRUE
またはFALSE
のどちらを返すかに基づいて、異なるアプリケーション・ユーザーにリダクションされたデータまたは実際のデータのいずれかの表示を許可するポリシー式で定義できます。ポリシー式の評価のブール結果がTRUE
であると、リダクションが実行されます。セキュリティ上の理由から、ポリシー式で使用できる関数および演算子は、SYS_CONTEXT
などの少数に限定されています。ユーザー作成関数は使用できません。ポリシー式では、SYS_SESSION_ROLES
名前空間とSYS_CONTEXT
関数を組み合せて使用し、有効なロールを確認できます。 -
異なるデータ・リダクション・ポリシー式を作成し、同じ表またはビュー内の異なる列に対して個別に適用できます。
表13-1に、DBMS_REDACT
パッケージのプロシージャを示します。
表13-1 DBMS_REDACTプロシージャ
プロシージャ | 説明 |
---|---|
|
データ・リダクション・ポリシーを表またはビューに追加します |
|
データ・リダクション・ポリシーを変更します |
|
データ・リダクション・ポリシー式を1つの表またはビューの列に追加します |
|
データ・リダクション・ポリシー式を作成します |
|
データ・リダクション・ポリシーを無効化します |
|
データ・リダクション・ポリシーを削除します |
|
データ・リダクション・ポリシー式を削除します |
|
データ・リダクション・ポリシーを有効化します |
|
指定されたデータ型の完全にリダクションされた値をグローバルに更新します。データベース・インスタンスを再起動すると、更新された値を使用できます。 |
|
データ・リダクション・ポリシー式を更新します |
関連項目:
-
DBMS_REDACT
PL/SQLパッケージの詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください。 -
Oracle Enterprise Manager Cloud Controlを使用してOracle Data Redactionのポリシーと形式を作成および管理する方法の詳細は、Oracle Enterprise ManagerでのOracle Data Redactionポリシーの管理を参照してください。
親トピック: Oracle Data Redactionポリシーの構成
13.2 Oracle Data Redactionポリシーを作成できるユーザーは?
データ・リダクションには高機密データの保護が伴うため、信頼できるユーザーのみがOracle Data Redactionポリシーを作成する必要があります。
リダクション・ポリシーを作成するには、DBMS_REDACT
PL/SQLパッケージに対するEXECUTE
権限が必要です。ユーザーに付与された権限を確認するには、DBA_SYS_PRIVS
データ・ディクショナリ・ビューに問い合せます。
ポリシーで保護される基礎となる表やビューにアクセスする場合、権限は一切必要ありません。
13.3 データ・リダクション・ポリシーの計画
Oracle Data Redactionポリシーを作成する前に、サイトのニーズに最も適したデータ・リダクション・ポリシーを計画する必要があります。
-
DBMS_REDACT
PL/SQLパッケージに対するEXECUTE
権限が付与されていることを確認してください。 -
リダクションする表またはビューの列のデータ型を決定します。
-
データ・リダクション・ポリシーを追加するベース・オブジェクトに依存オブジェクトがあるかどうかを判別します。依存オブジェクトがある場合、これらのオブジェクトは、データ・リダクション・ポリシーがベース・オブジェクトに追加されると無効になり、これらのオブジェクトは、それらが使用されるときに自動的に再コンパイルされます。
または、
ALTER ... COMPILE
文を使用して自分自身で事前に再コンパイルできます。(ベース・オブジェクトにデータ・リダクション・ポリシーを追加することにより)その依存オブジェクトを無効化して、再コンパイルする必要が生じると、システム全体のパフォーマンスが低下する場合があることに注意してください。Oracleでは、依存オブジェクトがあるオブジェクトへのデータ・リダクション・ポリシーの追加は、オフピーク時またはスケジュールされた停止時間中にのみ行うことをお薦めします。 -
この列がOracle Virtual Private Database (VPD) 行フィルタ処理条件で使用されていないことを確認してください。つまり、VPDポリシー関数によって生成されるVPD述語の一部であってはなりません。
-
実行するリダクションのタイプ(完全、ランダム、部分、正規表現またはなし)を決定します。
-
データ・リダクション・ポリシーを適用するユーザーを決定します。
-
この情報に基づいて、
DBMS_REDACT.ADD_POLICY
プロシージャを使用てデータ・リダクション・ポリシーを作成します。 -
リダクションする追加の列を持つようにポリシーを構成します。
データ・リダクション・ポリシーは、作成後、自動的に有効化され、データをリダクションできるようになります。
関連項目
親トピック: Oracle Data Redactionポリシーの構成
13.4 DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文
データ・リダクション・ポリシーを作成するには、DBMS_REDACT.ADD_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);
ここでは次のように指定します。
-
object_schema
: データ・リダクション・ポリシーを適用するオブジェクトのスキーマを指定します。この設定を省略(またはNULL
を入力)する場合、Oracle Databaseは現在のユーザー名を使用します。ここでの「現在のユーザー」の意味は、DBMS_REDACT.ADD_POLICY
プロシージャを呼び出す場所によって変わる場合があることに注意してください。たとえば、ユーザー
mpike
は、ユーザーfbrown
に、mpike
のスキーマ内のmpike.protect_data
という名前の定義者権限のPL/SQLパッケージに対するEXECUTE
権限を付与すると仮定します。このパッケージ内から、mpike
は、protect_cust_data
と呼ばれるプロシージャをコード化し、これにより、DBMS_REDACT.ADD_POLICY
が呼び出されます。ユーザーmpike
は、object_schema
パラメータをNULL
に設定しました。fbrown
がmpike.protect_data
パッケージのprotect_cust_data
プロシージャを呼び出すと、Oracle Databaseは、fbrown
のスキーマのcust_data
オブジェクトではなく、mpike
スキーマのオブジェクトcust_data
の周りにデータ・リダクション・ポリシーを定義しようとします。 -
object_name
: データ・リダクション・ポリシーが適用する表またはビューの名前を指定します。 -
policy_name
: 作成するポリシーの名前を指定します。この名前は、データベース・インスタンス内で必ず一意である必要があります。REDACTION_POLICIES
データ・ディクショナリ・ビューのPOLICY_NAME
列を問い合せることで、既存のデータ・リダクション・ポリシーのリストを検索できます。 -
policy_description
: ポリシーの目的についての簡単な説明を指定します。 -
column_name
: データをリダクションする必要がある列を指定します。次の点に注意してください。-
データ・リダクション・ポリシーを複数の列に適用できます。データ・リダクション・ポリシーを複数の列に適用する場合、
DBMS_REDACT.ADD_POLICY
を使用してポリシーを作成した後、DBMS_REDACT.ALTER_POLICY
プロシージャを必要な回数実行して、必要な残りの列それぞれをポリシーに追加します。Oracle Data Redactionポリシーの変更を参照してください。 -
表またはビューに定義できるポリシーは1つだけです。ただし、表に新しいビューを作成できるため、2つ目のリダクション・ポリシーをこの新しいビューに定義することで、この新しいビューに対して問合せを発行するときに、異なる方法で列をリダクションできます。指定された列のリダクション方法を決める際、Oracle Databaseは、ビュー・チェーンの最初のビューのポリシーを使用します。
-
列を指定しない場合(たとえば、NULLを入力)、いずれの列もポリシーによるリダクションは行われません。これにより、ユーザー自身のポリシーを作成して配置できるようになるため、後で準備ができたときに列の仕様を追加することができます。
-
Oracle Virtual Private Database (VPD)の行フィルタ処理条件で現在使用されている列は使用しないでください。つまり、列は、VPDポリシー関数によって生成されるVPD述語の一部にすることはできません。(VPDでデータ・リダクションを使用する方法の詳細は、Oracle Data RedactionとOracle Virtual Private Databaseを参照してください。)
-
仮想列にデータ・リダクション・ポリシーを定義することはできません。また、任意の仮想列のSQL式に関連する列にデータ・リダクション・ポリシーを定義することもできません。
DBMS_STATS
PL/SQLパッケージを使用してデータベース統計を収集している場合は、列グループの作成時にDBMS_STATS
によって、内部的に非表示の仮想列が表に追加されることに注意してください。その結果、列グループの作成に使用される列でもある列にデータ・リダクション・ポリシーを追加すると、Oracle Databaseは「ORA-28073: 列column_nameにサポートされていないデータ型または属性があります。」
エラーを返します。DBA_STAT_EXTENSIONS
データ・ディクショナリ・ビューへのアクセス権を持つユーザーは、次の問合せを使用してDBA_STAT_EXTENSIONS
のEXTENSION
列を参照して仮想列式(DBMS_STATS
によって内部的に作成される)を検索し、データ・リダクション・ポリシーを作成するためにDBMS_REDACT.ADD_POLICY
コールに指定されている列名が含まれているかどうかを確認できます。SELECT EXTENSION_NAME, EXTENSION, CREATOR FROM DBA_STAT_EXTENSIONS WHERE TABLE_NAME='table_name_that_you_attempted_to_redact';
-
-
column_description
: リダクションする列の簡単な説明を指定します。 -
function_type
: リダクションのタイプを設定するファンクションを指定します。詳細は、次の各項を参照してください。function_type
パラメータを省略する場合、デフォルトのリダクションfunction_type
設定は、DBMS_REDACT.FULL
です。 -
function_parameters
: 部分リダクションのために列のリダクションをどのように表示するかを指定します。部分リダクション・ポリシーを作成する構文を参照してください。 -
expression
: ポリシーの適用方法を決定するブール型SQL式を指定します。リダクションは、ポリシー式がTRUE
と評価された場合にのみ実行されます。データ・リダクション・ポリシーの条件を定義する式の使用を参照してください。デフォルトでは、データ・リダクション・ポリシー式は、その表またはビューに対して定義されているデータ・リダクション・ポリシーに属するすべての列に適用されます。あるいは、個々の列に対してポリシー式を作成して関連付けることにより既存の式をオーバーライドすることもできます。これらの列レベルの式は、名前付きポリシー式と呼ばれます。複数の名前付きポリシー式の作成および管理を参照してください。
-
enable
:TRUE
に設定すると、作成時にポリシーが有効になります。FALSE
に設定すると、無効化されたポリシーとしてポリシーを作成します。デフォルトはTRUE
です。ポリシーを作成した後、そのポリシーを無効化または有効化できます。次の項を参照してください。 -
regexp_pattern
、regexp_replace_string
、regexp_position
、regexp_position
、regexp_occurrence
、regexp_match_parameter
: 正規表現を使用してデータを完全に、または部分的にリダクションできます。実際のデータにregexp_patternに一致するものがない場合は完全リダクションが実行されるので、
regexp_pattern
を指定するときは注意してください。列のすべての値が、使用している正規表現のセマンティクスに一致しているか確認します。詳細は、正規表現ベースのリダクション・ポリシーを作成する構文を参照してください。
親トピック: Oracle Data Redactionポリシーの構成
13.5 データ・リダクション・ポリシーの条件を定義する式の使用
DBMS_REDACT.ADD_POLICY
プロシージャのexpression
パラメータには、ポリシーが適用される条件を設定します。
- データ・リダクション・ポリシーでの式の使用について
DBMS_REDACT.ADD_POLICY
およびDBMS_REDACT.ALTER_POLICY
のexpression
パラメータには、リダクションを有効化するためにTRUE
に評価される必要があるブール式を定義します。 - データ・リダクション式でサポートされているファンクション
特定のタイプのデータ(SYS_CONTEXT
ネームスペースなど)を返すファンクションを使用する式を作成できます。 - ユーザー環境に基づくリダクション・ポリシーの適用
セッション・ユーザー名またはクライアント識別子などユーザーの環境に基づいて、データ・リダクション・ポリシーを適用できます。 - データベース・ロールに基づくリダクション・ポリシーの適用
DBA
ロールなどのデータベース・ロールに基づいて、データ・リダクション・ポリシーを適用できます。 - Oracle Label Securityラベル優位に基づくリダクション・ポリシーの適用
Oracle Label Securityラベルの優位性に基づきデータ・リダクション・ポリシーを適用する条件を設定できます。 - Application Expressセッション・ステートに基づくリダクション・ポリシーの適用
Oracle Application Express (APEX)セッション・ステートに基づいて、データ・リダクション・ポリシーを適用できます。 - すべてのユーザーへのリダクション・ポリシーの適用
フィルタリングを使用しなければ、コンテキストに関係なくポリシーを任意のユーザーに適用できます。
親トピック: Oracle Data Redactionポリシーの構成
13.5.1 データ・リダクション・ポリシーでの式の使用について
DBMS_REDACT.ADD_POLICY
およびDBMS_REDACT.ALTER_POLICY
のexpression
パラメータには、リダクションを有効化するためにTRUE
に評価される必要があるブール式を定義します。
expression
パラメータで定義される式は、Oracle Data Redactionポリシーのデフォルトの式です。データ・リダクション・ポリシーによってリダクションされることになっている列に対して名前付きポリシー式を適用した場合、名前付きポリシー式がデータ・リダクション・ポリシーで定義された式よりも優先されます。
他のOracle Database機能を使用する式を作成できます。たとえば、ユーザーの環境(ファンクションSYS_CONTEXT
およびXS_SYS_CONTEXT
を使用)、文字列ファンクション、Oracle Label Securityのラベル優位ファンクション、またはOracle Application Expressファンクションに基づく式を作成できます。
式を記述する場合は次のガイドラインに従ってください。
-
使用できる演算子は、
AND
、OR
、IN
、NOT IN
、=
、!=
、<>
、<
、>
、>=
、<=
のみです。 -
リダクションの際に式は
TRUE
に評価される必要があるので、NULL
と比較する場合には注意が必要です。SQLでは、値NULL
は定義されていないため、NULL
と比較すると、FALSE
を返す傾向があります。 -
expression
パラメータでユーザー作成ファンクションを使用することはできません。 -
ユーザー
SYS
およびEXEMPT REDACTION POLICY
権限を持つユーザーでは、すべてのデータ・リダクション・ポリシーがバイパスされるため、問合せの結果はリダクションされないことに注意してください。データ・リダクション・ポリシーから除外されるユーザーの詳細は、次のトピックを参照してください。
親トピック: データ・リダクション・ポリシーの条件を定義する式の使用
13.5.2 データ・リダクション式でサポートされているファンクション
特定のタイプのデータを返すファンクション(SYS_CONTEXT
ネームスペースなど)を使用する式を作成できます。
- ネームスペース・ファンクションを使用した式
データ・リダクション式で、ネームスペース・ファンクションSYS_CONTEXT
およびXS_SYS_CONTEXT
を使用できます。 - SUBSTRファンクションを使用した式
データ・リダクション式では、指定した文字列の部分(文字1–3など)を返すSUBSTR
ファンクションを使用できます。最初のパラメータは定数文字列か、SYS_CONTEXT
ファンクションまたはXS_SYS_CONTEXT
ファンクションへのコールである必要があります。 - 文字列の長さファンクションを使用した式
データ・リダクション式では、文字列の長さを返す次のファンクションを使用できます。Oracle Databaseは、これらの演算子の各々への引数が、定数文字列であるか、SYS_CONTEXT
ファンクションまたはXS_SYS_CONTEXT
ファンクションへのコールであるかについても確認します。 - Oracle Application Expressファンクションを使用した式
データ・リダクション式で、Oracle Application Expressファンクションを使用できます。 - Oracle Label Securityファンクションを使用した式
Oracle Label Securityファンクションをデータ・リダクション式とともに使用できます。
親トピック: データ・リダクション・ポリシーの条件を定義する式の使用
13.5.2.1 ネームスペース・ファンクションを使用した式
データ・リダクション式で、ネームスペース・ファンクションSYS_CONTEXT
およびXS_SYS_CONTEXT
を使用できます。
表13-2 ネームスペース・ファンクションを使用した式
ネームスペース・ファンクション | 説明 |
---|---|
|
ネームスペースに関連した値を返します。次のネームスペース・ファンクションが有効です。
|
|
|
関連項目:
-
SYS_CONTEXT
の詳細は、『Oracle Database SQL言語リファレンス』を参照してください -
XS_SYS_CONTEXT
の詳細は、『Oracle Database Real Application Security管理者および開発者ガイド』を参照してください
親トピック: データ・リダクション式でサポートされているファンクション
13.5.2.2 SUBSTRファンクションを使用した式
データ・リダクション式では、指定した文字列の部分を返す(文字1–3など)SUBSTR
ファンクションを使用できます。最初のパラメータは定数文字列か、SYS_CONTEXT
ファンクションまたはXS_SYS_CONTEXT
ファンクションへのコールである必要があります。
表13-3 SUBSTR文字列ファンクションを使用した式
SUBSTR文字列ファンクション | 説明 |
---|---|
|
|
|
入力値の指定された部分をバイトで返します |
|
入力値の指定された部分をUnicodeの完全文字で返します |
|
入力値の指定された部分をUCS2コード・ポイントで返します |
|
入力値の指定された部分をUCS4コード・ポイントで返します |
親トピック: データ・リダクション式でサポートされているファンクション
13.5.2.3 文字列の長さファンクションを使用した式
データ・リダクション式では、文字列の長さを返す次のファンクションを使用できます。Oracle Databaseは、これらの演算子の各々への引数が、定数文字列であるか、SYS_CONTEXT
ファンクションまたはXS_SYS_CONTEXT
ファンクションへのコールであるかについても確認します。
表13-4 文字列ファンクションを使用した式
文字列ファンクション | 説明 |
---|---|
|
入力 |
|
入力値の長さをバイトで返します |
|
入力値の長さをUnicodeの完全文字で返します |
|
入力値の長さをUCS2コード・ポイントで返します |
|
入力値の長さをUCS4コード・ポイントで返します |
親トピック: データ・リダクション式でサポートされているファンクション
13.5.2.4 Oracle Application Expressファンクションを使用した式
データ・リダクション式で、Oracle Application Expressファンクションを使用できます。
表13-5 Oracle Application Expressファンクション
Oracle Application Expressファンクション | 説明 |
---|---|
|
アイテムのセッション・ステートを返します。 |
|
数値項目の数値を返します。 |
関連項目:
Oracle Application Expressファンクションの詳細は、『Oracle Application Express APIリファレンス』を参照してください親トピック: データ・リダクション式でサポートされているファンクション
13.5.2.5 Oracle Label Securityファンクションを使用した式
Oracle Label Securityファンクションをデータ・リダクション式とともに使用できます。
太字のファンクションについては、Oracle Data Redactionが、それらのパラメータが定数であるか、ファンクションSA_UTL.NUMERIC_LABEL
、CHAR_TO_LABEL
、SA_SESSION.LABEL
のいずれかのみへのコールであること、およびこれらのファンクションへの引数が定数であることを確認します。
表13-6 Oracle Label Securityファンクション
Oracle Label Securityファンクション | 説明 |
---|---|
|
Oracle Label Securityポリシーのセッション・ラベルが別のOLSラベルに優位であるか同位であるかを確認します |
|
1つのOLSラベルが2つ目のOLSラベルより優位であるか確認します。 Oracle Database 12cリリース1 (12.1)で非推奨になりました。かわりに、ファンクション |
|
1つのOLSラベルが2つ目のOLSラベルより優位であるか確認します |
|
1つのOLSラベルが2つ目のOLSラベルより優位であるか確認します |
|
1つのOLSラベルが2つ目のOLSラベルより優位であるか確認します |
|
1つのOLSラベルが2つ目のOLSラベルより優位であり、同位ではないかを確認します |
|
1つのOLSラベルが2つ目のOLSラベルより優位であり、同位ではないかを確認します |
|
1つのOLSラベルが2つ目のOLSラベルより優位であり、同位ではないかを確認します。 Oracle Database 12cリリース1 (12.1)で非推奨になりました。かわりに、ファンクション |
|
1つのOLSラベルが2つ目のOLSラベルに優位であるか、または特定のOLSポリシーのセッション・ラベルがOLSラベルに優位であるかを確認します |
|
ユーザーがポリシーで保護されている行を読み取ることができるかどうかをチェックします |
|
現行のセッションOLSラベルを返します |
|
文字列をOLSラベル・タグに変換します |
|
指定したOLSポリシーに関連付けられているラベルを返します |
13.5.3 ユーザー環境に基づくリダクション・ポリシーの適用
セッション・ユーザー名またはクライアント識別子などユーザーの環境に基づいて、データ・リダクション・ポリシーを適用できます。
-
DBMS_REDACT.ADD_POLICY
expression
パラメータでSYS_CONTEXT
ファンクションのUSERENV
名前空間を使用して、ユーザー環境に基づいてポリシーを適用します。
たとえば、セッション・ユーザー名psmith
にのみポリシーを適用するには、次のようにします。
expression => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''PSMITH'''
関連項目:
SYS_CONTEXT
ファンクションで使用できるネームスペースの詳細は、Oracle Database SQL言語リファレンスを参照してください。
親トピック: データ・リダクション・ポリシーの条件を定義する式の使用
13.5.4 データベース・ロールに基づくリダクション・ポリシーの適用
DBA
ロールなどのデータベース・ロールに基づいて、データ・リダクション・ポリシーを適用できます。
-
SYS_CONTEXT
ファンクションのSYS_SESSION_ROLES
名前空間を使用して、ユーザー・ロールに基づいてポリシーを適用します。この名前空間には、各ロールの属性が含まれます。指定されたロールが、問合せを行ったアプリケーション・ユーザーに対して有効化されている場合、属性の値は
TRUE
で、ロールが有効化されていない場合、属性の値はFALSE
です。
たとえば、スーパーバイザのみに実際のデータの表示を許可するとします。次の例では、DBMS_REDACT.ADD_POLICY
expression
パラメータを使用してポリシーを設定し、supervisor
ロールが有効化されているアプリケーション・ユーザーには実際のデータを表示し、他のすべてのアプリケーション・ユーザーにはデータをリダクションする方法を示します。
expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''SUPERVISOR'') = ''FALSE'''
親トピック: データ・リダクション・ポリシーの条件を定義する式の使用
13.5.5 Oracle Label Securityラベル優位に基づくリダクション・ポリシーの適用
Oracle Label Securityラベルの優位性に基づきデータ・リダクション・ポリシーを適用する条件を設定できます。
-
パブリック・スタンドアロン・ファンクション
OLS_LABEL_DOMINATES
を使用して、セッション・ラベルの優位性を確認します。このファンクションは、指定したpolicy_name
値のセッション・ラベルがlabel
パラメータで指定したラベルよりも優位または同位の場合、1
(TRUE
)を戻します。それ以外の場合は0
(FALSE
)を戻します。
たとえば、ポリシーhr_ols_pol
のセッション・ラベルがラベルhs
よりも優位でも同位でもない場合のみデータ・リダクション・ポリシーを適用するには、次のように指定します。
expression => 'OLS_LABEL_DOMINATES (''hr_ols_pol'',''hs'') = 0'
親トピック: データ・リダクション・ポリシーの条件を定義する式の使用
13.5.6 Application Expressセッション・ステートに基づくリダクション・ポリシーの適用
Oracle Application Express (APEX)セッション・ステートに基づいて、データ・リダクション・ポリシーを適用できます。
-
DBMS_REDACT.ADD_POLICY
expression
パラメータで、次に示すパブリックApplication Express APIのいずれかを使用して、Oracle Application Expressのセッション・ステートに基づいてポリシーを適用します。-
V
、APEX_UTIL.GET_SESSION_STATE
ファンクションのシノニムです。 -
NV
、APEX_UTIL.GET_NUMERIC_SESSION_STATE
ファンクションのシノニムです。
-
たとえば、G_JOB
というアプリケーション項目の値がCLERK
となったときにリダクションを発生させるようにDBMS_REDACT.ADD_POLICY
のexpression
パラメータを設定するには次のようにします。
expression => 'V(''APP_USER'') != ''mavis@example.com'' or V(''APP_USER'') is null'
たとえば、これらのようなファンクションを使用することにより、APEXアプリケーションのセッション・ステートに格納されているジョブまたは権限ロールに基づいてデータをリダクションできます。
問合せユーザーがAPEXアプリケーションのコンテキストにないとき(問合せがAPEXフレームワーク外、たとえばSQL*Plusから直接発行されたとき)にリダクションを発生させる場合は、次のようにIS NULL
句を使用します。このポリシー式を使用すると、mavis
というユーザーの問合せがAPEXアプリケーション内部から発行された場合にのみ、このユーザーに実際のデータが表示されます。それ以外の場合、問合せ結果はリダクションされます。
13.5.7 すべてのユーザーへのリダクション・ポリシーの適用
フィルタリングを使用しなければ、コンテキストに関係なくポリシーを任意のユーザーに適用できます。
ただし、ユーザーSYS
およびEXEMPT REDACTION POLICY
権限を持つユーザーは常にOracle Data Redactionポリシーから除外されることに注意してください。
-
SYS
以外のユーザーまたはEXEMPT REDACTION POLICY
権限が付与されていないユーザーにポリシーを適用するには、TRUE
に評価されるDBMS_REDACT.ADD_POLICY
expression
パラメータを記述します。
たとえば:
expression => '1=1'
13.6 複数の名前付きポリシー式の作成および管理
名前付きの一元管理されるOracle Data Redactionポリシー式は、複数のリダクション・ポリシーで使用でき、複数の表またはビューに適用できます。
- 条件を定義するデータ・リダクション・ポリシー式について
名前付きOracle Data Redactionポリシー式は、既存のデータ・リダクション・ポリシーで使用されるポリシー式に代替するものとして機能するよう設計されています。 - 名前付きデータ・リダクション・ポリシー式の作成および適用
DBMS_REDACT.CREATE_POLICY_EXPRESSION
およびDBMS_REDACT.APPLY_POLICY_EXPR_TO_COL
を使用すると、名前付きデータ・リダクション・ポリシー式を作成および適用できます。 - 名前付きデータ・リダクション・ポリシー式の更新
DBMS_REDACT.UPDATE_POLICY_EXPRESSION
プロシージャを使用してデータ・リダクション・ポリシー式を更新できます。更新はただちに行われ、ポリシー式を使用するすべての列に反映されます。 - 名前付きデータ・リダクション式ポリシーの削除
DBMS_REDACT.DROP_POLICY_EXPRESSION
プロシージャを使用してデータ・リダクション式ポリシーを削除できます。 - チュートリアル: 名前付きデータ・リダクション・ポリシー式の作成および共有
このチュートリアルでは、Oracle Data Redactionポリシー式を作成して複数の表に適用し、このポリシー式を集中的に管理する方法を説明します。
親トピック: Oracle Data Redactionポリシーの構成
13.6.1 条件を定義するデータ・リダクション・ポリシー式について
名前付きOracle Data Redactionポリシー式は、既存のデータ・リダクション・ポリシーで使用されるポリシー式に代替するものとして機能するよう設計されています。
名前付きポリシー式では、実行時の条件に基づいてデータをリダクションできます。このポリシーのタイプは、リダイレクション・ポリシーが定義される表またはビューの列でリダクションが行われるかどうかにのみ影響します。デフォルトでは、データ・リダクション・ポリシー式は、その表またはビューに対して定義されているデータ・リダクション・ポリシーに属するすべての列に適用されます。あるいは、表またはビューの個々の列に対してポリシー式を作成して関連付けることもできます。これらの列レベル式は、名前付きポリシー式と呼ばれます。つまり、名前の付いたポリシー式のことです。名前付きポリシー式には次のプロパティがあります。
データ・リダクション・ポリシー式は次の方法で使用できます。
-
1つのデータ・リダクション・ポリシー式を、別々のデータ・リダクション・ポリシーの一部である列に適用することによって、2つ以上のデータ・リダクション・ポリシーで共有できます。
-
各名前付きポリシー式は、同じまたは異なる表またはビューの複数の列に関連付けることができます。
-
各名前付きポリシー式は、同じまたは異なるデータ・リダクション・ポリシー内の列に関連付けることができます。
-
名前付きポリシー式は、関連付けられた列のデフォルトのポリシー式をオーバーライドします。デフォルトのポリシー式は、名前付きポリシー式が適用されていないリダクション列には引き続き適用されます。
-
名前付きポリシー式に対して行われた更新は、式のすべての列関連付けに適用されます。
-
複数の名前付きポリシー式を同じ列に関連付けることはできません。
-
マルチテナント環境では、名前付きポリシー式を異なるプラガブル・データベース(PDB)の列に関連付けることはできません。
名前付きポリシー式を適用する列は、すでにデータ・リダクション・ポリシーでリダクションされている必要があります。名前付きポリシー式が適用された後、列をリダクションするかどうかを判断するときには、その評価の結果がデフォルトのポリシー式よりも優先されます。名前付きポリシー式を変更すると、変更はその式を使用するすべての表およびビューに適用されます。マルチテナント環境では、データ・リダクション・ポリシーと同様、名前付きポリシー式はそれが作成されたPDBにおいてのみ有効で、それが作成されたPDB内のオブジェクトの列にのみ適用できます。
表13-7は、名前付きポリシー式を作成および管理するために使用できるDBMS_REDACT
PL/SQLプロシージャについて説明しています。ポリシー式についての情報を検索するには、REDACTION_EXPRESSIONS
データ・ディクショナリ・ビューを問い合せます。
表13-7 DBMS_REDACTポリシー式プロシージャ
プロシージャ | 説明 |
---|---|
|
データ・リダクション・ポリシー式を作成します |
|
データ・リダクション・ポリシー式を更新します |
|
データ・リダクション・ポリシー式を1つの表またはビューの列に追加します |
|
データ・リダクション・ポリシー式を削除します |
13.6.2 名前付きデータ・リダクション・ポリシー式の作成および適用
DBMS_REDACT.CREATE_POLICY_EXPRESSION
およびDBMS_REDACT.APPLY_POLICY_EXPR_TO_COL
を使用すると、名前付きデータ・リダクション・ポリシー式を作成および適用できます。
親トピック: 複数の名前付きポリシー式の作成および管理
13.6.3 名前付きデータ・リダクション・ポリシー式の更新
DBMS_REDACT.UPDATE_POLICY_EXPRESSION
プロシージャを使用してデータ・リダクション・ポリシー式を更新できます。更新はただちに行われ、ポリシー式を使用するすべての列に反映されます。
REDACTION_EXPRESSIONS
データ・ディクショナリ・ビューを問い合せて、既存のデータ・リダクション・ポリシー式を検索できます。
親トピック: 複数の名前付きポリシー式の作成および管理
13.6.4 名前付きデータ・リダクション式ポリシーの削除
DBMS_REDACT.DROP_POLICY_EXPRESSION
プロシージャを使用してデータ・リダクション式ポリシーを削除できます。
REDACTION_EXPRESSIONS
データ・ディクショナリ・ビューを問い合せて、既存のデータ・リダクション・ポリシー式を検索できます。
親トピック: 複数の名前付きポリシー式の作成および管理
13.6.5 チュートリアル: 名前付きデータ・リダクション・ポリシー式の作成および共有
このチュートリアルでは、Oracle Data Redactionポリシー式を作成して複数の表に適用し、このポリシー式を集中的に管理する方法を説明します。
- ステップ1: このチュートリアル用のユーザーの作成
このチュートリアルでは、Oracle Data Redactionポリシーを作成するdr_admin
と、それらをテストするhr_clerk
の2人のユーザーを作成する必要があります。 - ステップ2: Oracle Data Redactionポリシーの作成
ユーザーdr_admin
は、表HR.EMPLOYEES
およびHR.JOBS
を保護するOracle Data Redactionポリシーを作成する準備ができています。 - ステップ3: Oracle Data Redactionポリシーのテスト
ユーザーhr_clerk
は、リダクションされたデータのある表を問い合せる準備ができています。 - ステップ4: リダクション済の表の列へのポリシー式の作成および適用
次に、ユーザーdr_admin
は、データ・リダクション・ポリシー式を作成して、それを3つのリダクション済の表の列のうちの2つに適用する準備ができています。 - ステップ5: データ・リダクション・ポリシー式のテスト
ここでは、ユーザーhr_clerk
は、hr_redact_pol
ポリシー式をテストする準備ができています。 - ステップ6: データ・リダクション・ポリシー式の変更
ユーザーdr_admin
は、ユーザーhr_clerk
ではなくユーザーHR
がリダクション済のデータにアクセスできるよう、データ・リダクション・ポリシー式を変更することを決定します。 - ステップ7: 変更済ポリシー式のテスト
ユーザーHR
およびhr_clerk
は、変更済のデータ・リダクション・ポリシー式をテストする準備ができています。 - ステップ8: このチュートリアルのコンポーネントの削除
このチュートリアルのコンポーネントが不要になった場合、それらを削除できます。
親トピック: 複数の名前付きポリシー式の作成および管理
13.6.5.1 ステップ1: このチュートリアル用のユーザーの作成
このチュートリアルでは、Oracle Data Redactionポリシーを作成するdr_admin
と、それらをテストするhr_clerk
の2人のユーザーを作成する必要があります。
COMPATIBLE
初期化パラメータが12.2.0.0
以上に設定されていることを確認します。この設定は、SHOW PARAMETER
コマンドを使用して確認できます。
13.6.5.2 ステップ2: Oracle Data Redactionポリシーの作成
ユーザーdr_admin
は、表HR.EMPLOYEES
およびHR.JOBS
を保護するOracle Data Redactionポリシーを作成する準備ができています。
HR.EMPLOYEES.SALARY
、HR.EMPLOYEES.COMMISSION_PCT
およびHR.JOBS.MAX_SALARY
のデータはリダクションされます。
13.6.5.4 ステップ4: リダクション済の表の列へのポリシー式の作成および適用
次に、ユーザーdr_admin
は、データ・リダクション・ポリシー式を作成して、それを3つのリダクション済の表の列のうちの2つに適用する準備ができています。
hr_clerk
がリダクション済のデータを表示できるようにします。
hr_clerk
は、HR.EMPLOYEES.SALARY
およびHR.JOBS.MAX_SALARY
内のデータを表示できますが、列HR.EMPLOYEES.COMMISSION_PCT
内のデータはこのユーザーに対してはまだリダクションされます。
13.6.5.6 ステップ6: データ・リダクション・ポリシー式の変更
ユーザーdr_admin
は、ユーザーhr_clerk
ではなくユーザーHR
がリダクション済のデータにアクセスできるよう、データ・リダクション・ポリシー式を変更することを決定します。
13.7 完全データ・ポリシーの作成と完全リダクション値の変更
完全リダクション・ポリシーを作成して、データ列のすべての内容をリダクションできます。また、必要に応じて、デフォルトの完全リダクション値を変更できます。
- 完全リダクション・ポリシーの作成
完全データ・リダクション・ポリシーでは、データ列のすべての内容がリダクションされます。 - デフォルトの完全データ・リダクション値の変更
DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES
プロシージャは、デフォルトの完全データ・リダクション値を変更します。
親トピック: Oracle Data Redactionポリシーの構成
13.7.1 完全リダクション・ポリシーの作成
完全データ・リダクション・ポリシーでは、データ列のすべての内容がリダクションされます。
- 完全データ・リダクション・ポリシーの作成について
列のすべてのデータをリダクションするリダクション・ポリシーを設定するには、function_type
パラメータをDBMS_REDACT.FULL
に設定する必要があります。 - 完全リダクション・ポリシーを作成する構文
DBMS_REDACT.ADD_POLICY
プロシージャでは、完全リダクション・ポリシーを作成できます。 - 例: 完全リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
PL/SQLプロシージャを使用して、完全リダクション・ポリシーを作成できます。 - 例: 完全にリダクションされた文字値
DBMS_REDACT.ADD_POLICY PL/SQLプロシージャを使用して、文字値を完全にリダクションするポリシーを作成できます。
13.7.1.1 完全データ・リダクション・ポリシーの作成について
列のすべてのデータをリダクションするリダクション・ポリシーを設定するには、function_type
パラメータをDBMS_REDACT.FULL
に設定する必要があります。
デフォルトでは、NUMBER
データ型の列はゼロ(0
)に置き換えられ、文字データ型の列は空白1つ(
)に置き換えられます。DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES
プロシージャを使用することにより、このデフォルトを変更できます。
親トピック: 完全リダクション・ポリシーの作成
13.7.1.2 完全リダクション・ポリシーを作成する構文
DBMS_REDACT.ADD_POLICY
プロシージャでは、完全リダクション・ポリシーを作成できます。
完全データ・リダクション・ポリシーを作成する場合のDBMS_REDACT.ADD_POLICY
フィールドは次のとおりです。
DBMS_REDACT.ADD_POLICY ( object_schema IN VARCHAR2 := NULL, object_name IN VARCHAR2, column_name IN VARCHAR2 := NULL, policy_name IN VARCHAR2, function_type IN BINARY_INTEGER := NULL, expression IN VARCHAR2, enable IN BOOLEAN := TRUE);
ここでは次のように指定します。
-
object_schema
、object_name
、column_name
、policy_name
、expression
、enable
: 「DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文」を参照してください。 -
function_type
: リダクションのタイプの設定に使用するファンクションを指定します。DBMS_REDACT.FULL
と入力します。function_type
パラメータを省略する場合、デフォルトのリダクションfunction_type
設定は、DBMS_REDACT.FULL
です。列のデータ型は、使用が許可されている
function_type
設定を決定することに注意してください。データ型に基づいた完全、部分およびランダム・リダクションの比較を参照してください。
親トピック: 完全リダクション・ポリシーの作成
13.7.1.3 例: 完全リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
PL/SQLプロシージャを使用して、完全リダクション・ポリシーを作成できます。
例13-1に、HR.EMPLOYEES
表のCOMMISSION_PCT
列にすべての値の完全なリダクションを使用する方法を示します。式パラメータは、EXEMPT REDACTION POLICY
システム権限が付与されているユーザーは除き、表の問合せを行った任意のユーザーにポリシーを適用します。
例13-1 完全データ・リダクション・ポリシー
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'hr', object_name => 'employees', column_name => 'commission_pct', policy_name => 'redact_com_pct', function_type => DBMS_REDACT.FULL, expression => '1=1'); END; /
問合せおよびリダクションされた結果:
SELECT COMMISSION_PCT FROM HR.EMPLOYEES; COMMISSION_PCT -------------- 0 0 0
親トピック: 完全リダクション・ポリシーの作成
13.7.1.4 例: 完全にリダクションされた文字値
DBMS_REDACT.ADD_POLICY PL/SQLプロシージャを使用して、文字値を完全にリダクションするポリシーを作成できます。
例13-2では、mavis.cust_info
表のuser_id
列のユーザーIDを完全にリダクションする方法を示しています。user_id
列は、VARCHAR2
データ型です。出力は空白の文字列です。expression
設定により、MGR
ロールのあるユーザーは、ユーザーIDを表示できます。
例13-2 完全にリダクションされた文字値
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'user_id', policy_name => 'redact_cust_user_ids', function_type => DBMS_REDACT.FULL, expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''MGR'') = ''FALSE'''); END; /
問合せおよびリダクションされた結果:
SELECT user_id FROM mavis.cust_info; USER_ID ------------ 0 0 0
親トピック: 完全リダクション・ポリシーの作成
13.7.2 デフォルトの完全データ・リダクション値の変更
DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES
プロシージャは、デフォルトの完全データ・リダクション値を変更します。
- デフォルトの完全データ・リダクション値の変更について
完全データ・リダクション・ポリシーで表示されるデフォルトの値を変更できます。 - DBMS_REDACT.UPDATE_FULL_REDACTION_VALUESプロシージャの構文
DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES
プロシージャでは、サポートされている標準のOracle Databaseデータ型を使用できます。 - デフォルトの完全データ・リダクション値の変更
デフォルトの完全データ・リダクション値を変更するには、DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES
プロシージャを使用します。
13.7.2.1 デフォルトの完全データ・リダクション値の変更について
完全データ・リダクション・ポリシーで表示されるデフォルトの値を変更できます。
Oracle DatabaseがNUMBER
データ型の列に完全リダクション(DBMS_REDACT.FULL
)を実行する場合、デフォルトでは0
がリダクションされた値です。これを他の値(たとえば、7
)に変更する場合、DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES
プロシージャを実行すると、この値を変更できます。この変更は、現在のデータベース・インスタンスのすべてのデータ・リダクション・ポリシーに適用されます。値を有効にするには、変更した後に、データベースを再起動する必要があります。現在の値を検索するには、REDACTION_VALUES_FOR_TYPE_FULL
データ・ディクショナリ・ビューを問い合せます。
この変更は、完全なデータ・リダクションを使用するデータベースのすべてのデータ・リダクション・ポリシーに影響することに注意してください。デフォルトの完全データ・リダクション値を変更する前に、既存の完全データ・リダクション・ポリシーにこの変更が及ぼす影響を確認してください。
親トピック: デフォルトの完全データ・リダクション値の変更
13.7.2.2 DBMS_REDACT.UPDATE_FULL_REDACTION_VALUESプロシージャの構文
DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES
プロシージャでは、サポートされている標準のOracle Databaseデータ型を使用できます。
構文は次のとおりです。
DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES ( number_val IN NUMBER NULL, binfloat_val IN BINARY_FLOAT NULL, bindouble_val IN BINARY_DOUBLE NULL, char_val IN CHAR NULL, varchar_val IN VARCHAR2 NULL, nchar_val IN NCHAR NULL, nvarchar_val IN NVARCHAR2 NULL, date_val IN DATE NULL, ts_val IN TIMESTAMP NULL, tswtz_val IN TIMESTAMP WITH TIME ZONE NULL, blob_val IN BLOB NULL, clob_val IN CLOB NULL, nclob_val IN NCLOB NULL);
ここでは次のように指定します。
-
number_val
は、NUMBER
データ型の列のデフォルトの値を変更します。 -
binfloat_val
は、BINARY_FLOAT
データ型の列のデフォルトの値を変更します。 -
bindouble_val
は、BINARY_DOUBLE
データ型の列のデフォルトの値を変更します。 -
char_val
は、CHAR
データ型の列のデフォルトの値を変更します。 -
varchar_val
は、VARCHAR2
データ型の列のデフォルトの値を変更します。 -
nchar_val
は、NCHAR
データ型の列のデフォルトの値を変更します。 -
nvarchar_val
は、NVARCHAR2
データ型の列のデフォルトの値を変更します。 -
date_val
は、DATE
データ型の列のデフォルトの値を変更します。 -
ts_val
は、TIMESTAMP
データ型の列のデフォルトの値を変更します。 -
tswtz_val
は、TIMESTAMP WITH TIME ZONE
データ型の列のデフォルトの値を変更します。 -
blob_val
は、BLOB
データ型の列のデフォルトの値を変更します。 -
clob_val
は、CLOB
データ型の列のデフォルトの値を変更します。 -
nclob
は、NCLOB
データ型の列のデフォルトの値を変更します。
親トピック: デフォルトの完全データ・リダクション値の変更
13.7.2.3 デフォルトの完全データ・リダクション値の変更
デフォルトの完全データ・リダクション値を変更するには、DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES
プロシージャを使用します。
-
DBMS_REDACT
PL/SQLパッケージに対するEXECUTE
権限が付与されたユーザー、およびDBA
ロールが付与されたユーザーなどの管理権限を持つユーザーとして、データベース・インスタンスにログインします。 -
変更する値を確認します。
たとえば、
NUMBER
データ型を使用する列の現在の値を確認します。SELECT NUMBER_VALUE FROM REDACTION_VALUES_FOR_TYPE_FULL; NUMBER_VALUE ------------ 0
-
DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES
プロシージャを実行して値を変更します。たとえば:
EXEC DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES (number_val => 7);
-
データベース・インスタンスを再起動します。
たとえば:
SHUTDOWN IMMEDIATE STARTUP
親トピック: デフォルトの完全データ・リダクション値の変更
13.8 DBMS_REDACT.NULLIFYリダクション・ポリシーの作成
表またはビューの列の表示された値に対してNULL値を返すOracle Data Redactionポリシーを作成できます。
- NULL値を返すポリシーの作成について
DBMS_REDACT.NULLIFY
function_type
パラメータは、列内のすべてのデータをリダクションし、NULL値に置き換えます。 - NULL値を返すポリシー作成の構文
DBMS_REDACT.ADD_POLICY
プロシージャでは、完全リダクションを実行し、リダクションされた列にNULL値を表示するリダクション・ポリシーを作成できます。 - 例: NULL値を返すリダクション・ポリシー
DBMS_REDACT.ADD_POLICYプロシージャは、HR.EMPLOYEES
表のCOMMISSION_PCT
列に対してNULL値を返します。
親トピック: Oracle Data Redactionポリシーの構成
13.8.1 NULL値を返すポリシーの作成について
DBMS_REDACT.NULLIFY
function_type
パラメータは、列内のすべてのデータをリダクションし、NULL値に置き換えます。
このファンクションのタイプは、DBMS_REDACT.FULL
ファンクション・タイプがサポートするすべてのサポートされる列タイプで使用できます。また、データ型CLOB
およびNCLOB
もサポートします。DBMS_REDACT.NULLIFY
ファンクションを使用するには、最初にCOMPATIBLE
パラメータが12.2.0.0
以上に設定されているようにする必要があります。
13.8.2 NULL値を返すポリシー作成の構文
DBMS_REDACT.ADD_POLICY
プロシージャでは、完全リダクションを実行し、リダクションされた列にNULL値を表示するリダクション・ポリシーを作成できます。
DBMS_REDACT.ADD_POLICY
を使用してNULL値を返す構文は次のとおりです。
DBMS_REDACT.ADD_POLICY ( object_schema IN VARCHAR2 := NULL, object_name IN VARCHAR2, column_name IN VARCHAR2 := NULL, policy_name IN VARCHAR2, function_type IN BINARY_INTEGER := NULL, expression IN VARCHAR2, enable IN BOOLEAN := TRUE);
ここでは次のように指定します。
-
object_schema
、object_name
、column_name
、policy_name
、expression
、enable
: 「DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文」を参照してください。 -
function_type
: リダクションのタイプの設定に使用するファンクションを指定します。DBMS_REDACT.NULLIFY
と入力します。function_type
パラメータを省略する場合、デフォルトの設定はDBMS_REDACT.FULL
です。列のデータ型は、使用が許可されている
function_type
設定を決定することに注意してください。データ型に基づいた完全、部分およびランダム・リダクションの比較を参照してください。
13.8.3 例: NULL値を返すリダクション・ポリシー
DBMS_REDACT.ADD_POLICYプロシージャは、HR.EMPLOYEES
表のCOMMISSION_PCT
列に対してNULL値を返します。
expression
パラメータにより、EXEMPT REDACTION POLICY
システム権限を付与されているユーザーを除き、この表に問合せを行うあらゆるユーザーにポリシーが適用されます。
例13-3では、Oracle Data Redactionポリシーを作成する方法を示しています。
例13-3 NULL値を返すリダクション・ポリシー
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'hr', object_name => 'employees', column_name => 'commission_pct', policy_name => 'nullify_com_pct', function_type => DBMS_REDACT.NULLIFY, expression => '1=1'); END; /
問合せおよびリダクションされた結果:
SELECT COMMISSION_PCT FROM HR.EMPLOYEES; COMMISSION_PCT --------------
13.9 部分リダクション・ポリシーの作成
部分データ・リダクションでは、様々な種類のデータ型についてデータの一部をリダクションできます。
- 部分リダクション・ポリシーの作成について
データの部分リダクションでは、ID番号の最初の5桁など、データの一部のみがリダクションされます。 - 部分リダクション・ポリシーを作成する構文
DBMS_REDACT.ADD_POLICY
文では、アプリケーションに戻されるデータの特定の部分をリダクションするポリシーを作成できます。 - 固定文字形式を使用した部分リダクション・ポリシーの作成
DBMS_REDACT.ADD_POLICY
function_parameters
パラメータを使用することにより、固定文字形式を使用できるようになります。 - 文字データ型を使用した部分リダクション・ポリシーの作成
DBMS_REDACT.ADD_POLICY
function_parameters
パラメータを使用することにより、文字データ型をリダクションできるようになります。 - 数値データ型を使用した部分リダクション・ポリシーの作成
DBMS_REDACT.ADD_POLICY
function_parameters
パラメータにより、数値データ型をリダクションできます。 - 日時データ型を使用した部分リダクション・ポリシーの作成
DBMS_REDACT.ADD_POLICY
function_parameters
パラメータにより、日時データ型をリダクションできます。
親トピック: Oracle Data Redactionポリシーの構成
13.9.1 部分リダクション・ポリシーの作成について
データの部分リダクションでは、ID番号の最初の5桁など、データの一部のみがリダクションされます。
たとえば、クレジット・カードの番号の大半(最後の4桁以外)をアスタリスク(*)でリダクションできます。文字、数値または日時のデータ型を使用する列に対してポリシーを作成できます。文字データ型のリダクションを行うポリシーには、固定文字リダクション形式を使用できます。Enterprise Manager for Oracle Database 12.1.0.7プラグインがシステムにデプロイされている場合は、カスタム・リダクション形式を作成して保存することもできます。
ノート:
以前のリリースでは、「形式」のかわりに「ショートカット」という用語が使用されていました。
親トピック: 部分リダクション・ポリシーの作成
13.9.2 部分リダクション・ポリシーを作成する構文
DBMS_REDACT.ADD_POLICY
文では、アプリケーションに戻されるデータの特定の部分をリダクションするポリシーを作成できます。
部分リダクション・ポリシーを作成する場合の DBMS_REDACT.ADD_POLICY
フィールドは次のとおりです。
DBMS_REDACT.ADD_POLICY ( object_schema IN VARCHAR2 := NULL, object_name IN VARCHAR2, column_name IN VARCHAR2 := NULL, policy_name IN VARCHAR2, function_type IN BINARY_INTEGER := NULL, function_parameters IN VARCHAR2 := NULL, expression IN VARCHAR2, enable IN BOOLEAN := TRUE);
ここでは次のように指定します。
-
object_schema
、object_name
、column_name
、policy_name
、expression
、enable
: 「DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文」を参照してください -
function_type
: リダクションのタイプの設定に使用するファンクションを指定します。DBMS_REDACT.PARTIAL
と入力します。 -
function_parameters
: ここで設定するパラメータは、column_name
パラメータに指定された列のデータ型によって異なります。詳細は次の項を参照してください。
親トピック: 部分リダクション・ポリシーの作成
13.9.3 固定文字形式を使用した部分リダクション・ポリシーの作成
DBMS_REDACT.ADD_POLICY
function_parameters
パラメータを使用することにより、固定文字形式を使用できるようになります。
- 固定文字形式の設定
Oracle Data Redactionには、固定文字を使用するポリシーを構成するための、特別な事前定義形式が用意されています。 - 例: 固定文字形式を使用した部分リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
PL/SQLプロシージャを使用して、固定文字形式を使用する部分リダクション・ポリシーを作成できます。
親トピック: 部分リダクション・ポリシーの作成
13.9.3.1 固定文字形式の設定
Oracle Data Redactionには、固定文字を使用するポリシーを構成するための、特別な事前定義形式が用意されています。
表13-8では、DBMS_REDACT.ADD_POLICY
function_parameters
パラメータ形式について説明します。これは、通常リダクションされることが多いID番号(社会保障番号または、カナダ社会保険番号など)、郵便番号およびクレジット・カード(列でVARCHAR2
またはNUMBER
のデータ型のいずれかが使用される)に対して使用できます。
表13-8 部分固定文字リダクションの形式
形式 | 説明 |
---|---|
|
列が |
|
列が |
|
列が |
|
列が |
|
列が |
|
列が |
|
カナダ社会保険番号の先頭6桁を |
|
カナダ社会保険番号の先頭6桁を |
|
カナダ社会保険番号の先頭6桁を |
|
英国国民保険番号の先頭6桁を |
|
英国国民保険番号の先頭6桁を |
|
クレジット・カード番号(アメリカン・エキスプレス以外)を末尾4桁を残してすべて |
|
クレジット・カード番号(アメリカン・エキスプレス以外)を末尾4桁を残してすべて |
|
16桁のクレジット・カード番号(アメリカン・エキスプレス以外)を末尾4桁の表示を残してすべてリダクションします。たとえば、 |
|
アメリカン・エキスプレス・クレジット・カード番号の末尾5桁以外の桁を |
|
アメリカン・エキスプレス・クレジット・カード番号の末尾5桁以外の桁を |
|
列が |
|
列が |
|
すべての日付を |
|
北米の電話番号をエリア・コードを残して他をすべて |
|
北米の電話番号をエリア・コードを残して他をすべて |
|
北米の電話番号をエリア・コードを残して他をすべて |
|
|
関連項目:
その他のDBMS_REDACT.ADD_POLICY
パラメータの詳細は、DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文を参照してください。
親トピック: 固定文字形式を使用した部分リダクション・ポリシーの作成
13.9.3.2 例: 固定文字形式を使用した部分リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
PL/SQLプロシージャを使用して、固定文字形式を使用する部分リダクション・ポリシーを作成できます。
例13-4 では、VARCHAR2
データ型の列にある社会保障番号をREDACT_US_SSN_F5
形式によってリダクションする方法について説明します。
例13-4 部分的にリダクションされた文字値
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'ssn', policy_name => 'redact_cust_ssns3', function_type => DBMS_REDACT.PARTIAL, function_parameters => DBMS_REDACT.REDACT_US_SSN_F5, expression => '1=1', policy_description => 'Partially redacts 1st 5 digits in SS numbers', column_description => 'ssn contains Social Security numbers'); END; /
問合せおよびリダクションされた結果:
SELECT ssn FROM mavis.cust_info; SSN ------- XXX-XX-4320 XXX-XX-4323 XXX-XX-4325 XXX-XX-4329
親トピック: 固定文字形式を使用した部分リダクション・ポリシーの作成
13.9.4 文字データ型を使用した部分リダクション・ポリシーの作成
DBMS_REDACT.ADD_POLICY
function_parameters
パラメータを使用することにより、文字データ型をリダクションできるようになります。
- 文字データ型の設定
Oracle Data Redactionには、文字データ型を使用するポリシーを構成するための、特別な設定が用意されています。 - 例: 文字データ型を使用した部分リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
PL/SQLプロシージャにより、文字データ型を使用する部分リダクション・ポリシーを作成できます。
親トピック: 部分リダクション・ポリシーの作成
13.9.4.1 文字データ型の設定
Oracle Data Redactionには、文字データ型を使用するポリシーを構成するための、特別な設定が用意されています。
DBMS_REDACT.ADD_POLICY
のfunction_parameters
パラメータを設定して文字データ型の部分リダクションを定義するときは、次の順序で次の設定の値を入力します。各値はカンマで区切ります。
ノート:
部分リダクションには、固定幅の文字セットを使用する必要があることに注意してください。つまり、リダクションされる各文字は、バイト長が等しい別の文字に置換される必要があります。可変長の文字セット(たとえば、UTF-8)を使用する場合、正規表現ベースのリダクションを使用する必要があります。詳細は、正規表現ベースのリダクション・ポリシーを作成する構文を参照してください。
設定は次のとおりです。
-
入力形式: データが現在どのようにフォーマットされているかを指定します。クレジット・カード番号の全桁など、リダクションされる可能性のある各文字に
V
を入力します。クレジット・カード番号のハイフンまたは空白のような書式化文字を使用して書式化する場合、F
を入力します。各文字に、対応するV
またはF
値があるか確認します。(入力形式の値は大/小文字を区別しません。) -
出力形式: 表示されるデータを書式化する方法を定義します。リダクションされる可能性のある各文字に
V
を入力します。入力形式の各文字F
をハイフンなど表示される文字に使用する文字に置換します。(出力形式の値は大/小文字を区別しません。) -
マスク文字: リダクションに使用する文字を指定します。アスタリスク(*)など、リダクションに使用する単一の文字を入力します。
-
開始する数字位置: リダクションで開始する
V
の数字位置を指定します。 -
終了する数字位置: リダクションで終了する
V
の数字位置を指定します。終了する位置の値を決めるときは、F
の位置を含めないでください。
たとえば、次の設定は、クレジット・カード番号5105 1051 0510 5100
の最初の12桁のV
をリダクションし、F
の位置(空白)をハイフンに置換することでクレジット・カード番号で通常使用されるスタイルに書式化し、その結果****-****-****-4320
と表示されます。
function_parameters => 'VVVVFVVVVFVVVVFVVVV,VVVV-VVVV-VVVV-VVVV,*,1,12',
関連項目:
その他のDBMS_REDACT.ADD_POLICY
パラメータの詳細は、DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文を参照してください。
親トピック: 文字データ型を使用した部分リダクション・ポリシーの作成
13.9.4.2 例: 文字データ型を使用した部分リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
PL/SQLプロシージャにより、文字データ型を使用する部分リダクション・ポリシーを作成できます。
例13-5には、VARCHAR2
データ型の列にある社会保障番号をリダクションする方法と、社会保障番号に含まれているハイフンを保持する方法を示します。
例13-5 部分的にリダクションされた文字値
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'ssn', policy_name => 'redact_cust_ssns2', function_type => DBMS_REDACT.PARTIAL, function_parameters => 'VVVFVVFVVVV,VVV-VV-VVVV,*,1,5', expression => '1=1', policy_description => 'Partially redacts Social Security numbers', column_description => 'ssn contains character Social Security numbers'); END; /
問合せおよびリダクションされた結果:
SELECT ssn FROM mavis.cust_info; SSN ----------- ***-**-4320 ***-**-4323 ***-**-4325 ***-**-4329
親トピック: 文字データ型を使用した部分リダクション・ポリシーの作成
13.9.5 数値データ型を使用した部分リダクション・ポリシーの作成
DBMS_REDACT.ADD_POLICY
function_parameters
パラメータにより、数値データ型をリダクションできます。
- 数値データ型の設定
数値データ型の値を設定する場合、マスク文字、開始する数字位置および終了する数字位置を指定する必要があります。 - 例: 数値データ型を使用した部分リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
プロシージャにより、数値データ型を使用する部分リダクション・ポリシーを作成できます。
親トピック: 部分リダクション・ポリシーの作成
13.9.5.1 数値データ型の設定
数値データ型の値を設定する場合、マスク文字、開始する数字位置および終了する数字位置を指定する必要があります。
数値データ型の部分リダクションの場合、DBMS_REDACT.ADD_POLICY
function_parameters
パラメータについて、次の設定項目の値を記載されている順番に入力できます。
-
マスク文字: 表示する文字を指定します。0から9までの数値を入力します。
-
開始する数字位置: 最初の数字に
1
を指定するなど、リダクションで開始するの数字位置を指定します。 -
終了する数字位置: リダクションで終了する数字位置を指定します。
たとえば、次の設定は、社会保障番号987654321
の最初の5桁をリダクションし、その結果、999994321
と表示されます。
function_parameters => '9,1,5',
関連項目:
その他のDBMS_REDACT.ADD_POLICY
パラメータの詳細は、DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文を参照してください。
親トピック: 数値データ型を使用した部分リダクション・ポリシーの作成
13.9.5.2 例: 数値データ型を使用した部分リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
プロシージャにより、数値データ型を使用する部分リダクション・ポリシーを作成できます。
例13-6では、mavis.cust_info
表の一連の社会保障番号を、ログインした任意のアプリケーション・ユーザーに対して部分リダクションする方法を示しています。(そのため、expression
パラメータはTRUE
と評価されます。)
このタイプのリダクションが役立つのは、文字列ではなく書式設定された数値をアプリケーションが想定している場合です。このシナリオでは、社会保障番号はデータ型NUMBER
の列にあります。つまり、ssn
列に含まれるのは数字のみで、ハイフンまたは空白など他の文字は含まれせん。
例13-6 部分的にリダクションされたデータ・リダクションの数値
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'ssn', policy_name => 'redact_cust_ssns1', function_type => DBMS_REDACT.PARTIAL, function_parameters => '7,1,5', expression => '1=1', policy_description => 'Partially redacts Social Security numbers', column_description => 'ssn contains numeric Social Security numbers'); END; /
問合せおよびリダクションされた結果:
SELECT ssn FROM mavis.cust_info; SSN --------- 777774320 777774323 777774325 777774329
親トピック: 数値データ型を使用した部分リダクション・ポリシーの作成
13.9.6 日時データ型を使用した部分リダクション・ポリシーの作成
DBMS_REDACT.ADD_POLICY
function_parameters
パラメータにより、日時データ型をリダクションできます。
- 日時データ型の設定
Oracle Data Redactionには、日時データ型を構成するための特別な設定が用意されています。 - 例: 日時データ型を使用した部分リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
プロシージャにより、日時データ型を使用する部分リダクション・ポリシーを作成できます。
親トピック: 部分リダクション・ポリシーの作成
13.9.6.1 日時データ型の設定
Oracle Data Redactionには、日時データ型を構成するための特別な設定が用意されています。
日時データ型の部分リダクションの場合、次のDBMS_REDACT.ADD_POLICY
function_parameters
パラメータ設定項目の値を入力します。
値は次に示す順序で入力します。
-
m: 月をリダクションします。月の名前でリダクションするには、
1
から12
を小文字のm
に追加します。たとえば、m5
は、MAY
と表示されます。リダクションを省略するには、大文字のM
を入力します。 -
d: 月の日をリダクションします。月の日でリダクションするには、
1
から31
を小文字のd
に追加します。たとえば、d7
は、07
と表示されます。月の日よりも大きい数値(たとえば、2月に31
を入力)を入力すると、その月の最終日(たとえば、28
)が表示されます。リダクションを省略するには、大文字のD
を入力します。 -
y: 年をリダクションします。年でリダクションするには、
1
から9999
を小文字のy
に追加します。たとえば、y1984
は、84
と表示されます。リダクションを省略するには、大文字のY
を入力します。 -
h: 時間をリダクションします。時間でリダクションするには、
0
から23
を小文字のh
に追加します。たとえば、h20
は、20
と表示されます。リダクションを省略するには、大文字のH
を入力します。 -
m: 分をリダクションします。分でリダクションするには、
0
から59
を小文字のm
に追加します。たとえば、m30
は、30
と表示されます。リダクションを省略するには、大文字のM
を入力します。 -
s: 秒をリダクションします。秒でリダクションするには、
0
から59
を小文字のs
に追加します。たとえば、s45
は、45
と表示されます。リダクションを省略するには、大文字のS
を入力します。
関連項目:
その他のDBMS_REDACT.ADD_POLICY
パラメータの詳細は、DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文を参照してください。
親トピック: 日時データ型を使用した部分リダクション・ポリシーの作成
13.9.6.2 例: 日時データ型を使用した部分リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
プロシージャにより、日時データ型を使用する部分リダクション・ポリシーを作成できます。
例13-7では、日付を部分的にリダクションする方法を示しています。この例では顧客の誕生年をリダクションし、それを13
に置き換え、残りの値はそのまま保持します。
例13-7 日時値を使用した部分リダクションによるデータ・リダクション
BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema => 'mavis',
object_name => 'cust_info',
column_name => 'birth_date',
policy_name => 'redact_cust_bdate',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => 'mdy2013HMS
',
expression => '1=1',
policy_description => 'Replaces birth year with 2013',
column_description => 'birth_date contains customer's birthdate');
END;
/
問合せおよびリダクションされた結果:
SELECT birth_date FROM mavis.cust_info; BIRTH_DATE 07-DEC-13 09.45.40.000000 AM 12-OCT-13 04.23.29.000000 AM
親トピック: 日時データ型を使用した部分リダクション・ポリシーの作成
13.10 正規表現ベースのリダクション・ポリシーの作成
正規表現ベースのリダクション・ポリシーでは、検索置換モデルに基づいてデータをリダクションできます。
- 正規表現ベースのリダクション・ポリシーの作成について
正規表現ベースのリダクションでは、リダクションするデータのパターンを検索できます。 - 正規表現ベースのリダクション・ポリシーを作成する構文
DBMS_REDACT.ADD_POLICY
プロシージャのregexp_*
パラメータによって、正規表現ベースのリダクション・ポリシーを作成できます。 - 形式を使用した正規表現ベースのリダクション・ポリシー
DBMS_REDACT.ADD_POLICY
プロシージャのregexp_pattern
パラメータとregexp_replace_string
パラメータの両方で、形式を使用できます。 - カスタム正規表現リダクション・ポリシー
データ・リダクション・ポリシーで正規表現をカスタマイズできます。
親トピック: Oracle Data Redactionポリシーの構成
13.10.1 正規表現ベースのリダクション・ポリシーの作成について
正規表現ベースのリダクションでは、リダクションするデータのパターンを検索できます。
たとえば、正規表現を使用して、文字の長さが変化する可能性のある電子メール・アドレスをリダクションできます。これは、文字データのみで使用するように設計されています。検索および置換操作に形式を使用することも、カスタム・パターン形式を作成することもできます。
列内の値のサブセットのリダクションに正規表現は使用できません。REGEXP_REPLACE_STRING
の設定を有効にするには、REGEXP_PATTERN (正規表現パターン)がすべての
値に一致する必要があり、REGEXP_REPLACE_STRING
が値を変更する必要があります。
REGEXP_PATTERN
が一致しない行では、データ・リダクションはDBMS_REDACT.FULL
リダクションを実行します。これにより、一致しない行の実際のデータの表示から、正規表現が列内の値のすべてに一致しない原因となるREGEXP_PATTERN
での誤りのリスクが軽減されます。
さらに、正規表現の置換操作中に、REGEXP_REPLACE_STRING
設定の結果として発生する値への変更がない場合、データ・リダクションはDBMS_REDACT.FULL
リダクションを実行します。
親トピック: 正規表現ベースのリダクション・ポリシーの作成
13.10.2 正規表現ベースのリダクション・ポリシーを作成する構文
DBMS_REDACT.ADD_POLICY
プロシージャのregexp_*
パラメータによって、正規表現ベースのリダクション・ポリシーを作成できます。
正規表現ベース完全データ・リダクション・ポリシーを作成する場合のDBMS_REDACT.ADD_POLICY
フィールドは次のとおりです。
DBMS_REDACT.ADD_POLICY ( object_schema IN VARCHAR2 := NULL, object_name IN VARCHAR2, column_name IN VARCHAR2 := NULL, policy_name IN VARCHAR2, function_type IN BINARY_INTEGER := 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);
ここでは次のように指定します。
-
object_schema
、object_name
、column_name
、policy_name
、expression
、enable
: 「DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文」を参照してください。 -
function_type
: リダクションのタイプを指定します。正規表現に基づくリダクションには、DBMS_REDACT.REGEXP
またはDBMS_REDACT.REGEXP_WIDTH
のいずれかを使用します。DBMS_REDACT.REGEXP
リダクション・タイプを使用した場合、切捨ては行われません。これは、リダクションされる値が列幅よりも広い場合、およびOracle Call Interfaceの列の幅属性(OCI_ATTR_CHAR_SIZE
)が保持されていない場合であっても適用されます。(これは、REGEXP_REPLACE
SQL演算子が列で使用されているとき同じように4000になります。)DBMS_REDACT.REGEXP_WIDTH
リダクション・タイプを使用すると、列の幅を超えるリダクション済の値が切り捨てられ、列のOCI幅属性(OCI_ATTR_CHAR_SIZE
)が変更されないままになります。次の点に注意してください。
-
アプリケーションが
OCI_ATTR_CHAR_SIZE
属性の値に依存する場合、DBMS_REDACT.REGEXP_WIDTH
ファンクション・タイプを使用します。たとえば、Oracle OLE DB Providerインタフェースを使用して構築されたアプリケーションは、OCI_ATTR_CHAR_SIZE
属性の値に影響を受けやすくなります。DBMS_REDACT.REGEXP
をリダクション・タイプとして使用した場合、OCI_ATTR_CHAR_SIZE
は常に4000になります。この設定は、Oracle OLE DBベースのアプリケーションに使用される表に対するポリシーのリダクション・タイプとしては不適切になります。Oracle Call Interfaceのパラメータ属性の詳細は、Oracle Call Interfaceプログラマーズ・ガイドを参照してください。 -
function_type
パラメータをDBMS_REDACT.REGEXP
またはDBMS_REDACT.REGEXP_WIDTH
に設定するときには、DBMS_REDACT.ADD_POLICY
プロシージャからのfunction_parameters
パラメータを省略します。 -
引数
pattern
、replace
、position
、occurrence
およびmatch_parameter
をREGEXP_REPLACE
SQLファンクションに指定したのとほぼ同じ方法で正規表現パラメータを指定します。REGEXP_REPLACE
SQLファンクションの詳細は、Oracle Database SQL言語リファレンスを参照してください。
-
-
regexp_pattern
: 一致する必要のあるデータの検索パターンを説明します。一致が見つかった場合、Oracle Databaseは、regexp_replace_string
設定で指定されたとおりにデータを置換します。詳細は、次の各項を参照してください。 -
regexp_replace_string
: データのリダクション方法を指定します。詳細は、次の各項を参照してください。 -
regexp_position
: 文字列検索の開始位置を指定します。入力する値は、Oracle Databaseが検索を開始するcolumn_name
データの文字を示す正の整数です。デフォルトは、1
またはDBMS_REDACT.RE_BEGINNING
形式で、Oracle Databaseがcolumn_name
データの最初の文字で検索を開始することを意味します。 -
regexp_occurrence
: 検索および置換操作の実行方法を指定します。入力する値は、置換操作の回数を示す正の整数です。-
0
またはDBMS_REDACT.RE_ALL
形式を指定する場合、Oracle Databaseは、一致したすべてのものを置換します。 -
DBMS_REDACT.RE_FIRST
形式を指定する場合、Oracle Databaseは、最初に一致したものを置換します。 -
正の整数
n
を指定すると、Oracle Databaseは、n
番目の一致を置換します。
出現が1より大きい場合、1番目のパターンが検出された後に続く1文字目から、2番目(以降)の出現を検索します。
-
-
regexp_match_parameter
: ファンクションが持つデフォルトの照合動作を変更できるテキスト・リテラルを指定します。このパラメータの動作は、REGEXP_REPLACE
SQLファンクションのこのファンクションの動作と同じです。詳細は、Oracle Database SQL言語リファレンスを参照してください。大文字と小文字を区別せずに検索をフィルタするには、
RE_CASE_INSENSITIVE
形式を指定します。
親トピック: 正規表現ベースのリダクション・ポリシーの作成
13.10.3 形式を使用した正規表現ベースのリダクション・ポリシー
DBMS_REDACT.ADD_POLICY
プロシージャのregexp_pattern
パラメータとregexp_replace_string
パラメータの両方で、形式を使用できます。
- 正規表現の形式
正規表現の形式によって、クレジット・カード番号の数を置換する場合などによく使用される表現を表します。 - 例: 形式を使用した正規表現リダクション・ポリシー
DBMS_REDACT.ADD_POLICYプロシージャによって、形式を使用した正規表現リダクション・ポリシーを作成できます。
親トピック: 正規表現ベースのリダクション・ポリシーの作成
13.10.3.1 正規表現の形式
正規表現の形式によって、クレジット・カード番号の数を置換する場合などによく使用される表現を表します。
表13-9では、DBMS_REDACT.ADD_POLICY
プロシージャ内のregexp_pattern
パラメータで使用できる形式について説明します。
表13-9 regexp_patternパラメータの形式
形式 | 説明 |
---|---|
|
任意の桁を検索します。識別されたパターンを、 regexp_replace_string => DBMS_REDACT.RE_REDACT_WITH_SINGLE_X, この設定によって、一致した任意の桁が 次の設定では、一致した任意の桁が regexp_replace_string => DBMS_REDACT.RE_REDACT_WITH_SINGLE_1, |
|
先頭6桁および末尾4桁を持つ任意のクレジット・カード(アメリカン・エキスプレス以外)の中央の桁を検索します。識別されたパターンを、 この形式で使用する適切な |
|
アメリカン・エキスプレス・クレジット・カード番号以外のクレジット・カード番号に一致します。この形式で使用する適切な |
|
アメリカン・エキスプレス・クレジット・カード番号に一致します。この形式で使用する適切な |
|
任意の米国の電話番号を検索します。識別されたパターンを、 この形式で使用する必要のある適切な |
|
任意の電子メール・アドレスを検索します。識別されたパターンを、 この形式で使用できる適切な
|
|
任意のIPアドレスを検索します。識別されたパターンを、 この形式で使用する必要のある適切な |
表13-10では、DBMS_REDACT.ADD_POLICY
プロシージャ内のregexp_replace_string
パラメータで使用できる形式について説明します。
表13-10 regexp_replace_stringパラメータの形式
形式 | 説明 |
---|---|
|
実際のデータの各文字を単一の文字 |
|
|
|
クレジット・カード番号の中央の桁を、 |
|
アメリカン・エキスプレスのカード番号以外のクレジット・カード番号の先頭12桁をリダクションします。たとえば、 |
|
アメリカン・エキスプレスの番号の先頭10桁をリダクションします。たとえば、 |
|
米国の電話番号の最後の7桁を、 |
|
電子メール・アドレスを、 |
|
電子メール・ドメイン名を、 |
|
IPアドレスの最後の3桁を、 |
関連項目:
その他のDBMS_REDACT.ADD_POLICY
パラメータの詳細は、DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文を参照してください。
親トピック: 形式を使用した正規表現ベースのリダクション・ポリシー
13.10.3.2 例: 形式を使用した正規表現リダクション・ポリシー
DBMS_REDACT.ADD_POLICYプロシージャによって、形式を使用した正規表現リダクション・ポリシーを作成できます。
例13-8では、正規表現形式を使用してクレジット・カード番号をリダクションする方法を示しています。
例13-8 正規表現データ・リダクション文字値
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'cc_num', policy_name => 'redact_cust_cc_nums', function_type => DBMS_REDACT.REGEXP, function_parameters => NULL, expression => '1=1', regexp_pattern => DBMS_REDACT.RE_PATTERN_CC_L6_T4, regexp_replace_string => DBMS_REDACT.RE_REDACT_CC_MIDDLE_DIGITS, regexp_position => DBMS_REDACT.RE_BEGINNING, regexp_occurrence => DBMS_REDACT.RE_FIRST, regexp_match_parameter => DBMS_REDACT.RE_CASE_INSENSITIVE, policy_description => 'Regular expressions to redact credit card numbers', column_description => 'cc_num contains customer credit card numbers'); END; /
問合せおよびリダクションされた結果:
SELECT cc_num FROM mavis.cust_info; CC_NUM ------- 401288XXXXXX1881 411111XXXXXX1111 555555XXXXXX1111 511111XXXXXX1118
親トピック: 形式を使用した正規表現ベースのリダクション・ポリシー
13.10.4 カスタム正規表現リダクション・ポリシー
データ・リダクション・ポリシーで正規表現をカスタマイズできます。
- カスタム正規表現の設定
Oracle Data Redactionには、正規表現を使用するポリシーを構成するための、特別な設定が用意されています。 - 例: カスタム正規表現リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
プロシージャのregexp*パラメータによって、カスタム正規表現リダクション・ポリシーを作成できます。
親トピック: 正規表現ベースのリダクション・ポリシーの作成
13.10.4.1 カスタム正規表現の設定
Oracle Data Redactionには、正規表現を使用するポリシーを構成するための、特別な設定が用意されています。
カスタム正規表現リダクション・ポリシーを作成するには、DBMS_REDACT.ADD_POLICY
プロシージャで次のパラメータを使用します。
-
regexp_pattern
: このパターンは通常テキスト・リテラルであり、データ型はCHAR
、VARCHAR2
、NCHAR
またはNVARCHAR2
のいずれかになります。パターンには、 512バイトまで入力できます。regexp_pattern
パラメータの正規表現を記述する方法の詳細は、『Oracle Database SQL言語リファレンス』にあるREGEXP_REPLACE
SQL関数のpattern
引数の説明を参照してください(データ・リダクションがサポートする正規表現の一致は、REGEXP_REPLACE
SQL関数のものとよく似ているため)。 -
regexp_replace_string
: データ型はCHAR
、VARCHAR2
、NCHAR
またはNVARCHAR2
のいずれかになります。regexp_replace_string
には、最大500個の部分正規表現への後方参照を\
n
という書式で指定でき、n
は、1から9の数値です。regexp_replace_string
設定にバックスラッシュ(\)を含める場合、その前にエスケープ文字(これもバックスラッシュ)を付ける必要があります。たとえば、一致したパターンを文字どおり\2
に置換するには(それを一致したパターンで2番目に一致した部分正規表現に置換するのではない場合)、regexp_replace_string
設定に\\2
を入力します。詳細は、Oracle Database SQL言語リファレンスを参照してください。
関連項目:
その他のDBMS_REDACT.ADD_POLICY
パラメータの詳細は、DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文を参照してください。
親トピック: カスタム正規表現リダクション・ポリシー
13.10.4.2 例: カスタム正規表現リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
プロシージャのregexp*パラメータによって、カスタム正規表現リダクション・ポリシーを作成できます。
例13-9では、emp_id
列データをリダクションする正規表現の使用方法を示しています。次の例では、regexp_pattern
パラメータとregexp_replace_string
パラメータが組み合されて、最初に9桁のパターンが検索されます。参照用に、それらは最初の3桁、次の2桁、最後の4桁を含む3つのグループに分割されます。その後、9桁すべてが、元のパターンで検索された3番目のグループ(最後の4桁)と連結されたXXXXX
に置換されます。
問合せおよびリダクションされた結果:
SELECT emp_id FROM mavis.cust_info; EMP_ID ------------ XXXXX1234 XXXXX5678
例13-9 正規表現を使用した部分的にリダクションされたデータ・リダクション
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'emp_id', policy_name => 'redact_cust_ids', function_type => DBMS_REDACT.REGEXP, expression => '1=1', regexp_pattern => '(\d\d\d)(\d\d)(\d\d\d\d)', regexp_replace_string => 'XXXXX\3', regexp_position => 1, regexp_occurrence => 0, regexp_match_parameter => 'i', policy_description => 'Redacts customer IDs using regular expression', column_description => 'emp_id contains employee ID numbers'); END; /
親トピック: カスタム正規表現リダクション・ポリシー
13.11 ランダム・リダクション・ポリシーの作成
ランダム・リダクション・ポリシーは、リダクションされたデータをランダムに生成した値(Ukjsl32[[]]]s
など)で表します。
- ランダム・リダクション・ポリシーを作成する構文
ランダム・リダクション・ポリシーでは、問合せを行ったアプリケーション・ユーザーに対し、列のデータ型に基づいてランダムに生成された値によるリダクション済のデータが表示されます。 - 例: ランダム・リダクション・ポリシー
DBMS_REDACT.ADD_POLICY PL/SQLプロシージャを使用して、ランダム・リダクション・ポリシーを作成できます。
親トピック: Oracle Data Redactionポリシーの構成
13.11.1 ランダム・リダクション・ポリシーを作成する構文
ランダム・リダクション・ポリシーでは、問合せを行ったアプリケーション・ユーザーに対し、列のデータ型に基づいてランダムに生成された値によるリダクション済のデータが表示されます。
LOB列がサポートされていないことに注意してください。
ランダム・リダクション・ポリシーを作成する場合の DBMS_REDACT.ADD_POLICY
フィールドは次のとおりです。
DBMS_REDACT.ADD_POLICY ( object_schema IN VARCHAR2 := NULL, object_name IN VARCHAR2, column_name IN VARCHAR2 := NULL, policy_name IN VARCHAR2, function_type IN BINARY_INTEGER := NULL, expression IN VARCHAR2, enable IN BOOLEAN := TRUE);
ここでは次のように指定します。
-
object_schema
、object_name
、column_name
、policy_name
、expression
、enable
: 「DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文」を参照してください。 -
function_type
: リダクションのタイプの設定に使用するファンクションを指定します。DBMS_REDACT.RANDOM
と入力します。function_type
パラメータを省略する場合、デフォルトのリダクションfunction_type
設定は、DBMS_REDACT.FULL
です。列のデータ型は、使用が許可されている
function_type
設定を決定することに注意してください。データ型に基づいた完全、部分およびランダム・リダクションの比較を参照してください。
親トピック: ランダム・リダクション・ポリシーの作成
13.11.2 例: ランダム・リダクション・ポリシー
DBMS_REDACT.ADD_POLICY PL/SQLプロシージャを使用して、ランダム・リダクション・ポリシーを作成できます。
例13-10では、ランダム値の生成方法を示しています。SELECT
文を実行するたびに、出力は異なります。
例13-10 ランダムにリダクションされたデータ・リダクションの値
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'login_username', policy_name => 'redact_cust_rand_username', function_type => DBMS_REDACT.RANDOM, expression => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''APP_USER'''); END; /
問合せおよびリダクションされた結果:
SELECT login_username FROM mavis.cust_info; LOGIN_USERNAME -------------- N[CG{\pTVcK
親トピック: ランダム・リダクション・ポリシーの作成
13.12 リダクションを使用しないポリシーの作成
開発環境でポリシーをテストする場合には、まったくリダクションを使用しないポリシーを作成できます。
- リダクションを使用しないポリシーの作成の構文
リダクション・タイプNoneを指定するオプションを使用して、リダクション・ポリシーの内部動作をテストできます。 - 例: リダクションを実行しない
DBMS_REDACT.ADD_POLICY
プロシージャによって、リダクションを実行しないポリシーを作成できます。
親トピック: Oracle Data Redactionポリシーの構成
13.12.1 リダクションを使用しないポリシーの作成の構文
リダクション・タイプNoneを指定するオプションを使用して、リダクション・ポリシーの内部動作をテストできます。
リダクション・タイプNoneは、ポリシーが定義された表に対する問合せの結果に影響を与えません。このオプションを使用して、リダクション・ポリシー定義を本番環境に適用する前にテストできます。LOB列がサポートされていないことに注意してください。
リダクションを使用しないポリシーを作成する場合の DBMS_REDACT.ADD_POLICY
フィールドは次のとおりです。
DBMS_REDACT.ADD_POLICY ( object_schema IN VARCHAR2 := NULL, object_name IN VARCHAR2, column_name IN VARCHAR2 := NULL, policy_name IN VARCHAR2, function_type IN BINARY_INTEGER := NULL, expression IN VARCHAR2, enable IN BOOLEAN := TRUE);
ここでは次のように指定します。
-
object_schema
、object_name
、column_name
、policy_name
、expression
、enable
: 「DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文」を参照してください。 -
function_type
: データ・リダクションのタイプの設定に使用するファンクションを指定します。DBMS_REDACT.NONE
と入力します。function_type
パラメータを省略する場合、デフォルトのリダクションfunction_type
設定は、DBMS_REDACT.FULL
です。
親トピック: リダクションを使用しないポリシーの作成
13.12.2 例: リダクションを実行しない
DBMS_REDACT.ADD_POLICY
プロシージャによって、リダクションを実行しないポリシーを作成できます。
例13-11では、表示されている値のいずれもリダクションしないデータ・リダクション・ポリシーの生成方法を示しています。
例13-11 リダクションされないデータ・リダクション値
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'user_name', policy_name => 'redact_cust_no_vals', function_type => DBMS_REDACT.NONE, expression => '1=1'); END; /
問合せおよびリダクションされた結果:
SELECT user_name FROM mavis.cust_info; USER_NAME ---------- IDA NEAU
親トピック: リダクションを使用しないポリシーの作成
13.13 Oracle Data Redactionポリシーからのユーザーの除外
アクセスしたデータにOracle Data Redactionポリシーを適用しないように、ユーザーを除外することができます。
そのためには、そのユーザーにEXEMPT REDACTION POLICY
システム権限を付与する必要があります。この権限は信頼できるユーザーにのみ付与してください。
また、この権限を付与されているユーザーに加え、ユーザーSYS
も、すべてのデータ・リダクション・ポリシーから除外されます。データ・リダクション・ポリシーを作成するユーザーは、そのユーザーがユーザーSYS
であるか、またはEXEMPT REDACTION POLICY
システム権限が付与されている場合を除き、デフォルトでは、データ・リダクション・ポリシーから除外されません。
次の点に注意してください。
-
表に対する
INSERT
権限があるユーザーは、データ・リダクション・ポリシーがテーブルに存在するかどうかにかかわらず、リダクションされた列に値を挿入できます。データ・リダクションは、ユーザーが発行したSQLSELECT
文(つまり、問合せ)のみに影響し、ユーザーが発行するその他のSQL(INSERT
、UPDATE
またはDELETE
文など)には影響しません。(この例の例外は、次の箇条書きを参照してください。) -
選択されている列(ソース列)のいずれかがデータ・リダクション・ポリシーで保護されている場合、ユーザーは、
EXEMPT REDACTION POLICY
システム権限が付与されていないかぎり、CREATE TABLE AS SELECT
を実行できません(同様に、ソースがリダクションされた列である場合、DML操作も実行できません)。 -
EXEMPT REDACTION POLICY
システム権限は、DBA
ロールに含まれますが、この権限は、DBA
ロールが付与された場合のWITH ADMIN OPTION
には含まれないので、明示的にユーザーに付与される必要があります。DBA
ロールには、EXEMPT REDACTION POLICY
システム権限が付与されるEXP_FULL_DATABASE
ロールが含まれるため、DBA
ロールが付与されたユーザーはリダクション・ポリシーから除外されます。
13.14 Oracle Data Redactionポリシーの変更
DBMS_REDACT.ALTER_POLICY
プロシージャでは、Oracle Data Redactionポリシーを変更できます。
- Oracle Data Redactionポリシーの変更について
DBMS_REDACT.ALTER_POLICY
プロシージャは、データ・リダクション・ポリシーを変更します。 - DBMS_REDACT.ALTER_POLICYプロシージャの構文
DBMS_REDACT.ALTER_POLICY
プロシージャの構文を使用して、すべてのタイプのデータ・リダクション・ポリシーを変更できます。 - DBMS_REDACT.ALTER_POLICY操作に必要なパラメータ
DBMS_REDACT.ALTER_POLICYプロシージャには、列の追加や変更などの様々な操作を実行できるパラメータが用意されています。 - チュートリアル: Oracle Data Redactionポリシーの変更
列ごとに独自のリダクション設定を使用して、表またはビューの複数の列をリダクションできます。
親トピック: Oracle Data Redactionポリシーの構成
13.14.1 Oracle Data Redactionポリシーの変更について
DBMS_REDACT.ALTER_POLICY
プロシージャは、データ・リダクション・ポリシーを変更します。
ポリシーがすでに有効化されている場合は、最初に無効化する必要はなく、またポリシーを変更した後でもポリシーは有効化された状態が維持されます。
REDACTION_POLICIES
データ・ディクショナリ・ビューのPOLICY_NAME
列を問い合せて、既存のデータ・リダクション・ポリシーの名前を検索したり、REDACTION_COLUMNS
ビューを問い合せて、ポリシー内に指定された列、関数およびパラメータに関する情報を検索できます。完全データ・リダクションを使用するポリシーを現在の値から検索するには、REDACTION_VALUES_FOR_TYPE_FULL
データ・ディクショナリ・ビューを問い合せます。
action
パラメータは、実行する変更の型を指定します。このプロシージャを実行するときは、少なくともobject_name
およびpolicy_name
パラメータを含める必要があります。
親トピック: Oracle Data Redactionポリシーの変更
13.14.2 DBMS_REDACT.ALTER_POLICYプロシージャの構文
DBMS_REDACT.ALTER_POLICY
プロシージャの構文を使用して、すべてのタイプのデータ・リダクション・ポリシーを変更できます。
DBMS_REDACT.ALTER_POLICY
プロシージャの構文は次のとおりです。
DBMS_REDACT.ALTER_POLICY (
object_schema IN VARCHAR2 := NULL,
object_name IN VARCHAR2 := NULL,
policy_name IN VARCHAR2,
action IN BINARY_INTEGER := DBMS_REDACT.ADD_COLUMN,
column_name IN VARCHAR2 := NULL,
function_type IN BINARY_INTEGER := DBMS_REDACT.FULL,
function_parameters IN VARCHAR2 := NULL,
expression IN VARCHAR2 := NULL,
regexp_pattern IN VARCHAR2 := NULL,
regexp_replace_string IN VARCHAR2 := NULL,
regexp_position IN BINARY_INTEGER := NULL,
regexp_occurrence IN BINARY_INTEGER := NULL,
regexp_match_parameter IN VARCHAR2 := NULL,
policy_description IN VARCHAR2 := NULL,
column_description IN VARCHAR2 := NULL);
ここでは次のように指定します。
-
action
: 次のいずれかの値を1つ選択し、使用するアクションの種類を定義します。-
DBMS_REDACT.MODIFY_COLUMN
(column_name
の値を変更する場合) -
DBMS_REDACT.ADD_COLUMN
((ポリシーですでに保護されている列に加えて)リダクションのために新しい列を追加する場合)この設定はaction
パラメータのデフォルトです。 -
DBMS_REDACT.DROP_COLUMN
(列からリダクションを削除する場合)。 -
DBMS_REDACT.MODIFY_EXPRESSION
(expression
の値を変更する場合)各ポリシーに指定できるポリシー式は1つのみです。つまり、ポリシー式を変更する際は、既存のポリシー式を新しいポリシー式で置換します。 -
DBMS_REDACT.SET_POLICY_DESCRIPTION
(ポリシーの説明を変更する場合) -
DBMS_REDACT.SET_COLUMN_DESCRIPTION
(列の説明を変更する場合)
-
関連項目:
-
残りのパラメータの詳細は、DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文を参照してください。
親トピック: Oracle Data Redactionポリシーの変更
13.14.3 DBMS_REDACT.ALTER_POLICY操作に必要なパラメータ
DBMS_REDACT.ALTER_POLICYプロシージャには、列の追加や変更などの様々な操作を実行できるパラメータが用意されています。
表13-11は、これらのパラメータの組合せを示しています。
表13-11 様々なDBMS_REDACT.ALTER_POLICYの操作に必要なパラメータ
変更内容 | 設定パラメータ |
---|---|
列の追加または変更 |
|
ポリシー式の変更 |
|
ポリシーの説明の変更 |
|
列の説明の変更 |
|
列の削除 |
|
親トピック: Oracle Data Redactionポリシーの変更
13.14.4 チュートリアル: Oracle Data Redactionポリシーの変更
列ごとに独自のリダクション設定を使用して、表またはビューの複数の列をリダクションできます。
この項の演習は、データ・リダクション・ポリシーを変更して、複数の列をリダクションする方法を示しています。また、ポリシーのexpression
設定を変更する方法も示しています。これを実行するには、各段階でDBMS_REDACT.ALTER_POLICY
プロシージャを実行する必要があります。
-
ユーザーの作成およびそれらのユーザーへの権限の付与を行う権限を持つユーザーとして接続します。
たとえば:
CONNECT sec_admin Enter password: password
-
次のユーザーを作成します。
GRANT CREATE SESSION TO dr_admin IDENTIFIED BY password; GRANT CREATE SESSION TO sales_rep IDENTIFIED BY password; GRANT CREATE SESSION TO support_rep IDENTIFIED BY password;
-
ユーザー
dr_admin
に、DBMS_REDACT
PL/SQLパッケージに対するEXECUTE
を付与します。GRANT EXECUTE ON DBMS_REDACT TO dr_admin;
-
ユーザー
OE
として接続します。CONNECT OE Enter password: password
-
顧客のクレジット・カード情報を含む表を作成し移入します。
CREATE TABLE cust_order_info( first_name varchar2(20), last_name varchar2(20), address varchar2(30), city varchar2(30), state varchar2(3), zip varchar2(5), cc_num varchar(19), cc_exp varchar2(7)); INSERT INTO cust_order_info VALUES ('Jane','Dough','39 Mockingbird Lane', 'San Francisco', 'CA', 94114, '5105 1051 0510 5100', '10/2018'); INSERT INTO cust_order_info VALUES ('Mary','Hightower','2319 Maple Street', 'Sonoma', 'CA', 95476, '5111 1111 1111 1118', '03/2019'); INSERT INTO cust_order_info VALUES ('Herbert','Donahue','292 Winsome Way', 'San Francisco', 'CA', 94117, '5454 5454 5454 5454', '08/2018');
-
ユーザー
sales_rep
およびsupport_rep
に、表cust_order_info
に対するSELECT
権限を付与します。GRANT SELECT ON cust_order_info TO sales_rep, support_rep;
-
ユーザー
dr_admin
として接続します。CONNECT dr_admin Enter password: password
-
クレジット・カード番号をリダクションするポリシーを作成し、有効にします。
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'oe', object_name => 'cust_order_info', column_name => 'cc_num', policy_name => 'redact_cust_cc_info', function_type => DBMS_REDACT.REGEXP, function_parameters => NULL, expression => '1=1', regexp_pattern => DBMS_REDACT.RE_PATTERN_CCN, regexp_replace_string => DBMS_REDACT.RE_REDACT_CCN, regexp_position => NULL, regexp_occurrence => NULL, regexp_match_parameter => NULL, policy_description => 'Partially redacts credit card info', column_description => 'cc_num_number lists credit card numbers'); END; /
-
ポリシーを有効期限のリダクションを含めるよう変更します。
BEGIN DBMS_REDACT.ALTER_POLICY( object_schema => 'oe', object_name => 'cust_order_info', policy_name => 'redact_cust_cc_info', action => DBMS_REDACT.ADD_COLUMN, column_name => 'cc_exp', function_type => DBMS_REDACT.RANDOM, expression => '1-1'); END; /
-
ユーザー
sales_rep
がリダクション済の値を表示し、ユーザーsupport_rep
が実際のデータを表示する条件を使用するよう、再度ポリシーを変更します。BEGIN DBMS_REDACT.ALTER_POLICY( object_schema => 'oe', object_name => 'cust_order_info', policy_name => 'redact_cust_cc_info', action => DBMS_REDACT.MODIFY_EXPRESSION, expression => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''SALES_REP'''); END; /
-
ポリシーをテストするために、2人のユーザーに表
cust_order_info
を問い合せさせます。CONNECT support_rep Enter password: password SELECT cc_num, cc_exp FROM OE.cust_order_info; CC_NUM CC_EXP ------------------- ------- 5105 1051 0510 5100 10/2018 5111 1111 1111 1118 03/2019 5454 5454 5454 5454 08/2018
ユーザー
support_rep
は実際のデータを表示できます。CONNECT sales_rep Enter password: password SELECT cc_num, cc_exp FROM OE.cust_order_info; CC_NUM CC_EXP ---------------- ------- ************5100 lST=033 ************1119 OZA.w4C ************5454 B(9+;O1
実際のデータは、ユーザー
sales_rep
を使用してリダクションされます。 -
support_rep
のみがリダクション済データを表示でき、sales_rep
は表示できないようにする条件を含めるよう、cust_order_info
を変更します。CONNECT dr_admin Enter password: password BEGIN DBMS_REDACT.ALTER_POLICY( object_schema => 'oe', object_name => 'cust_order_info', policy_name => 'redact_cust_cc_info', action => DBMS_REDACT.MODIFY_EXPRESSION, expression => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''SUPPORT_REP'''); END; /
-
ユーザーに再度ポリシーをテストさせます。
CONNECT support_rep Enter password: password SELECT cc_num, cc_exp FROM OE.cust_order_info; CC_NUM CC_EXP ---------------- ------- ************5100 1^XMF~` ************1119 qz+9=#S ************5454 *KCaUkm
これで実際のデータがリダクションされるため、ユーザー
support_rep
はこのデータを表示できなくなります。CONNECT sales_rep Enter password: password SELECT cc_num, cc_exp FROM OE.cust_order_info; CC_NUM CC_EXP ------------------- ------- 5105 1051 0510 5100 10/2018 5111 1111 1111 1118 03/2019 5454 5454 5454 5454 08/2018
これでユーザー
sales_rep
は実際のデータを表示できます。 -
このチュートリアルのコンポーネントが不要になった場合、次のようにしてそれらを削除できます。
CONNECT dr_admin Enter password: password BEGIN DBMS_REDACT.DROP_POLICY ( object_schema => 'oe', object_name => 'cust_order_info', policy_name => 'redact_cust_cc_info'); END; / CONNECT sec_admin Enter password: password DROP USER dr_admin; DROP USER sales_rep; DROP USER support_rep; CONNECT OE Enter password: password DROP TABLE cust_order_info;
親トピック: Oracle Data Redactionポリシーの変更
13.15 複数列のリダクション
データ・リダクション・ポリシーで2つ以上の列をリダクションできます。
- 1つの表またはビューのデータ・リダクション・ポリシーへの列の追加
1つの表またはビューで、様々なリダクション・タイプを使用して様々なデータ型の列をリダクションできます。 - 例: 複数列のリダクション
DBMS_REDACT.ALTER_POLICY
プロシージャによって、複数の列をリダクションできます。
親トピック: Oracle Data Redactionポリシーの構成
13.15.1 1つの表またはビューのデータ・リダクション・ポリシーへの列の追加
1つの表またはビューで、様々なリダクション・タイプを使用して様々なデータ型の列をリダクションできます。
-
リダクションする最初の列に対するポリシーを作成します。
-
DBMS_REDACT.ALTER_POLICY
プロシージャを使用して、ポリシーに次の列を追加します。必要に応じて、
action
、column_name
、function_type
およびfunction_parameters
パラメータ(またはregexp_
で始まるパラメータ)を設定して、新しい列に対するリダクションを定義しますが、object_schema
、object_name
、policy_name
またはexpression
パラメータは変更しないでください。リダクションされた各列には、それを作成するために使用したのと同じリダクション・パラメータが引き続き使用されます。
親トピック: 複数列のリダクション
13.15.2 例: 複数列のリダクション
DBMS_REDACT.ALTER_POLICY
プロシージャによって、複数の列をリダクションできます。
例13-12では、既存のデータ・リダクション・ポリシーに列を追加する方法を示しています。この例のaction
パラメータは、DBMS_REDACT.ADD_COLUMN
を使用して新しい列を追加する必要があることを定義しています。新しい列の名前であるcard_num
は、column_name
パラメータによって設定されます。
例13-12 データ・リダクション・ポリシーへの列の追加
BEGIN DBMS_REDACT.ALTER_POLICY( object_schema => 'mavis', object_name => 'cust_info', policy_name => 'redact_cust_user_ids', action => DBMS_REDACT.ADD_COLUMN, column_name => 'card_num', function_type => DBMS_REDACT.FULL, function_parameters => '', expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''ADM'') = ''TRUE'''); END; /
親トピック: 複数列のリダクション
13.16 Oracle Data Redactionポリシーの有効化と無効化
Oracle Data Redactionポリシーは、必要に応じて無効化してから再度有効化できます。
- Oracle Data Redactionポリシーの無効化
DBMS_REDACT.DISABLE_POLICY
プロシージャは、Oracle Data Redactionポリシーを無効化します。 - Oracle Data Redactionポリシーの有効化
DBMS_REDACT.ENABLE_POLICY
プロシージャは、Oracle Data Redactionポリシーを有効化します。
親トピック: Oracle Data Redactionポリシーの構成
13.16.1 Oracle Data Redactionポリシーの無効化
DBMS_REDACT.DISABLE_POLICY
プロシージャは、Oracle Data Redactionポリシーを無効化します。
REDACTION_POLICIES
ビューのPOLICY_NAME
およびENABLE
列を問い合せると、既存のデータ・リダクション・ポリシーの名前およびそれらが有効化されているかがわかります。ただし、ポリシーが存在している場合は、元のポリシーが無効化されていても表またはビューに他のポリシーを作成することはできません。つまり、同じ表の列に別のポリシーを作成する場合、最初のポリシーを削除してから新しいポリシーを作成して使用する必要があります。
-
データ・リダクション・ポリシーを無効化するには、次の構文を使用して
DBMS_REDACT.DISABLE_POLICY
プロシージャを実行します。DBMS_REDACT.DISABLE_POLICY ( object_schema IN VARCHAR2 DEFAULT NULL, object_name IN VARCHAR2, policy_name IN VARCHAR2);
ここでは次のように指定します。
-
object_schema
: データ・リダクション・ポリシーを適用するオブジェクトのスキーマを指定します。この設定を省略(またはNULL
を入力)する場合、Oracle Databaseは現在のスキーマ名を使用します。 -
object_name
: データ・リダクション・ポリシーに使用する表またはビューの名前を指定します。 -
policy_name
: 無効化するポリシーの名前を指定します。
-
例13-13では、データ・リダクション・ポリシーを無効化する方法を示しています。
例13-13 データ・リダクション・ポリシーの無効化
BEGIN DBMS_REDACT.DISABLE_POLICY ( object_schema => 'mavis', object_name => 'cust_info', policy_name => 'redact_cust_user_ids'); END; /
13.16.2 データ・リダクション・ポリシーの有効化
DBMS_REDACT.ENABLE_POLICY
プロシージャは、Oracle Data Redactionポリシーを有効化します。
新しいポリシーを作成した直後に有効化する必要はありません。作成プロセスによって処理されます。既存のデータ・リダクション・ポリシーの名前およびそれらが有効化されているかを確認するには、REDACTION_POLICIES
ビューのPOLICY_NAME
およびENABLE
列を問い合せます。ポリシーを有効にするプロシージャを実行すると、ポリシーはすぐに有効になります。
-
データ・リダクション・ポリシーを有効化するには、次の構文を使用して
DBMS_REDACT.ENABLE_POLICY
プロシージャを実行します。DBMS_REDACT.ENABLE_POLICY ( object_schema IN VARCHAR2 DEFAULT NULL, object_name IN VARCHAR2, policy_name IN VARCHAR2);
ここでは次のように指定します。
-
object_schema
: データ・リダクション・ポリシーを適用するオブジェクトのスキーマを指定します。この設定を省略(またはNULL
を入力)する場合、Oracle Databaseは現在のスキーマ名を使用します。 -
object_name
: データ・リダクション・ポリシーに使用する表またはビューの名前を指定します。 -
policy_name
: 有効化するポリシーの名前を指定します。
-
例13-14では、データ・リダクション・ポリシーを有効化する方法を示しています。
例13-14 データ・リダクション・ポリシーの有効化
BEGIN DBMS_REDACT.ENABLE_POLICY ( object_schema => 'mavis', object_name => 'cust_info', policy_name => 'redact_cust_user_ids'); END; /
13.17 Oracle Data Redactionポリシーの削除
DBMS_REDACT.DROP_POLICYプロシージャ
は、Oracle Data Redactionポリシーを削除します。
Oracle Data Redactionポリシーは、有効であっても無効であっても削除できます。REDACTION_POLICIES
ビューのPOLICY_NAME
列を問い合せて、既存のデータ・リダクション・ポリシーの名前を確認できます。Oracle Data Redactionポリシーに関連付けられた表またはビューを削除すると、ポリシーは自動的に削除されます。ベスト・プラクティスは、まずポリシーを削除し、その後、表またはビューを削除することです。詳細は、ごみ箱が有効になっている場合のOracle Data Redactionポリシーの削除を参照してください。
-
データ・リダクション・ポリシーを削除するには、
DBMS_REDACT.DROP_POLICY
プロシージャを実行します。次の構文を使用します。
DBMS_REDACT.DROP_POLICY ( object_schema IN VARCHAR2 DEFAULT NULL, object_name IN VARCHAR2, policy_name IN VARCHAR2);
ここでは次のように指定します。
-
object_schema
: データ・リダクション・ポリシーが適用されるオブジェクトのスキーマを指定します。この設定を省略(またはNULL
を入力)する場合、Oracle Databaseは現在のスキーマ名を使用します。 -
object_name
: データ・リダクション・ポリシーに使用する表またはビューの名前を指定します。 -
policy_name
: 削除するポリシーの名前を指定します。
-
DBMS_REDACT.DROP_POLICY
プロシージャを実行した後、削除はすぐに有効になります。
例13-15では、データ・リダクション・ポリシーを削除する方法を示しています。
例13-15 データ・リダクション・ポリシーの削除
BEGIN DBMS_REDACT.DROP_POLICY ( object_schema => 'mavis', object_name => 'cust_info', policy_name => 'redact_cust_user_ids'); END; /
親トピック: Oracle Data Redactionポリシーの構成
13.18 チュートリアル: SQL式を使用したリダクションされた値を含むレポートの作成
SQL式を使用して、Oracle Data Redactionポリシーが定義された列に基づくレポートを作成できます。
SQL式に使用される値はリダクションされます。このリダクションはSQL式が評価される前に実行され、レポートに表示される結果の値は、リダクションされたSQL式の結果全体ではなく、リダクションされた値に対して評価されたSQL式の最終結果になります。
-
HR.EMPLOYEES
表に対して次のようなデータ・リダクション・ポリシーを作成します。このポリシーにより
9
という数値を持つSALARY
列の最初の4桁の値およびCOMMISSION_PCT
列の最初の1桁の値が9
に置換されます。BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'HR', object_name => 'EMPLOYEES', column_name => 'SALARY', column_description => 'emp_sal_comm shows employee salary and commission', policy_name => 'redact_emp_sal_comm', policy_description => 'Partially redacts the emp_sal_comm column', function_type => DBMS_REDACT.PARTIAL, function_parameters => '9,1,4', expression => '1=1'); END; / BEGIN DBMS_REDACT.ALTER_POLICY( object_schema => 'HR', object_name => 'EMPLOYEES', policy_name => 'redact_emp_sal_comm', action => DBMS_REDACT.ADD_COLUMN, column_name => 'COMMISSION_PCT', function_type => DBMS_REDACT.PARTIAL, function_parameters => '9,1,1', expression => '1=1'); END; /
-
HR
スキーマにログインして、次のレポートを実行します。このレポートでは、SQL式
(SALARY + COMMISSION_PCT)
を使用して、従業員の給料と歩合を組み合せます。SELECT (SALARY + COMMISSION_PCT) total_emp_compensation FROM HR.EMPLOYEES WHERE DEPARTMENT_ID = 80; TOTAL_EMP_COMPENSATION ---------------------- 9999.9 9999.95 99990.95 ...
-
レポートには、連結などのSQL式を使用します。
たとえば:
SELECT 'Employee ID ' || EMPLOYEE_ID || ' has a salary of ' || SALARY || ' and a commission of ' || COMMISSION_PCT || '.' detailed_emp_compensation FROM HR.EMPLOYEES WHERE DEPARTMENT_ID = 80 ORDER BY EMPLOYEE_ID; DETAILED_EMP_COMPENSATION ------------------------------------------------------------- Employee ID 150 has a salary of 99990 and a commission of .9. Employee ID 151 has a salary of 9999 and a commission of .95. Employee ID 152 has a salary of 9999 and a commission of .95. ...
-
redact_emp_sal_comm
データ・リダクション・ポリシーを作成したユーザーを接続し、次の文を実行してポリシーを削除します。BEGIN DBMS_REDACT.DROP_POLICY ( object_schema => 'HR', object_name => 'EMPLOYEES', policy_name => 'redact_emp_sal_comm'); END; /
親トピック: Oracle Data Redactionポリシーの構成
13.19 Oracle Data Redactionポリシーのデータ・ディクショナリ・ビュー
Oracle Databaseには、データ・リダクション・ポリシーに関する情報をリストするデータ・ディクショナリ・ビューが用意されています。
これらのビューを問い合せる前に、SELECT_CATALOG_ROLE
ロールを付与する必要があります。
表13-12に、データ・リダクションのデータ・ディクショナリ・ビューを示します。
表13-12 データ・リダクション・ビュー
ビュー | 説明 |
---|---|
|
データベースのリダクションされたすべての列を示し、列が存在する表またはビューの所有者、オブジェクト名、列名、リダクション機能のタイプ、リダクション機能に対するパラメータ(該当する場合)およびリダクション・ポリシーの説明の情報を提供します。ポリシー式が作成されている場合、デフォルトのオブジェクト全体にわたるポリシー式のSQL式を表示します。 |
|
既存のポリシー式の名前およびそれらのSQL式を表示します |
|
データベースのすべてのデータ・リダクション・ポリシーを示します。これには、オブジェクトの所有者、オブジェクト名、ポリシー名、ポリシー式およびポリシーが有効かどうかに関する情報と、データ・リダクション・ポリシーの説明が含まれます。 |
|
完全リダクションを使用するデータ・リダクション・ポリシーの現在のリダクション値を表示します。 |
親トピック: Oracle Data Redactionポリシーの構成