3.5 データ・リダクション・ポリシーの条件を定義する式の使用
DBMS_REDACT.ADD_POLICY
またはDBMS_REDACT.ALTER_POLICY
プロシージャのexpression
パラメータは、これらのポリシーが適用される条件を設定します。
3.5.1 データ・リダクション・ポリシーでの式の使用について
DBMS_REDACT.ADD_POLICY
およびDBMS_REDACT.ALTER_POLICY
のexpression
パラメータに、リダクションを有効化するためにTRUE
に評価される必要があるブール式を定義します。
expression
パラメータで定義される式は、Oracle Data Redactionポリシーのデフォルトの式です。データ・リダクション・ポリシーによってリダクションされることになっている列に対して名前付きポリシー式を適用した場合、名前付きポリシー式がデータ・リダクション・ポリシーで定義された式よりも優先されます。この式パラメータに1=1
が指定されている場合(これはTRUE
に評価されるポリシー式です)、問合せ元ユーザーがリダクション・ポリシーから除外されていなければ、リダクションが実行されるようになります。この条件を使用すると、リダクションされる列からのフェッチ操作の間のCPU時間が短縮されます。ポリシー式を評価する必要性を回避することで、データ・リダクション・ポリシーによって保護されている列からのフェッチのパフォーマンスが向上します。
他の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
システムまたはスキーマ権限を持つユーザーでは、すべてのデータ・リダクション・ポリシーがバイパスされるため、問合せの結果はリダクションされないことに注意してください。データ・リダクション・ポリシーからユーザーを除外する場合、特定の権限(DBA
ロールなど)を持つユーザーおよびOracle Data Pumpによる除外への影響に注意する必要があります。
3.5.2 データ・リダクション式でサポートされているファンクション
特定のタイプのデータを返すファンクション(SYS_CONTEXT
ネームスペースなど)を使用する式を作成できます。
3.5.2.1 ネームスペース・ファンクションを使用した式
データ・リダクション式で、ネームスペース・ファンクションSYS_CONTEXT
およびXS_SYS_CONTEXT
を使用できます。
表3-3 ネームスペース・ファンクションを使用した式
ネームスペース・ファンクション | 説明 |
---|---|
|
ネームスペースに関連した値を返します。次のネームスペース・ファンクションが有効です。
|
|
|
3.5.2.2 SUBSTRファンクションを使用した式
データ・リダクション式では、指定した文字列の部分を返す(文字1–3など)SUBSTR
ファンクションを使用できます。最初のパラメータは定数文字列か、SYS_CONTEXT
ファンクションまたはXS_SYS_CONTEXT
ファンクションへのコールである必要があります。
表3-4 SUBSTR文字列ファンクションを使用した式
SUBSTR文字列ファンクション | 説明 |
---|---|
|
|
|
入力値の指定された部分をバイトで返します |
|
入力値の指定された部分をUnicodeの完全文字で返します |
|
入力値の指定された部分をUCS2コード・ポイントで返します |
|
入力値の指定された部分をUCS4コード・ポイントで返します |
関連トピック
3.5.2.3 文字列の長さファンクションを使用した式
データ・リダクション式では、文字列の長さを返すファンクションを使用できます。
Oracle Databaseは、これらの演算子の各々への引数が、定数文字列であるか、SYS_CONTEXT
ファンクションまたはXS_SYS_CONTEXT
ファンクションへのコールであるかについても確認します。
表3-5 文字列ファンクションを使用した式
文字列ファンクション | 説明 |
---|---|
|
入力 |
|
入力値の長さをバイトで返します |
|
入力値の長さをUnicodeの完全文字で返します |
|
入力値の長さをUCS2コード・ポイントで返します |
|
入力値の長さをUCS4コード・ポイントで返します |
関連トピック
3.5.2.4 Oracle Application Expressファンクションを使用した式
データ・リダクション式で、Oracle Application Expressファンクションを使用できます。
表3-6 Oracle Application Expressファンクション
Oracle Application Expressファンクション | 説明 |
---|---|
|
アイテムのセッション・ステートを返します。 |
|
数値項目の数値を返します。 |
関連トピック
3.5.2.5 Oracle Label Securityファンクションを使用した式
Oracle Label Securityファンクションをデータ・リダクション式とともに使用できます。
表3-7 Oracle Label Securityファンクション
Oracle Label Securityファンクション | 説明 |
---|---|
|
Oracle Label Securityポリシーのセッション・ラベルが別のOLSラベルに優位であるか同位であるかを確認します |
|
1つのOLSラベルが2つ目のOLSラベルより優位であるか確認します。 Oracle Database 12.1より前のリリースで使用されていた |
|
1つのOLSラベルが2つ目のOLSラベルより優位であるか確認します |
|
1つのOLSラベルが2つ目のOLSラベルより優位であるか確認します |
|
1つのOLSラベルが2つ目のOLSラベルより優位であり、同位ではないかを確認します |
|
1つのOLSラベルが2つ目のOLSラベルより優位であり、同位ではないかを確認します |
|
1つのOLSラベルが2つ目のOLSラベルに優位であるか、または特定のOLSポリシーのセッション・ラベルがOLSラベルに優位であるかを確認します |
|
ユーザーがポリシーで保護されている行を読み取ることができるかどうかをチェックします |
|
現行のセッションOLSラベルを返します |
|
文字列をOLSラベル・タグに変換します |
|
指定したOLSポリシーに関連付けられているラベルを返します |
* Oracle Data Redactionが、それらのパラメータが定数であるか、ファンクションSA_UTL.NUMERIC_LABEL
、CHAR_TO_LABEL
、SA_SESSION.LABEL
のいずれかのみのコールでありこれらのファンクションへの引数が定数であることを確認します。
3.5.4 データベース・ロールに基づくリダクション・ポリシーの適用
データベース・ロールに基づいてデータ・リダクション・ポリシーを適用できます。
SYS_CONTEXT
ファンクションのSYS_SESSION_ROLES
名前空間を使用して、ユーザー・ロールに基づいてポリシーを適用します。
この名前空間には、各ロールの属性が含まれます。指定されたロールが、問合せを行ったアプリケーション・ユーザーに対して有効化されている場合、属性の値はTRUE
で、ロールが有効化されていない場合、属性の値はFALSE
です。式がTRUE
の場合は、リダクションされたデータがユーザーに返されます。式がFALSE
の場合は、実際のデータがユーザーに返されます。
DBMS_REDACT.ADD_POLICY
expression
パラメータを使用してポリシーを設定し、supervisor
ロールが有効化されているアプリケーション・ユーザーには実際のデータを表示し、他のすべてのアプリケーション・ユーザーにはデータをリダクションする方法を示します。expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''SUPERVISOR'') = ''FALSE'''
expression
パラメータで複数のロールを指定できます。次の例では、SUPERVISOR
、CLERK
およびTEMP_WORKER
ロールの存在をチェックします。実際のデータは、SUPERVISOR
ロールがあるユーザーに表示されます。CLERK
またはTEMP_WORKER
ロールがあるユーザーには、リダクションされたデータが表示されます。expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''SUPERVISOR'') = ''FALSE''
OR SYS_CONTEXT(''SYS_SESSION_ROLES'',''CLERK'') = ''TRUE''
OR SYS_CONTEXT(''SYS_SESSION_ROLES'',''TEMP_WORKER'') = ''TRUE'''
定義者権限で実行される名前付きPL/SQLブロックでは、すべてのロールは使用禁止になっています。プロシージャおよびファンクションは、デフォルトでは、定義者権限を使用して作成されます。SYS_SESSION_ROLES
を使用するポリシー式が有効になるようにする場合は、実行者権限となるプロシージャまたはファンクションを作成して、有効化されているロールが実際に使用されるようにします。または、コード・ベースのアクセス制御を使用してロールをプログラム・ユニット(ファンクション、パッケージまたはプロシージャ)に付与し、そのプログラム・ユニットに、そのロールを定義者権限または実行者権限のどちらかで使用できるようにします。詳細は、『Oracle Databaseセキュリティ・ガイド』の定義者権限および実行者権限のセキュリティの管理を参照してください。
3.5.5 Application Expressセッション・ステートに基づくリダクション・ポリシーの適用
Oracle Application Express (APEX)セッション・ステートに基づいて、データ・リダクション・ポリシーを適用できます。
関連トピック
3.5.6 Oracle Label Securityラベル優位に基づくリダクション・ポリシーの適用
Oracle Label Securityラベルの優位性に基づきデータ・リダクション・ポリシーを適用する条件を設定できます。
関連トピック