XS_SECURITY_CLASSパッケージ

XS_SECURITY_CLASSパッケージには、セキュリティ・クラスおよびその権限を作成、管理および削除するためのプロシージャが含まれます。パッケージには、セキュリティ・クラスの継承を管理するためのプロシージャも含まれます。

XS_SECURITY_CLASSパッケージのセキュリティ・モデル

XS_SECURITY_CLASSパッケージは、SYSスキーマに作成されます。すべてのスキーマのACL、セキュリティ・クラス、セキュリティ・ポリシーなどのスキーマ・オブジェクトを管理できるADMIN_ANY_SEC_POLICYDBAロールに付与されます。

ユーザーは、スキーマに対するRESOURCEロールを付与されている場合に、自身のスキーマ内のスキーマ・オブジェクトを管理できます。RESOURCEロールおよびXS_RESOURCEアプリケーション・ロールには、アプリケーション内のポリシー管理を達成するために、スキーマ内のスキーマ・オブジェクトの管理および権限付与されたスキーマ内のポリシー・アーティファクトの管理に必要な、ADMIN_SEC_POLICY権限が含まれます。

APPLY_SEC_POLICY権限を付与されたユーザーは、スキーマに対するポリシー強制を管理できます。この権限を持つユーザーは、権限付与されたスキーマ内のポリシー強制を管理して、アプリケーション内のポリシー管理を達成できます。

XS_SECURITY_CLASSサブプログラムの要約

表11-11 XS_SECURITY_CLASSサブプログラムの要約

サブプログラム 説明

CREATE_SECURITY_CLASSプロシージャ

新規セキュリティ・クラスを作成します。

ADD_PARENTSプロシージャ

指定されたセキュリティ・クラスに1つ以上の親セキュリティ・クラスを追加します。

REMOVE_PARENTSプロシージャ

指定されたセキュリティ・クラスの1つ以上の親セキュリティ・クラスを削除します。

ADD_PRIVILEGESプロシージャ

指定されたセキュリティ・クラスに1つ以上の権限を追加します。

REMOVE_PRIVILEGESプロシージャ

指定されたセキュリティ・クラスの1つ以上の権限を削除します。

ADD_IMPLIED_PRIVILEGESプロシージャ

指定された集約権限に1つ以上の暗黙の権限を追加します。

REMOVE_IMPLIED_PRIVILEGESプロシージャ

集約権限から1つ以上の暗黙の権限を削除します。

SET_DESCRIPTIONプロシージャ

指定されたセキュリティ・クラスの説明文字列を設定します。

DELETE_SECURITY_CLASSプロシージャ

指定されたセキュリティ・クラスを削除します。

この項では次のXS_SECURITY_CLASSサブプログラムについて説明します。

CREATE_SECURITY_CLASSプロシージャ

CREATE_SECURITY_CLASSは新規セキュリティ・クラスを作成します。

構文

XS_SECURITY_CLASS.CREATE_SECURITY_CLASS ( 
  name         IN VARCHAR2,
  priv_list    IN XS$PRIVILEGE_LIST,
  parent_list  IN XS$NAME_LIST := NULL,
  description  IN VARCHAR2 := NULL);

パラメータ

パラメータ 説明

name

作成するセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

priv_list

セキュリティ・クラスに含める権限のリスト。

parent_list

セキュリティ・クラスが継承される親セキュリティ・クラスのリスト。これはオプションです。

description

セキュリティ・クラスのオプションの説明。

次の例は、HRPRIVSというセキュリティ・クラスを作成します。セキュリティ・クラスには、priv_listで定義されている権限のセットが含まれます。セキュリティ・クラスは、DMLクラスを親セキュリティ・クラスとして使用します。

DECLARE
  pr_list  XS$PRIVILEGE_LIST;
BEGIN
  pr_list :=XS$PRIVILEGE_LIST(
     XS$PRIVILEGE(name=>'VIEW_SENSITIVE_INFO'),
     XS$PRIVILEGE(name=>'UPDATE_INFO',
                  implied_priv_list=>XS$NAME_LIST
                  ('"UPDATE"', '"DELETE"', '"INSERT"')));
 
  SYS.XS_SECURITY_CLASS.CREATE_SECURITY_CLASS(
     name=>'HRPRIVS', 
     priv_list=>pr_list,
     parent_list=>XS$NAME_LIST('DML'));
END;

ADD_PARENTSプロシージャ

ADD_PARENTSプロシージャは、指定されたセキュリティ・クラスに1つ以上の親セキュリティ・クラスを追加します。

構文

XS_SECURITY_CLASS.ADD_PARENTS (
  sec_class   IN VARCHAR2,
  parent      IN VARCHAR2);

XS_SECURITY_CLASS.ADD_PARENTS (
  sec_class   IN VARCHAR2,
  parent_list IN XS$NAME_LIST);

パラメータ

パラメータ 説明

sec_class

親クラスが追加されるセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

parent

追加される親セキュリティ・クラスの名前。

parent_list

追加する親クラスのリスト。

次の例は、親セキュリティ・クラスGENPRIVSHRPRIVSセキュリティ・クラスに追加します。

BEGIN
  SYS.XS_SECURITY_CLASS.ADD_PARENTS('HRPRIVS','GENPRIVS');
END;

REMOVE_PARENTSプロシージャ

REMOVE_PARENTSプロシージャは、指定されたセキュリティ・クラスの1つ以上の親クラスを削除します。

構文

XS_SECURITY_CLASS.REMOVE_PARENTS (
  sec_class IN VARCHAR2);

XS_SECURITY_CLASS.REMOVE_PARENTS (
  sec_class IN VARCHAR2,
  parent    IN VARCHAR2);

XS_SECURITY_CLASS.REMOVE_PARENTS (
  sec_class   IN VARCHAR2,
  parent_list IN XS$NAME_LIST);

パラメータ

パラメータ 説明

sec_class

親クラスが削除されるセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

parent

削除する親セキュリティ・クラス。

parent_list

削除する親セキュリティ・クラスのリスト。

次の例は、親セキュリティ・クラスGENPRIVSHRPRIVSセキュリティ・クラスから削除します。

BEGIN
  SYS.XS_SECURITY_CLASS.REMOVE_PARENTS('HRPRIVS','GENPRIVS');
END;

ADD_PRIVILEGESプロシージャ

ADD_PRIVILEGESプロシージャは、セキュリティ・クラスに1つ以上の権限を追加します。

構文

XS_SECURITY_CLASS.ADD_PRIVILEGES (
  sec_class         IN VARCHAR2,
  priv              IN VARCHAR2,
  implied_priv_list IN XS$NAME_LIST := NULL,
  description       IN VARCHAR2 := NULL);

XS_SECURITY_CLASS.ADD_PRIVILEGES (
  sec_class  IN VARCHAR2,
  priv_list  IN XS$PRIVILEGE_LIST);

パラメータ

パラメータ 説明

sec_class

権限が追加されるセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

priv

追加する権限の名前。

priv_list

追加する権限のリスト。

implied_priv_list

追加される暗黙の権限のオプションのリスト。

description

追加される権限のオプションの説明。

次の例は、UPDATE_INFOという集約権限をHRPRIVSセキュリティ・クラスに追加します。集約権限には、暗黙の権限UPDATEDELETEおよびINSERTが含まれます。

BEGIN
  SYS.XS_SECURITY_CLASS.ADD_PRIVILEGES(sec_class=>'HRPRIVS',priv=>'UPDATE_INFO',
                                       implied_priv_list=>XS$NAME_LIST('"UPDATE"',
                                                    '"DELETE"', '"INSERT"'));
END;

REMOVE_PRIVILEGESプロシージャ

REMOVE_PRIVILEGESプロシージャは、指定されたセキュリティ・クラスから1つ以上の権限を削除します。権限名またはリストが指定されていない場合は、指定されたセキュリティ・クラスからすべての権限が削除されます。

構文

XS_SECURITY_CLASS.REMOVE_PRIVILEGES (
  sec_class   IN VARCHAR2,
  priv        IN VARCHAR2);

XS_SECURITY_CLASS.REMOVE_PRIVILEGES (
  sec_class    IN VARCHAR2,
  priv_list    IN XS$NAME_LIST);

XS_SECURITY_CLASS.REMOVE_PRIVILEGES (
  sec_class IN VARCHAR2);

パラメータ

パラメータ 説明

sec_class

権限が削除されるセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

priv

削除する権限の名前。

priv_list

削除する権限のリスト。

次の例は、UPDATE_INFO権限をHRPRIVSセキュリティ・クラスから削除します。

BEGIN
  SYS.XS_SECURITY_CLASS.REMOVE_PRIVILEGES('HRPRIVS','UPDATE_INFO');
END;

次の例は、HRPRIVSセキュリティ・クラスからすべての権限を削除します。

BEGIN
  SYS.XS_SECURITY_CLASS.REMOVE_PRIVILEGES('HRPRIVS');
END;

ADD_IMPLIED_PRIVILEGESプロシージャ

ADD_IMPLIED_PRIVILEGESプロシージャは、集約権限に1つ以上の暗黙の権限を追加します。

構文

XS_SECURITY_CLASS.ADD_IMPLIED_PRIVILEGES (
  sec_class    IN VARCHAR2,
  priv         IN VARCHAR2,
  implied_priv IN VARCHAR2);

XS_SECURITY_CLASS.ADD_IMPLIED_PRIVILEGES (
  sec_class         IN VARCHAR2,
  priv              IN VARCHAR2,
  implied_priv_list IN XS$NAME_LIST);

パラメータ

パラメータ 説明

sec_class

権限が追加されるセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

priv

暗黙の権限が追加される集約権限の名前。

implied_priv

追加する暗黙の権限。

implied_priv_list

集約権限に追加する暗黙の権限のリスト。

次の例は、集約権限UPDATE_INFOの暗黙の権限のリストをHRPRIVSセキュリティ・クラスに追加します。

BEGIN
  SYS.XS_SECURITY_CLASS.ADD_IMPLIED_PRIVILEGES(sec_class=>'HRPRIVS', priv=>'UPDATE_INFO', implied_priv_list=>XS$NAME_LIST('"UPDATE"', '"DELETE"', '"INSERT"'));
END;

REMOVE_IMPLIED_PRIVILEGESプロシージャ

REMOVE_IMPLIED_PRIVILEGESプロシージャは、集約権限から指定された暗黙の権限を削除します。権限が指定されていない場合は、すべての暗黙の権限が集約権限から削除されます。

構文

XS_SECURITY_CLASS.REMOVE_IMPLIED_PRIVILEGES (
  sec_class    IN VARCHAR2,
  priv         IN VARCHAR2,
  implied_priv IN VARCHAR2);

XS_SECURITY_CLASS.REMOVE_IMPLIED_PRIVILEGES (
  sec_class         IN VARCHAR2,
  priv              IN VARCHAR2,
  implied_priv_list IN XS$NAME_LIST);

XS_SECURITY_CLASS.REMOVE_IMPLIED_PRIVILEGES (
  sec_class   IN VARCHAR2,
  priv        IN VARCHAR2);

パラメータ

パラメータ 説明

sec_class

権限が削除されるセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

priv

暗黙の権限が削除される集約権限の名前。

implied_priv

集約権限から削除する暗黙の権限。

implied_priv_list

集約権限から削除する暗黙の権限のリスト。

次の例は、集約権限UPDATE_INFOの暗黙の権限DELETEHRPRIVSセキュリティ・クラスから削除します。

BEGIN
  SYS.XS_SECURITY_CLASS.REMOVE_IMPLIED_PRIVILEGES('HRPRIVS','UPDATE_INFO','"DELETE"');
END;

次の例は、集約権限UPDATE_INFOのすべての暗黙の権限をHRPRIVSセキュリティ・クラスから削除します。

BEGIN
  SYS.XS_SECURITY_CLASS.REMOVE_IMPLIED_PRIVILEGES('HRPRIVS','UPDATE_INFO');
END;

SET_DESCRIPTIONプロシージャ

SET_DESCRIPTIONプロシージャは、指定されたセキュリティ・クラスの説明文字列を設定します。

構文

XS_SECURITY_CLASS.SET_DESCRIPTION (
  sec_class   IN VARCHAR2,
  description IN VARCHAR2);

パラメータ

パラメータ 説明

sec_class

説明を設定するセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

description

指定されたセキュリティ・クラスの説明文字列。

次の例は、HRPRIVSセキュリティ・クラスの説明文字列を設定します。

BEGIN
  SYS.XS_SECURITY_CLASS.SET_DESCRIPTION(
    'HRPRIVS','Contains privileges required to manage HR data');
END;

DELETE_SECURITY_CLASSプロシージャ

DELETE_SECURITY_CLASSプロシージャは、指定されたセキュリティ・クラスを削除します。

構文

XS_SECURITY_CLASS.DELETE_SECURITY_CLASS ( 
  sec_class     IN VARCHAR2,
  delete_option IN NUMBER:=XS_ADMIN_UTIL.DEFAULT_OPTION); 

パラメータ

パラメータ 説明

sec_class

削除するセキュリティ・クラスの名前。

名前は、SCOTT.SC1のようにスキーマで修飾されます。名前のスキーマ部分がない場合は、現在のセッション・スキーマが想定されます。たとえば、この同じ例では、名前がSC1として指定され、現在のスキーマがSCOTTの場合に、SCOTT.SC1に解決されます。

delete_option

使用する削除オプション。次のオプションを使用できます。

  • DEFAULT_OPTION:

    デフォルト・オプションでは、他で参照されていない場合にのみセキュリティ・クラスを削除できます。セキュリティ・クラスを参照する他のエンティティがある場合は、セキュリティ・クラスを削除できません。

  • CASCADE_OPTION:

    カスケード・オプションは、セキュリティ・クラスをそれに対する参照とともに削除します。セキュリティ・クラスを削除するユーザーには、これらの参照を削除する権限も必要です。

  • ALLOW_INCONSISTENCIES_OPTION:

    不整合の許可オプションでは、他のエンティティからエンティティへの遅延バインド参照がある場合でもそのエンティティを削除できます。

次の例は、デフォルト・オプションを使用してHRPRIVSセキュリティ・クラスを削除します。

BEGIN
  SYS.XS_SECURITY_CLASS.DELETE_SECURITY_CLASS('HRPRIVS',XS_ADMIN_UTIL.DEFAULT_OPTION);
END;