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ラベルの優位性に基づきデータ・リダクション・ポリシーを適用する条件を設定できます。
関連トピック