ヘッダーをスキップ
Oracle® Label Security管理者ガイド
11gリリース2 (11.2)
E92085-01
  目次へ
目次
索引へ
索引

前へ
前へ
 
次へ
次へ
 

10 表およびスキーマへのポリシーの適用

この章では、表およびスキーマに対するポリシーを管理するためのSA_POLICY_ADMINパッケージについて説明します。この章の内容は、次のとおりです。

10.1 ポリシー管理用語

表にポリシーを適用する場合、ポリシーは自動的に有効になります。ポリシーを無効にすると保護がオフになりますが、ポリシーは表に適用されたままになります。ポリシーを有効にすると、特定の表またはスキーマに対するそのポリシーの保護がオンになり、強制されます。

ポリシーを削除すると、表またはスキーマから完全に削除されます。ただし、ポリシーのラベル列およびそのラベルは、明示的に削除しないかぎり表に残ります。

今後スキーマに作成できる表のデフォルトのポリシー強制オプションを変更できます。ただし、この変更は、スキーマにある既存の表のポリシー施行オプションには反映されません。

既存の表の強制オプションを変更するには、最初に表からポリシーを削除し、目的の変更を行ってから、ポリシーを表に再適用します。

10.2 Oracle Internet Directory対応Oracle Label Securityでのポリシーのサブスクライブ

Oracle Internet Directory対応Oracle Label Securityでは、ポリシーを(APPLY_TABLE_POLICYまたはAPPLY_SCHEMA_POLICYにより)適用する前にサブスクライブする必要があります。スタンドアロンOracle Label Securityインストールでは、後者のファンクションを直接使用できるため、サブスクライブする必要はありません。

ポリシーをサブスクライブするには、次の項で説明するようにSA_POLICY_ADMIN.POLICY_SUBSCRIBEを使用します。

これらのポリシーを削除するには、適用先の表またはスキーマからポリシーを削除し、サブスクライブを取り消す必要があります。

ポリシーのサブスクライブを取り消すには、以降の項で説明するようにSA_POLICY_ADMIN.POLICY_UNSUBSCRIBEを使用します。

10.2.1 SA_POLICY_ADMIN.POLICY_SUBSCRIBEを使用したポリシーへのサブスクライブ

Oracle Internet Directory対応Oracle Label Security構成では、POLICY_SUBSCRIBEプロシージャを使用して、APPLY_TABLE_POLICYおよびAPPLY_SCHEMA_POLICYで使用できるようにポリシーにサブスクライブします。このプロシージャは、そのポリシーを表またはスキーマに適用する前にコールする必要があります。サブスクライブは1回のみで、表またはスキーマ内でポリシーを使用するたびにサブスクライブする必要はありません。

10.2.1.1 構文

PROCEDURE POLICY_SUBSCRIBE(
  policy_name     IN VARCHAR2);

policy_nameには既存のポリシーを指定します。


注意:

このプロシージャをポリシーの使用前にコールする必要があるのは、Oracle Internet Directory対応Oracle Label Security構成の場合のみです。スタンドアロンOracle Label Securityの場合は、APPLY_TABLE_POLICYおよびAPPLY_SCHEMA_POLICYでポリシーを直接使用でき、サブスクライブは不要です。

10.2.1.1.1 例:

次の文では、表およびスキーマに適用して使用できるように、データベースをHUMAN_RESOURCESポリシーにサブスクライブします。

SA_POLICY_ADMIN.POLICY_SUBSCRIBE('human_resources');

10.2.2 SA_POLICY_ADMIN.POLICY_UNSUBSCRIBEを使用したポリシーへのサブスクライブ取消し

Oracle Internet Directory対応Oracle Label Security構成では、POLICY_UNSUBSCRIBEプロシージャを使用してポリシーのサブスクライブを取り消します。このプロシージャを使用できるのは、ポリシーが使用されていない場合、つまり、表またはスキーマに適用されていない場合のみです(表またはスキーマに適用されている場合にサブスクライブを取り消すには、すべての適用先から削除する必要があります)。(表またはスキーマに適用されている場合は、すべての表またはスキーマから削除してから、サブスクライブ解除する必要があります。)Oracle Internet Directoryでポリシーを削除できるのは(付録Bのolsadmintool droppolicy)、そのOracle Internet Directoryに登録したデータベースでサブスクライブされていない場合のみです。

10.2.2.1 構文

PROCEDURE POLICY_UNSUBSCRIBE(
  policy_name  IN VARCHAR2);

policy_nameには既存のポリシーを指定します。

10.2.2.1.1 例:

次の文では、HUMAN_RESOURCESポリシーに対するデータベースのサブスクライブを取り消します。

SA_POLICY_ADMIN.POLICY_UNSUBSCRIBE('human_resources');

10.3 表およびスキーマのポリシー管理ファンクション

Oracle Label Securityのポリシーの管理には、次の2組のファンクションを使用できます。

  • 表レベルでポリシーを管理するファンクション

  • スキーマ・レベルでポリシーを管理するファンクション

スキーマ・レベルのファンクションは、便宜のために用意されています。ただし、表レベルで実行する管理操作により、スキーマ・レベルで実行した操作がオーバーライドされることに注意してください。

表10-1 ポリシー管理ファンクション

用途 表レベルのファンクション スキーマレベルのファンクション

ポリシーの適用

APPLY_TABLE_POLICY

APPLY_SCHEMA_POLICY

ポリシーの変更

該当なし

ALTER_SCHEMA_POLICY

ポリシーの無効化

DISABLE_TABLE_POLICY

DISABLE_SCHEMA_POLICY

ポリシーの再有効化

ENABLE_TABLE_POLICY

ENABLE_SCHEMA_POLICY

ポリシーの削除

REMOVE_TABLE_POLICY

REMOVE_SCHEMA_POLICY


10.4 SA_POLICY_ADMINを使用した表のポリシーの管理

表のポリシーを管理するには、SA_POLICY_ADMINパッケージに対するEXECUTE権限を持ち、policy_DBAロールを付与されている必要があります。この項の内容は、次のとおりです。

10.4.1 SA_POLICY_ADMIN.APPLY_TABLE_POLICYを使用したポリシーの適用

APPLY_TABLE_POLICYプロシージャを使用して、指定したポリシーを表に追加します。ポリシーのラベル列が存在しない場合は表に追加され、NULLに設定されます。ポリシーは、適用すると自動的に有効化されます。表のオプション、ラベル付けファンクションまたは述語を変更するには、最初にポリシーを削除してから再適用する必要があります。

10.4.1.1 構文

PROCEDURE APPLY_TABLE_POLICY (
  policy_name       IN VARCHAR2,
  schema_name       IN VARCHAR2,
  table_name        IN VARCHAR2,
  table_options     IN VARCHAR2 DEFAULT NULL,
  label_function    IN VARCHAR2 DEFAULT NULL,
  predicate         IN VARCHAR2 DEFAULT NULL);
パラメータ 指定
policy_name 既存のポリシーです。
schema_name 表を含むスキーマです。
table_name ポリシーで制御する表です。
table_options 表に使用するポリシー施行オプションのカンマ区切りのリストです。NULLの場合は、ポリシーのデフォルト・オプションが使用されます。
label_function デフォルトとして使用するラベル値を戻すファンクションをコールする文字列です。たとえば、my_label(:new.dept,:new.status)を指定すると、行のDEPT列とSTATUS列の新規の値に基づいてラベルが計算されます。
predicate READ_CONTROLのラベルベースの述語と(ANDまたはORを使用して)結合する追加の述語です。

10.4.1.1.1 例:

次の文では、SA_DEMOスキーマのEMP表にHUMAN_RESOURCESポリシーを適用します。

SA_POLICY_ADMIN.APPLY_TABLE_POLICY('human_resources',
'sa_demo','emp','no_control');

10.4.2 SA_POLICY_ADMIN.REMOVE_TABLE_POLICYを使用したポリシーの削除

REMOVE_TABLE_POLICYプロシージャでは、指定したポリシーを表から削除します。ポリシーの述語とDMLトリガーが表から削除され、ポリシーのラベル列をオプションで削除できます。ポリシーは、それにより保護されているスキーマに属する表から削除できます。

10.4.2.1 構文

PROCEDURE REMOVE_TABLE_POLICY (
policy_name        IN VARCHAR2,
schema_name        IN VARCHAR2,
table_name         IN VARCHAR2,
  drop_column      IN BOOLEAN DEFAULT FALSE);
パラメータ 指定
policy_name 既存のポリシーです。
schema_name 表を含むスキーマです。
table_name 表です。
drop_column 列を削除するかどうかを指定します。TRUEの場合はポリシーの列が表から削除され、それ以外の場合は削除されません。

10.4.2.1.1 例:

次の文では、SA_DEMOスキーマのEMP表からHUMAN_RESOURCESポリシーを削除します。

SA_POLICY_ADMIN.REMOVE_TABLE_POLICY('human_resources','sa_demo','emp');

10.4.3 SA_POLICY_ADMIN.DISABLE_TABLE_POLICYを使用したポリシーの無効化

DISABLE_TABLE_POLICYプロシージャでは、施行オプション、ラベル付けファンクションまたは述語の値を変更せずに、指定した表のポリシーの施行を無効化します。RLS述語とDMLトリガーは表から削除されます。

10.4.3.1 構文

PROCEDURE DISABLE_TABLE_POLICY (
  policy_name      IN VARCHAR2,
  schema_name      IN VARCHAR2,
  table_name       IN VARCHAR2);
パラメータ 指定
policy_name 既存のポリシーです。
schema_name 表を含むスキーマです。
table_name 表です。

10.4.3.1.1 例:

次の文では、SA_DEMOスキーマのEMP表に対するHUMAN_RESOURCESポリシーを無効化します。

SA_POLICY_ADMIN.DISABLE_TABLE_POLICY('human_resources','sa_demo','emp');

10.4.4 SA_POLICY_ADMIN.ENABLE_TABLE_POLICYを使用したポリシーの再有効化

ENABLE_TABLE_POLICYプロシージャでは、RLS述語とDMLトリガーを再適用して、指定した表に対する現行の施行オプション、ラベル付けファンクションおよび述語を再有効化します。

10.4.4.1 構文

PROCEDURE ENABLE_TABLE_POLICY (
  policy_name     IN VARCHAR2,
  schema_name     IN VARCHAR2,
  table_name      IN VARCHAR2);
パラメータ 指定
policy_name 既存のポリシーです。
schema_name 表を含むスキーマです。
table_name 表です。

10.4.4.1.1 例:

次の文では、SA_DEMOスキーマのEMP表に対するHUMAN_RESOURCESポリシーを再有効化します。

SA_POLICY_ADMIN.ENABLE_TABLE_POLICY('human_resources','sa_demo','emp');

10.5 SA_POLICY_ADMINを使用したスキーマに対するポリシーの管理

スキーマのポリシーを管理するには、SA_POLICY_ADMINパッケージに対するEXECUTE権限を持ち、policy_DBAロールを付与されている必要があります。

この項には、次の項目が含まれます。

10.5.1 SA_POLICY_ADMIN.APPLY_SCHEMA_POLICYを使用したポリシーの適用

ポリシーは、個々の表に適用するだけでなくスキーマ・レベルでも適用できます。APPLY_SCHEMA_POLICYプロシージャでは、指定したポリシーをスキーマ内の既存の(まだポリシーが適用されていない)すべての表に適用し、各表に対するポリシーを有効化します。その後は、スキーマに新規の表が作成されるたびに、スキーマのデフォルト・オプションを使用して、その表に自動的にポリシーが適用されます。スキーマ内の既存の表で、すでにポリシーが適用されているものは変更されません。

10.5.1.1 構文

PROCEDURE APPLY_SCHEMA_POLICY (
  policy_name        IN VARCHAR2,
  schema_name        IN VARCHAR2,
  default_options    IN VARCHAR2 DEFAULT NULL);
パラメータ 指定
policy_name 既存のポリシーです。
schema_name 表を含むスキーマです。
default_options スキーマ内の表に使用するデフォルト・オプションです。

default_optionsパラメータをNULLにすると、ポリシーのデフォルト・オプションを使用してポリシーがスキーマ内の表に適用されます。

10.5.2 施行オプションの変更: SA_POLICY_ADMIN.ALTER_SCHEMA_POLICY

ALTER_SCHEMA_POLICYプロシージャでは、ポリシーのデフォルト施行オプションを変更します。スキーマ内で新規に作成した表には、新規の施行オプションが自動的に適用されます。スキーマ内の既存の表は影響を受けません。

10.5.2.1 構文

PROCEDURE ALTER_SCHEMA_POLICY (
  policy_name         IN VARCHAR2,
  schema_name         IN VARCHAR2,
  default_options     IN VARCHAR2);
パラメータ 指定
policy_name 既存のポリシーです。
schema_name 表を含むスキーマです。
default_options スキーマ内の新規の表に使用するデフォルト・オプションです。

スキーマではなく表に対する施行オプションを変更するには、最初に表からポリシーを削除し、必要な変更を行ってから、ポリシーを再適用する必要があります。

スキーマに対する施行オプションを変更すると、変更結果は次回にそのスキーマに表を作成するときに有効になります。したがって、スキーマ内の表ごとに異なるポリシー施行オプションが有効になる場合があります。

10.5.3 SA_POLICY_ADMIN.REMOVE_SCHEMA_POLICYを使用したポリシーの削除

REMOVE_SCHEMA_POLICYプロシージャでは、指定したポリシーをスキーマから削除します。ポリシーはスキーマ内のすべての表から削除され、オプションでポリシーのラベル列がすべての表から削除されます。

10.5.3.1 構文

PROCEDURE REMOVE_SCHEMA_POLICY (
  policy_name     IN VARCHAR2,
  schema_name     IN VARCHAR2,
  drop_column     IN BOOLEAN DEFAULT FALSE);
パラメータ 指定
policy_name 既存のポリシーです。
schema_name 表を含むスキーマです。
drop_column TRUEの場合は、ポリシーの列が表から削除されます。それ以外の場合、列は残ります。

10.5.4 SA_POLICY_ADMIN.DISABLE_SCHEMA_POLICYを使用したポリシーの無効化

DISABLE_SCHEMA_POLICYプロシージャでは、施行オプション、ラベル付けファンクションまたは述語の値を変更せずに、指定したスキーマ内のすべての表に対するポリシーの施行を無効化します。RLS述語とDMLトリガーは、スキーマ内のすべての表から削除されます。

10.5.4.1 構文

PROCEDURE DISABLE_SCHEMA_POLICY (
  policy_name    IN VARCHAR2,
  schema_name    IN VARCHAR2);
パラメータ 指定
policy_name 既存のポリシーです。
schema_name 表を含むスキーマです。

10.5.5 SA_POLICY_ADMIN.ENABLE_SCHEMA_POLICYを使用したポリシーの再有効化

ENABLE_SCHEMA_POLICYプロシージャでは、RLS述語とDMLトリガーを再適用して、指定したスキーマ内の表に対する現行の施行オプション、ラベル付けファンクションおよび述語を再有効化します。

10.5.5.1 構文

PROCEDURE ENABLE_TABLE_POLICY (
  policy_name    IN VARCHAR2,
  schema_name    IN VARCHAR2);
パラメータ 指定
policy_name 既存のポリシーです。
schema_name 表を含むスキーマです。

これは1つの表に対するポリシーを有効化しているように見えますが、スキーマ内のすべての表が対象となります。

10.5.6 スキーマに対するポリシーの問題

スキーマでOracle Label Securityのポリシーを使用する場合は、次の側面に注意してください。

  • ポリシーを空のスキーマに適用すると、そのスキーマ内で表を作成するたびにポリシーが適用されます。ポリシーをスキーマに適用すると、選択したデフォルト・オプションは追加するすべての表に適用されます。

  • 保護を解除するために表からポリシーを削除してから、SA_POLICY_ADMIN.ENABLE_SCHEMA_POLICYを実行しても、その表の保護は解除されたままになります。表を再び保護する場合は、その表にポリシーを適用するか、スキーマにポリシーを再適用する必要があります。

すでにポリシーで保護されている表を含むスキーマにポリシーを適用すると、将来のすべての表には、ポリシーの適用時に指定した新規オプションが設定されます。既存の表に設定されていたオプションは変更されません。