この章では、表およびスキーマに対するポリシーを管理するためのSA_POLICY_ADMINパッケージについて説明します。この章の内容は、次のとおりです。
表にポリシーを適用する場合、ポリシーは自動的に有効になります。ポリシーを無効にすると保護がオフになりますが、ポリシーは表に適用されたままになります。ポリシーを有効にすると、特定の表またはスキーマに対するそのポリシーの保護がオンになり、強制されます。
ポリシーを削除すると、表またはスキーマから完全に削除されます。ただし、ポリシーのラベル列およびそのラベルは、明示的に削除しないかぎり表に残ります。
今後スキーマに作成できる表のデフォルトのポリシー強制オプションを変更できます。ただし、この変更は、スキーマにある既存の表のポリシー施行オプションには反映されません。
既存の表の強制オプションを変更するには、最初に表からポリシーを削除し、目的の変更を行ってから、ポリシーを表に再適用します。
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を使用します。
Oracle Internet Directory対応Oracle Label Security構成では、POLICY_SUBSCRIBEプロシージャを使用して、APPLY_TABLE_POLICYおよびAPPLY_SCHEMA_POLICYで使用できるようにポリシーにサブスクライブします。このプロシージャは、そのポリシーを表またはスキーマに適用する前にコールする必要があります。サブスクライブは1回のみで、表またはスキーマ内でポリシーを使用するたびにサブスクライブする必要はありません。
Oracle Internet Directory対応Oracle Label Security構成では、POLICY_UNSUBSCRIBEプロシージャを使用してポリシーのサブスクライブを取り消します。このプロシージャを使用できるのは、ポリシーが使用されていない場合、つまり、表またはスキーマに適用されていない場合のみです(表またはスキーマに適用されている場合にサブスクライブを取り消すには、すべての適用先から削除する必要があります)。(表またはスキーマに適用されている場合は、すべての表またはスキーマから削除してから、サブスクライブ解除する必要があります。)Oracle Internet Directoryでポリシーを削除できるのは(付録Bのolsadmintool droppolicy)、そのOracle Internet Directoryに登録したデータベースでサブスクライブされていない場合のみです。
Oracle Label Securityのポリシーの管理には、次の2組のファンクションを使用できます。
スキーマ・レベルのファンクションは、便宜のために用意されています。ただし、表レベルで実行する管理操作により、スキーマ・レベルで実行した操作がオーバーライドされることに注意してください。
表のポリシーを管理するには、SA_POLICY_ADMINパッケージに対するEXECUTE権限を持ち、policy_DBAロールを付与されている必要があります。この項の内容は、次のとおりです。
APPLY_TABLE_POLICYプロシージャを使用して、指定したポリシーを表に追加します。ポリシーのラベル列が存在しない場合は表に追加され、NULLに設定されます。ポリシーは、適用すると自動的に有効化されます。表のオプション、ラベル付けファンクションまたは述語を変更するには、最初にポリシーを削除してから再適用する必要があります。
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を使用して)結合する追加の述語です。 |
REMOVE_TABLE_POLICYプロシージャでは、指定したポリシーを表から削除します。ポリシーの述語とDMLトリガーが表から削除され、ポリシーのラベル列をオプションで削除できます。ポリシーは、それにより保護されているスキーマに属する表から削除できます。
DISABLE_TABLE_POLICYプロシージャでは、施行オプション、ラベル付けファンクションまたは述語の値を変更せずに、指定した表のポリシーの施行を無効化します。RLS述語とDMLトリガーは表から削除されます。
ENABLE_TABLE_POLICYプロシージャでは、RLS述語とDMLトリガーを再適用して、指定した表に対する現行の施行オプション、ラベル付けファンクションおよび述語を再有効化します。
スキーマのポリシーを管理するには、SA_POLICY_ADMINパッケージに対するEXECUTE権限を持ち、policy_DBAロールを付与されている必要があります。
この項には、次の項目が含まれます。
ポリシーは、個々の表に適用するだけでなくスキーマ・レベルでも適用できます。APPLY_SCHEMA_POLICYプロシージャでは、指定したポリシーをスキーマ内の既存の(まだポリシーが適用されていない)すべての表に適用し、各表に対するポリシーを有効化します。その後は、スキーマに新規の表が作成されるたびに、スキーマのデフォルト・オプションを使用して、その表に自動的にポリシーが適用されます。スキーマ内の既存の表で、すでにポリシーが適用されているものは変更されません。
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にすると、ポリシーのデフォルト・オプションを使用してポリシーがスキーマ内の表に適用されます。
ALTER_SCHEMA_POLICYプロシージャでは、ポリシーのデフォルト施行オプションを変更します。スキーマ内で新規に作成した表には、新規の施行オプションが自動的に適用されます。スキーマ内の既存の表は影響を受けません。
PROCEDURE ALTER_SCHEMA_POLICY ( policy_name IN VARCHAR2, schema_name IN VARCHAR2, default_options IN VARCHAR2);
パラメータ | 指定 |
---|---|
policy_name | 既存のポリシーです。 |
schema_name | 表を含むスキーマです。 |
default_options | スキーマ内の新規の表に使用するデフォルト・オプションです。 |
スキーマではなく表に対する施行オプションを変更するには、最初に表からポリシーを削除し、必要な変更を行ってから、ポリシーを再適用する必要があります。
スキーマに対する施行オプションを変更すると、変更結果は次回にそのスキーマに表を作成するときに有効になります。したがって、スキーマ内の表ごとに異なるポリシー施行オプションが有効になる場合があります。
REMOVE_SCHEMA_POLICYプロシージャでは、指定したポリシーをスキーマから削除します。ポリシーはスキーマ内のすべての表から削除され、オプションでポリシーのラベル列がすべての表から削除されます。
DISABLE_SCHEMA_POLICYプロシージャでは、施行オプション、ラベル付けファンクションまたは述語の値を変更せずに、指定したスキーマ内のすべての表に対するポリシーの施行を無効化します。RLS述語とDMLトリガーは、スキーマ内のすべての表から削除されます。
ENABLE_SCHEMA_POLICYプロシージャでは、RLS述語とDMLトリガーを再適用して、指定したスキーマ内の表に対する現行の施行オプション、ラベル付けファンクションおよび述語を再有効化します。
スキーマでOracle Label Securityのポリシーを使用する場合は、次の側面に注意してください。
ポリシーを空のスキーマに適用すると、そのスキーマ内で表を作成するたびにポリシーが適用されます。ポリシーをスキーマに適用すると、選択したデフォルト・オプションは追加するすべての表に適用されます。
保護を解除するために表からポリシーを削除してから、SA_POLICY_ADMIN.ENABLE_SCHEMA_POLICYを実行しても、その表の保護は解除されたままになります。表を再び保護する場合は、その表にポリシーを適用するか、スキーマにポリシーを再適用する必要があります。
すでにポリシーで保護されている表を含むスキーマにポリシーを適用すると、将来のすべての表には、ポリシーの適用時に指定した新規オプションが設定されます。既存の表に設定されていたオプションは変更されません。