11.2 XS_ACLパッケージ

XS_ACLパッケージは、アクセス制御リスト(ACL)を作成および管理するプロシージャを作成します。

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

XS_ACLパッケージは、SYSスキーマに作成されます。

すべてのスキーマのACL、セキュリティ・クラス、セキュリティ・ポリシーなどのスキーマ・オブジェクトを管理できるADMIN_ANY_SEC_POLICY権限がDBAロールに付与されます。

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

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

11.2.2 定数

次の定数は親ACLタイプを定義します。

EXTENDED              CONSTANT PLS_INTEGER := 1;
CONSTRAINED           CONSTANT PLS_INTEGER := 2;  

次の定数はプリンシパルのタイプを定義します。

PTYPE_XS              CONSTANT PLS_INTEGER := 1;
PTYPE_DB              CONSTANT PLS_INTEGER := 2;
PTYPE_DN              CONSTANT PLS_INTEGER := 3;
PTYPE_EXTERNAL        CONSTANT PLS_INTEGER := 4;

次の定数はパラメータの値タイプを定義します。

TYPE_NUMBER           CONSTANT PLS_INTEGER := 1;
TYPE_VARCHAR          CONSTANT PLS_INTEGER := 2;

11.2.3 オブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよび付与

このパッケージには、次のオブジェクト・タイプ、コンストラクタ・ファンクション、シノニムおよびGRANT文が定義されています。

-- Type definition for ACE
CREATE OR REPLACE TYPE XS$ACE_TYPE AS OBJECT (
 
-- Member Variables
  privilege_list      XS$NAME_LIST,
  is_grant_ace        NUMBER,
  is_invert_principal NUMBER,
  principal_name      VARCHAR2(130),
  principal_type      NUMBER,
  start_date          TIMESTAMP WITH TIME ZONE,
  end_date            TIMESTAMP WITH TIME ZONE,
 
  CONSTRUCTOR FUNCTION XS$ACE_TYPE (
    privilege_list   IN XS$NAME_LIST,
    granted          IN BOOLEAN := TRUE,
    inverted         IN BOOLEAN := FALSE,
    principal_name   IN VARCHAR2,
    principal_type   IN PLS_INTEGER := 1,
    start_date       IN TIMESTAMP WITH TIME ZONE := NULL,
    end_date         IN TIMESTAMP WITH TIME ZONE := NULL)
  RETURN SELF AS RESULT,

  MEMBER PROCEDURE set_privileges(privilege_list IN XS$NAME_LIST),
  MEMBER FUNCTION get_privileges RETURN XS$NAME_LIST,
  MEMBER PROCEDURE set_grant(granted IN BOOLEAN),
  MEMBER FUNCTION is_granted RETURN BOOLEAN,
  MEMBER PROCEDURE set_inverted_principal(inverted IN BOOLEAN),
  MEMBER FUNCTION is_inverted_principal RETURN BOOLEAN,
  MEMBER PROCEDURE set_principal(principal_name IN VARCHAR2),
  MEMBER FUNCTION get_principal RETURN VARCHAR2,
  MEMBER PROCEDURE set_principal_type (principal_type IN PLS_INTEGER),
  MEMBER FUNCTION get_principal_type RETURN PLS_INTEGER,
  MEMBER PROCEDURE set_start_date(start_date IN TIMESTAMP WITH TIME ZONE),
  MEMBER FUNCTION get_start_date RETURN TIMESTAMP WITH TIME ZONE,
  MEMBER PROCEDURE set_end_date(end_date IN TIMESTAMP WITH TIME ZONE),
  MEMBER FUNCTION get_end_date RETURN TIMESTAMP WITH TIME ZONE
);
CREATE OR REPLACE TYPE XS$ACE_LIST AS VARRAY(1000) OF XS$ACE_TYPE;

11.2.4 XS_ACLサブプログラムの要約

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

サブプログラム 説明

CREATE_ACLプロシージャ

アクセス制御リスト(ACL)を作成します。

APPEND_ACESプロシージャ

1つ以上のアクセス制御エントリ(ACE)を既存のACLに追加します。

REMOVE_ACESプロシージャ

ACLからすべてのACEを削除します。

SET_SECURITY_CLASSプロシージャ

ACLのセキュリティ・クラスを設定または変更します。

SET_PARENT_ACLプロシージャ

ACLの親ACLを設定または変更します。

ADD_ACL_PARAMETERプロシージャ

データ・セキュリティ・ポリシーのACLパラメータ値を追加します。

REMOVE_ACL_PARAMETERSプロシージャ

ACLのACLパラメータと値を削除します。

SET_DESCRIPTIONプロシージャ

ACLの説明文字列を設定します。

DELETE_ACLプロシージャ

指定されたACLを削除します。

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

11.2.4.1 CREATE_ACLプロシージャ

CREATE_ACLプロシージャは、新しいアクセス制御リスト(ACL)を作成します。

構文

XS_ACL.CREATE_ACL (  name            IN VARCHAR2,
  ace_list        IN XS$ACE_LIST,
  sec_class       IN VARCHAR2 := NULL,
  parent          IN VARCHAR2 := NULL,
  inherit_mode    IN PLS_INTEGER := NULL,
  description     IN VARCHAR2 := NULL); 

パラメータ

パラメータ 説明

name

作成するACLの名前。

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

ace_list

ACL内のアクセス制御エントリ(ACE)のリスト。

sec_class

ACLのスコープまたはタイプを指定するセキュリティ・クラスの名前。セキュリティ・クラスが指定されていない場合は、DMLクラスがデフォルトのセキュリティ・クラスとして使用されます。

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

parent

親ACL名(存在する場合)。

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

inherit_mode

親ACLが指定されている場合に継承モード。使用できる値はEXTENDEDまたはCONSTRAINEDです。

description

ACLのオプションの説明。

次の例は、HRACLというACLを作成します。このACLには、ace_listに格納されたACEが含まれます。ace_listで使用される権限は、HRPRIVSセキュリティ・クラスの一部です。

DECLARE  
  ace_list XS$ACE_LIST;  
BEGIN 
  ace_list := XS$ACE_LIST(
      XS$ACE_TYPE(privilege_list=>XS$NAME_LIST('"SELECT"','VIEW_SENSITIVE_INFO'), 
                  granted=>true, 
                  principal_name=>'HRREP'),
      XS$ACE_TYPE(privilege_list=>XS$NAME_LIST('UPDATE_INFO'),
                  granted=>true,
                  principal_name=>'HRMGR'));
  SYS.XS_ACL.CREATE_ACL(name=>'HRACL',
                        ace_list=>ace_list,
                        sec_class=>'HRPRIVS',
                        description=>'HR Representative Access');
END;

11.2.4.2 APPEND_ACESプロシージャ

APPEND_ACESプロシージャは、1つ以上のACEを既存のACLに追加します。

構文

XS_ACL.APPEND_ACES (
  acl      IN VARCHAR2,
  ace      IN XS$ACE_TYPE); 

XS.ACL.APPEND_ACES (
  acl      IN VARCHAR2,
  ace_list IN XS$ACE_LIST); 

パラメータ

パラメータ 説明

acl

ACEを追加するACLの名前。

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

ace

ACLに追加するACE。

ace_list

ACLに追加するACEのリスト。

次の例は、HRACL ACLにACEを追加します。ACEによって、SELECT権限がDB_HRデータベース・ユーザーに付与されます。

DECLARE  
  ace_entry XS$ACE_TYPE;  
BEGIN 
  ace_entry := XS$ACE_TYPE(privilege_list=>XS$NAME_LIST('"SELECT"'), 
                           granted=>true,
                           principal_name=>'DB_HR',
                           principal_type=>XS_ACL.PTYPE_DB);
  SYS.XS_ACL.APPEND_ACES('HRACL',ace_entry);
END;

11.2.4.3 REMOVE_ACESプロシージャ

REMOVE_ACESプロシージャは、ACLからすべてのACEを削除します。

構文

XS_ACL.REMOVE_ACES (
  acl IN VARCHAR2); 

パラメータ

パラメータ 説明

acl

ACEを削除するACLの名前。

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

次の例は、HRACLというACLからすべてのACEを削除します。

BEGIN
  SYS.XS_ACL.REMOVE_ACES('HRACL');
END;

11.2.4.4 SET_SECURITY_CLASSプロシージャ

SET_SECURITY_CLASSプロシージャは、ACLのセキュリティ・クラスを設定または変更します。

構文

XS_ACL.SET_SECURITY_CLASS (
  acl       IN VARCHAR2,
  sec_class IN VARCHAR2);

パラメータ

パラメータ 説明

acl

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

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

sec_class

ACLのスコープまたはタイプを定義するセキュリティ・クラスの名前。

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

次の例は、HRPRIVSセキュリティ・クラスをHRACL ACLに関連付けます。

BEGIN
  SYS.XS_ACL.SET_SECURITY_CLASS('HRACL','HRPRIVS');
END;

11.2.4.5 SET_PARENT_ACLプロシージャ

SET_PARENT_ACLは、ACLの親ACLを設定または変更します。

構文

XS_ACL.SET_PARENT_ACL(
  acl            IN VARCHAR2,
  parent         IN VARCHAR2,
  inherit_mode   IN PLS_INTEGER);

パラメータ

パラメータ 説明

acl

親を設定する必要があるACLの名前。

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

parent

親ACLの名前。

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

inherit_mode

継承モード。これは、次のいずれかの値です。

EXTENDED (extends from)、CONSTRAINED (constrained with)

次の例では、AllDepACL ACLをHRACL ACLの親のACLとして設定しています。継承タイプはEXTENDEDに設定されます。

BEGIN
  SYS.XS_ACL.SET_PARENT_ACL('HRACL','AllDepACL',XS_ACL.EXTENDED);
END;

11.2.4.6 ADD_ACL_PARAMETERプロシージャ

ADD_ACL_PARAMETERは、データ・セキュリティ・ポリシーのACLパラメータ値を追加します。

構文

XS_ACL.ADD_ACL_PARAMETER (
  acl         IN VARCHAR2,
  policy      IN VARCHAR2,
  parameter   IN VARCHAR2,
  value       IN NUMBER); 

XS_ACL.ADD_ACL_PARAMETER (
  acl         IN VARCHAR2,
  policy      IN VARCHAR2,
  parameter   IN VARCHAR2,
  value       IN VARCHAR2);

パラメータ

パラメータ 説明

acl

パラメータを追加するACLの名前。

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

policy

ACLパラメータが作成されたデータ・セキュリティ・ポリシーの名前。

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

parameter

データ・セキュリティ・ポリシーで定義されているACLパラメータの名前。

value

使用するACLパラメータの値。

次の例は、ACL1REGIONパラメータを追加します。ACLパラメータが作成されるデータ・セキュリティ・ポリシーの名前はTEST_DSです。REGIONパラメータの値はWESTです。

BEGIN
  SYS.XS_ACL.ADD_ACL_PARAMETER('ACL1','TEST_DS','REGION', 'WEST');
END;

11.2.4.7 REMOVE_ACL_PARAMETERSプロシージャ

REMOVE_ACL_PARAMETERSは、ACLの指定されたACLパラメータを削除します。パラメータ名が指定されていない場合は、ACLのすべてのACLパラメータが削除されます。

構文

XS_ACL.REMOVE_ACL_PARAMETERS (
  acl        IN VARCHAR2,
  parameter  IN VARCHAR2); 

XS_ACL.REMOVE_ACL_PARAMETERS (
  acl IN VARCHAR2); 

パラメータ

パラメータ 説明

acl

パラメータを削除するACLの名前。

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

parameter

ACLから削除する必要のあるパラメータの名前。

次の例は、ACL1 ACLからREGIONパラメータを削除します。

BEGIN
  XS_ACL.REMOVE_ACL_PARAMETERS('ACL1', 'REGION');
END;

次の例は、ACL1のすべてのACLパラメータを削除します。

BEGIN
  SYS.XS_ACL.REMOVE_ACL_PARAMETERS('ACL1');
END;

11.2.4.8 SET_DESCRIPTIONプロシージャ

SET_DESCRIPTIONプロシージャは、ACLの説明文字列を設定します。

構文

XS_ACL.SET_DESCRIPTION (
  acl         IN VARCHAR2,
  description IN VARCHAR2);

パラメータ

パラメータ 説明

acl

説明を設定するACLの名前。

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

description

ACLの説明文字列。

次の例は、HRACL ACLの説明を設定します。

BEGIN
  SYS.XS_ACL.SET_DESCRIPTION('HRACL','Grants privileges to HR representatives and 
                          managers.');
END;

11.2.4.9 DELETE_ACLプロシージャ

DELETE_ACLプロシージャは、指定されたACLを削除します。

構文

XS_ACL.DELETE_ACL (
  acl           IN VARCHAR2,
  delete_option IN PLS_INTEGER := XS_ADMIN_UTIL.DEFAULT_OPTION);

パラメータ

パラメータ 説明

acl

削除するACLの名前。

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

delete_option

使用する削除オプション。データ・セキュリティ・ポリシーに対して、次のオプションの動作は同じです。

  • DEFAULT_OPTION:

    デフォルト・オプションでは、他で参照されていない場合にのみACLを削除できます。ACLが他の場所で参照されている場合は、ACLを削除できません。

    たとえば、データ・セキュリティ・ポリシーの一部であるACLを削除しようとした場合は、削除操作が失敗します。

  • CASCADE_OPTION:

    カスケード・オプションは、ACLを削除し、データ・セキュリティ・ポリシーのデータ・レルム制約内のACL参照も削除します。

  • ALLOW_INCONSISTENCIES_OPTION:

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

次の例は、デフォルトの削除オプションを使用してHRACL ACLを削除します。

BEGIN
  SYS.XS_ACL.DELETE_ACL('HRACL');
END;