この章では、ユーザーのラベルおよび権限をOracle Label Securityパッケージを使用して管理する方法を説明します。 これらの管理には、Oracle Enterprise Manager Database ControlまたはGrid Controlで提供されるWebインタフェースを使用することもできます。 この方法については、第4章「Oracle Label Securityスタート・ガイド」で説明しています。
この章の内容は、次のとおりです。
ユーザーのラベルと権限を管理するには、SA_USER_ADMINパッケージに対するEXECUTE権限を持ち、policy_DBAロールを付与されている必要があります。
SA_USER_ADMINパッケージには、Oracle Label Securityユーザーのセキュリティ属性を管理するためのファンクションが用意されています。また、ユーザーのレベル、区分およびグループを指定するなど、ユーザー・ラベルをコンポーネント別に管理できるように複数のプロシージャが含まれています。さらに、コンポーネントではなくラベル全体の文字列表現を受け入れるプロシージャもあります。レベル、区分およびグループのパラメータでは、各コンポーネントに対して定義された短縮名が使用されることに注意してください。
すべてのラベルおよび権限情報は、Oracle Label Securityのデータ・ディクショナリ表に格納されます。ユーザーがデータベースに接続すると、Oracle Label Securityのデータ・ディクショナリに格納されている情報に基づいてそのセッション・ラベルが確立されます。
次のSA_USER_ADMINプロシージャを使用すると、ユーザー・ラベルをラベル・コンポーネント別に管理できます。
SET_LEVELSプロシージャでは、ユーザーに最小レベルと最大レベルを割り当てて、そのユーザーのセッション・ラベルと行ラベルのデフォルト値を識別します。
min_levelがNULLの場合は、ポリシーに定義されている最下位レベルに設定されます。
def_levelを指定しない場合は、max_levelに設定されます。
row_levelを指定しない場合は、def_levelに設定されます。
構文:
PROCEDURE SET_LEVELS (policy_name IN VARCHAR2, user_name IN VARCHAR2, max_level IN VARCHAR2, min_level IN VARCHAR2 DEFAULT NULL, def_level IN VARCHAR2 DEFAULT NULL, row_level IN VARCHAR2 DEFAULT NULL);
SET_COMPARTMENTSプロシージャでは、ユーザーに区分を割り当てて、そのユーザーのセッション・ラベルと行ラベルのデフォルト値を識別します。
write_compsがNULLの場合は、read_compsに設定されます。
def_compsがNULLの場合は、read_compsに設定されます。
row_compsがNULLの場合は、書込みアクセスが認可されているdef_comps内のコンポーネントに設定されます。
レベルが設定されているユーザーのみが、認可された区分を確立できます。
書込み区分を指定する場合は、読取り区分のサブセットにする必要があります。(書込み区分は、ユーザーが書込みアクセス権を必要とする区分です。)
構文:
PROCEDURE SET_COMPARTMENTS (policy_name IN VARCHAR2, user_name IN VARCHAR2, read_comps IN VARCHAR2, write_comps IN VARCHAR2 DEFAULT NULL, def_comps IN VARCHAR2 DEFAULT NULL, row_comps IN VARCHAR2 DEFAULT NULL);
表8-2 SA_USER_ADMIN.SET_COMPARTMENTSのパラメータ
パラメータ | 意味 |
---|---|
policy_name |
ポリシーを指定します。 |
user_name |
ユーザー名を指定します。 |
read_comps |
読取りアクセスが認可されている区分のカンマ区切りのリストです。 |
write_comps |
書込みアクセスが認可されている区分のカンマ区切りのリストです(read_compsのサブセット)。 |
def_comps |
デフォルトの区分を指定します。この区分はread_compsのサブセットであることが必要です。 |
row_comps |
行の区分を指定します。この区分は、write_compsおよびdef_compsのサブセットであることが必要です。 |
SET_GROUPSプロシージャでは、ユーザーにグループを割り当てて、そのユーザーのセッション・ラベルと行ラベルのデフォルト値を識別します。
write_groupsがNULLの場合は、read_groupsに設定されます。
def_groupsがNULLの場合は、read_groupsに設定されます。
row_groupsがNULLの場合は、書込みアクセスが認可されているdef_groups内のグループに設定されます。
レベルが設定されているユーザーのみが、認可されたグループを確立できます。
構文:
PROCEDURE SET_GROUPS (policy_name IN VARCHAR2, user_name IN VARCHAR2, read_groups IN VARCHAR2, write_groups IN VARCHAR2 DEFAULT NULL, def_group IN VARCHAR2 DEFAULT NULL, row_groups IN VARCHAR2 DEFAULT NULL);
表8-3 SA_USER_ADMIN.SET_GROUPSのパラメータ
パラメータ | 意味 |
---|---|
policy_name |
ポリシーを指定します。 |
user_name |
ユーザー名を指定します。 |
read_groups |
読取りが認可されているグループのカンマ区切りのリストです。 |
write_groups |
書込みが認可されているグループのカンマ区切りのリストです。このグループはread_groupsのサブセットであることが必要です。 |
def_groups |
デフォルトのグループを指定します。このグループは次のサブセットであることが必要です。 read_groups |
row_groups |
行グループを指定します。このグループは次のサブセットであることが必要です。 write_groupsおよびdef_groups |
ALTER_COMPARTMENTSプロシージャは、リストにある各区分について、書込みアクセス、デフォルトのラベル・インジケータおよび行ラベル・インジケータを変更します。
構文:
PROCEDURE ALTER_COMPARTMENTS (policy_name IN VARCHAR2,
user_name IN VARCHAR2,
comps IN VARCHAR2,
access_mode IN VARCHAR2 DEFAULT NULL,
in_def IN VARCHAR2 DEFAULT NULL,
in_row I
N VARCHAR2 DEFAULT NULL);
表8-4 SA_USER_ADMIN.ALTER_COMPARTMENTSのパラメータ
このプロシージャでは、ユーザーの認証に区分を追加し、その区分について、読取りとともに書込みも認可するかどうかを指定します。
構文:
PROCEDURE ADD_COMPARTMENTS (policy_name IN VARCHAR2, user_name IN VARCHAR2, comps IN VARCHAR2, access_model IN VARCHAR2 DEFAULT NULL, in_def IN VARCHAR2 DEFAULT NULL, in_row IN VARCHAR2 DEFAULT NULL);
表8-5 SA_USER_ADMIN.ADD_COMPARTMENTSのパラメータ
DROP_COMPARTMENTSプロシージャでは、指定した区分をユーザーの認証から削除します。
構文:
PROCEDURE DROP_COMPARTMENTS (policy_name IN VARCHAR2, user_name IN VARCHAR2, comps IN VARCHAR2);
DROP_ALL_COMPARTMENTSプロシージャでは、すべての区分をユーザーの認証から削除します。
構文:
PROCEDURE DROP_ALL_COMPARTMENTS (policy_name IN VARCHAR2, user_name IN VARCHAR2);
ADD_GROUPSプロシージャでは、ユーザーにグループを追加し、そのグループについて、読取りとともに書込みも認可するかどうかを指定します
構文:
PROCEDURE ADD_GROUPS (policy_name IN VARCHAR2, user_name IN VARCHAR2, groups IN VARCHAR2, access_mode IN VARCHAR2 DEFAULT NULL, in_def IN VARCHAR2 DEFAULT NULL, in_row IN VARCHAR2 DEFAULT NULL);
表8-8 SA_USER_ADMIN.ADD_GROUPSのパラメータ
ALTER_GROUPSプロシージャは、リストにあるグループごとに、書込みアクセス、デフォルトのラベル・インジケータおよび行ラベル・インジケータを変更します。
構文:
PROCEDURE ALTER_GROUPS (policy_name IN VARCHAR2, user_name IN VARCHAR2, groups IN VARCHAR2, access_mode IN VARCHAR2 DEFAULT NULL, in_def IN VARCHAR2 DEFAULT NULL, in_row IN VARCHAR2 DEFAULT NULL);
表8-9 SA_USER_ADMIN.ALTER_GROUPSのパラメータ
DROP_GROUPSプロシージャでは、指定したグループをユーザーの認証から削除します。
構文:
PROCEDURE DROP_GROUPS (policy_name IN VARCHAR2, user_name IN VARCHAR2, groups IN VARCHAR2);
次のSA_USER_ADMINプロシージャを使用すると、ラベル文字列全体を指定してユーザー・ラベルを管理できます。
SET_USER_LABELSプロシージャでは、個々のコンポーネントではなくラベル・セットを使用して、ユーザーのレベル、区分およびグループを設定します。
構文:
PROCEDURE SET_USER_LABELS ( policy_name IN VARCHAR2, user_name IN VARCHAR2, max_read_label IN VARCHAR2, max_write_label IN VARCHAR2 DEFAULT NULL, min_write_label IN VARCHAR2 DEFAULT NULL, def_label IN VARCHAR2 DEFAULT NULL, row_label IN VARCHAR2 DEFAULT NULL);
表8-12 SA_USER_ADMIN.SET_USER_LABELSのパラメータ
パラメータ | 意味 |
---|---|
max_read_label |
ユーザーが認可される最大読取りラベルの初期化に使用するラベル文字列を指定します。この文字列は、ユーザーの最大レベル、読取りアクセスが認可される区分およびグループで構成されます。 |
max_write_label |
ユーザーが認可される最大書込みラベルの初期化に使用するラベル文字列を指定します。この文字列は、ユーザーの最大レベル、書込みアクセスが認可される区分およびグループで構成されます。max_write_labelを指定しない場合は、max_read_labelに設定されます。 |
min_write_label |
ユーザーが認可される最小書込みラベルの初期化に使用するラベル文字列を指定します。この文字列にはレベルのみが含まれ、区分やグループは含まれません。min_write_labelを指定しない場合は、ポリシーに定義されている最下位レベルに設定され、区分やグループは含まれません。 |
def_label |
レベル、区分、グループなど、ユーザーのセッション・ラベルの初期化に使用するラベル文字列(max_read_labelのサブセット)を指定します。default_labelを指定しない場合は、max_read_labelに設定されます。 |
policy_name |
ポリシーを指定します。 |
user_name |
ユーザー名を指定します。 |
row_label |
プログラムの行ラベルの初期化に使用するラベル文字列を指定します。この文字列には、レベル、区分およびグループ、つまりmax_write_labelおよびdef_labelのサブセットが含まれます。row_labelを指定しない場合は、def_labelに設定され、書込みアクセスが認可される区分とグループのみが含まれます。 |
SET_DEFAULT_LABELプロシージャでは、ユーザーの初期セッション・ラベルを指定のラベルに設定します。
構文:
PROCEDURE SET_DEFAULT_LABELS ( policy_name IN VARCHAR2, user_name IN VARCHAR2, def_label IN VARCHAR2);
表8-13 SA_USER_ADMIN.SET_DEFAULT_LABELのパラメータ
パラメータ | 意味 |
---|---|
policy_name |
ポリシーを指定します。 |
user_name |
ユーザー名を指定します。 |
def_label |
ユーザーのデフォルト・ラベルの初期化に使用するラベル文字列を指定します。このラベルには、読取りアクセスが認可されている区分とグループであれば、どれでも含めることができます。 |
行ラベルが新規の書込みラベルで支配されていれば、ユーザーはセッション・ラベルを次のように設定できます。
各自の最大ラベル以下で、かつ各自の最小ラベル以上のレベルに設定する。
認可された区分リストにある区分を含むように設定する。
認可されたグループ・リストにあるグループを含むように設定する。(認可グループのサブグループは、認可リストに暗黙的に含まれます。)
行ラベルは、セッション・ラベルのリセットによって得られる新規の書込みラベルで支配される必要があります。この条件に該当しない場合は、SET_DEFAULT_LABELプロシージャが失敗します。
たとえば、現行の行ラベルがS:A,Bで、両方の区分への書込みアクセス権を持っているとします。新規のデフォルト・ラベルをC:A,Bに設定する操作を試みると、SET_LABELプロシージャは失敗します。これは、新規の書込みラベルはC:A,Bとなり、現行の行ラベルを支配しないためです。
この場合にセッション・ラベルを正常にリセットするには、最初に行ラベルをリセット後のセッション・ラベルで支配されるように下位の値にする必要があります。
SET_ROW_LABELプロシージャでは、ユーザーの初期の行ラベルを指定のラベルに設定します。
構文:
PROCEDURE SET_ROW_LABEL ( policy_name IN VARCHAR2, user_name IN VARCHAR2, row_label IN VARCHAR2);
表8-14 SA_USER_ADMIN.SET_ROW_LABELのパラメータ
パラメータ | 意味 |
---|---|
policy_name |
ポリシーを指定します。 |
user_name |
ユーザー名を指定します。 |
row_label |
ユーザーの行ラベルの初期化に使用するラベル文字列を指定します。ラベルには、書込みアクセスが認可されるデフォルト・ラベルからの区分とグループのみを含める必要があります。 |
ユーザーは、独自に行ラベルを設定できますが、含めることができるのは次の要素のみです。
セッション・ラベルのレベル以下で、かつ、ユーザーの最小レベル以上のレベル。
ユーザーが書込みアクセス権を持つように認可されているセッション・ラベルからの、区分とグループのサブセット。
ユーザーが行ラベルに無効な値の設定を試みると、操作は許可されず、その行ラベル値は変更されません。
SET_USER_PRIVSプロシージャでは、ユーザーに対してポリシー固有の権限を設定します。これらの権限は、現行セッションでは有効になりません。ユーザーの次回のログイン時に有効になります。既存の権限は、すべて新しい権限セットで置き換えられます。権限パラメータの値がNULLの場合は、そのユーザーのポリシーに対する権限が削除されます。
ユーザーにポリシー権限を割り当てるには、SA_USER_ADMINパッケージに対するEXECUTE権限を持ち、policy_DBAロールを付与されている必要があります。
構文:
PROCEDURE SET_USER_PRIVS ( policy_name IN VARCHAR2, user_name IN VARCHAR2, privileges IN VARCHAR2);
SET_ACCESS_PROFILEプロシージャでは、データベース・セッションのOracle Label Securityでの認可と権限を、指定したユーザーの認証と権限に設定します。(元のユーザーは引き続きPROFILE_ACCESS権限を持つことに注意してください。)
SA_SESSION.SET_ACCESS_PROFILEプロシージャを実行するユーザーは、PROFILE_ACCESS権限を持つ必要があります。ログインしたデータベース・ユーザー(OracleユーザーID)は変わらないことに注意してください。そのユーザーには、指定のユーザーの認証と権限のみが想定されます。これに対して、Oracle Label Securityのユーザー名は変更されます。
この管理プロシージャは、次のように様々なタスクに役立ちます。
SET_ACCESS_PROFILEを使用すると、管理者は特定ユーザーの認証と権限の設定結果を確認できます。
アプリケーションがラベル付きデータにアクセスするには、プロキシ・アカウントをアプリケーション・ユーザーとして接続(その識別情報を想定)させる必要があります。プロキシ・アカウントは、SET_ACCESS_PROFILE権限を使用して、アプリケーション・ユーザーのかわりに操作できます。
構文:
PROCEDURE SET_ACCESS_PROFILE (policy_name IN VARCHAR2 user_name IN VARCHAR2);
SA_USER_NAMEファンクションは、SET_ACCESS_PROFILEプロシージャで設定された(またはログイン時に設定された)現行のOracle Label Securityユーザーの名前を戻します。これにより、現行ユーザーの識別情報をOracleログイン名ではなくOracle Label Securityに関連付けて判断できます。
構文:
FUNCTION SA_USER_NAME (policy_name IN VARCHAR2) RETURN VARCHAR2;
この項では、管理者によるユーザー認証と権限の割当ての表示に使用できるビューについて説明します。
DBA_SA_USERSビューには、権限、レベル、区分およびグループに割り当てられた値がすべて表示されます。これは、SA_USER_ADMINコマンドライン・インタフェースを通じてそれぞれの値を入力する方法に対応しています。値は次のとおりです。
USER_PRIVILEGES
MAX_READ_LABEL
MAX_WRITE_LABEL
MIN_WRITE_LABEL
DEFAULT_READ_LABEL
DEFAULT_WRITE_LABEL
DEFAULT_ROW_LABEL
USER_LABELS
MAX_READ_LABEL
MAX_WRITE_LABEL
MIN_WRITE_LABEL
DEFAULT_READ_LABEL
DEFAULT_WRITE_LABEL
DEFAULT_ROW_LABEL
この情報はデータ・ディクショナリ表に格納され、ユーザーのログイン時にセッション・ラベルと行ラベルの設定に使用されます。
注意: DBA_SA_USERSのUSER_LABELSフィールドは下位互換性のために残され、次のリリースでは削除されます。 |