DBMS_MACADM
PL/SQLパッケージをおよび一連のOracle Database Vaultルール・ファンクションを使用すると、ルール・セットを管理できます。
内容は次のとおりです。
DBMS_MACADM
ルール・セット・プロシージャにより、ルール・セット、およびこれらのルール・セット内に入れられる個々のルールを構成できます。
表14-1に、ルール・セットの構成に使用できるDBMS_MACADMパッケージのプロシージャを示します。
DV_OWNER
ロールまたはDV_ADMIN
ロールを付与されているユーザーのみがこれらのプロシージャを使用できます。
表14-1 DBMS_MACADMのルール・セット構成プロシージャ
プロシージャ | 説明 |
---|---|
ルールをルール・セットに追加します。 |
|
ルールを作成します。 |
|
ルール・セットを作成します。 |
|
ルールを削除します。 |
|
ルールをルール・セットから削除します。 |
|
ルール・セットを削除します。 |
|
ルールの名前を変更します。名前の変更は、そのルールが使用されているすべての箇所に反映されます。 |
|
ルール・セットの名前を変更します。名前の変更は、そのルール・セットが使用されているすべての箇所に反映されます。 |
|
ルールを更新します。 |
|
ルール・セットを更新します。 |
関連項目:
ルール・セットの詳細は、「ルール・セットの構成」を参照してください
ルール・セットのプロシージャおよびファンクションで使用できる一連の汎用ユーティリティ・プロシージャについては、「Oracle Database VaultユーティリティのAPI」を参照してください
ADD_RULE_TO_RULE_SET
プロシージャは、ルール・セットにルールを追加します。これにより、ルール・セットの評価時にルールをチェックさせることができます。
構文
DBMS_MACADM.ADD_RULE_TO_RULE_SET( rule_set_name IN VARCHAR2, rule_name IN VARCHAR2, rule_order IN NUMBER, enabled IN VARCHAR2);
パラメータ
表14-2 ADD_RULE_TO_RULE_SETのパラメータ
パラメータ | 説明 |
---|---|
|
ルール・セット名。 現行のデータベース・インスタンスで既存のルール・セットを検索するには、「DVSYS.DBA_DV_RULE_SETビュー」で説明されている |
|
ルール・セットに追加するルール。 既存のルールを検索するには、「DVSYS.DBA_DV_RULEビュー」で説明されている ルール・セットに関連付けられているルールを検索するには、「DVSYS.DBA_DV_RULEビュー」で説明されている |
|
このリリースには適用されませんが、 |
|
オプションです。ルール・セットの評価時にルールをチェックする必要があるかどうかを判断します。可能な値は次のとおりです。
詳細は、表19-1を参照してください。 |
例
次の例では、ルールをルール・セットに追加し、enabled
パラメータを省略して、ルール・セットの評価時に自動的にルール・チェックが有効化されるようにします。
BEGIN DBMS_MACADM.ADD_RULE_TO_RULE_SET( rule_set_name => 'Limit_DBA_Access', rule_name => 'Restrict DROP TABLE operations', rule_order => 1); END; /
次の例では、ルールをルール・セットに追加しますが、ルール・チェックを無効化します。
BEGIN DBMS_MACADM.ADD_RULE_TO_RULE_SET( rule_set_name => 'Limit_DBA_Access', rule_name => 'Check UPDATE operations', rule_order => 1, enabled => DBMS_MACUTL.G_NO); END; /
CREATE_RULE
プロシージャはルールを作成します。作成したルールは、後でルール・セットに追加できます。
構文
DBMS_MACADM.CREATE_RULE( rule_name IN VARCHAR2, rule_expr IN VARCHAR2);
パラメータ
表14-3 CREATE_RULEパラメータ
パラメータ | 説明 |
---|---|
|
ルール名(大/小文字混在で最大128文字)。空白を使用できます。 現行のデータベース・インスタンスで既存のルールを検索するには、「DVSYS.DBA_DV_RULEビュー」で説明されている ルール・セットに関連付けられているルールを検索するには、「DVSYS.DBA_DV_RULE_SET_RULEビュー」で説明されている |
|
PL/SQL 式に引用符が含まれる場合、二重引用符は使用しないでください。その場合は、2つの一重引用符を使用します。式全体を一重引用符で囲んでください。次に例を示します。 'TO_CHAR(SYSDATE,''HH24'') = ''12''' ルール式の詳細は、「新規ルールの作成」を参照してください。 |
例
次の例に、現行セッション・ユーザーがSYSADM
であるかどうかをチェックするルール式の作成方法を示します。
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Check UPDATE operations', rule_expr =>'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''SYSADM'''); END; /
注意:
次の新機能は、Oracle Database 12cリリース1 (12.1.0.2)以上で使用できます。
次の例に、パブリック・スタンドアロン・ファンクションOLS_LABEL_DOMINATES
を使用して、hr_ols_pol
Oracle Label Securityポリシーのセッション・ラベルがhs
ラベルより優位にあるか同等であるかを確認するルール式の作成方法を示します。値0
は、falseである場合を示します。(同等であるかどうかをチェックするには、1
を示します。)
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Check OLS Factor', rule_expr => 'OLS_LABEL_DOMINATES(''hr_ols_pol'', ''hs'') = 1'); END; /
CREATE_RULE_SET
プロシージャはルール・セットを作成します。
ルール・セットを作成した後で、CREATE_RULE
およびADD_RULE_TO_RULE_SET
プロシージャを使用してルールを作成し、ルール・セットに追加します。
構文
DBMS_MACADM.CREATE_RULE_SET( rule_set_name IN VARCHAR2, description IN VARCHAR2, enabled IN VARCHAR2, eval_options IN NUMBER, audit_options IN NUMBER, fail_options IN NUMBER, fail_message IN VARCHAR2, fail_code IN NUMBER, handler_options IN NUMBER, handler IN VARCHAR2, is_static IN BOOLEAN DEFAULT);
パラメータ
表14-4 CREATE_RULE_SETパラメータ
パラメータ | 説明 |
---|---|
|
ルール・セット名(大/小文字混在で最大90文字)。空白を使用できます。 現行のデータベース・インスタンスで既存のルール・セットを検索するには、「DVSYS.DBA_DV_RULE_SETビュー」で説明されている |
|
ルール・セットの目的の説明(大/小文字混在で最大1024文字)。 |
|
|
|
ルール・セットに複数のルールを割り当てる場合は、次の設定のいずれかを入力します。
|
|
次の設定のいずれかを選択します。
|
|
エラーをレポートするオプション:
|
|
大/小文字混在の最大80文字で、失敗を示すエラー・メッセージを入力し、 |
|
-20000から-20999または20000から20999の範囲の数値を入力し、 |
|
次の設定のいずれかを選択します。
|
|
カスタム・イベント・ハンドラ・ロジックを定義するPL/SQLファンクションまたはプロシージャの名前。 |
|
オプションです。アクセスされる際にルール・セットが評価される頻度を決定します。デフォルトは
|
例
BEGIN DBMS_MACADM.CREATE_RULE_SET( rule_set_name => 'Limit_DBA_Access', description => 'DBA access through predefined processes', enabled => DBMS_MACUTL.G_YES, eval_options => DBMS_MACUTL.G_RULESET_EVAL_ANY, audit_options => DBMS_MACUTL.G_RULESET_AUDIT_FAIL + DBMS_MACUTL.G_RULESET_AUDIT_SUCCESS, fail_options => DBMS_MACUTL.G_RULESET_FAIL_SILENT, fail_message => '', fail_code => 20461, handler_options => DBMS_MACUTL.G_RULESET_HANDLER_FAIL, handler => 'dbavowner.email_alert', is_static => TRUE); END; /
関連項目:
DELETE_RULE
プロシージャはルールを削除します。
構文
DBMS_MACADM.DELETE_RULE( rule_name IN VARCHAR2);
パラメータ
表14-5 DELETE_RULEのパラメータ
パラメータ | 説明 |
---|---|
|
ルール名。 現行のデータベース・インスタンスで既存のルールを検索するには、「DVSYS.DBA_DV_RULEビュー」で説明されている ルール・セットに関連付けられているルールを検索するには、「DVSYS.DBA_DV_RULE_SET_RULEビュー」で説明されている |
例
EXEC DBMS_MACADM.DELETE_RULE('Check UPDATE operations');
DELETE_RULE_FROM_RULE_SET
プロシージャは、ルールをルール・セットから削除します。
構文
DBMS_MACADM.DELETE_RULE_FROM_RULE_SET( rule_set_name IN VARCHAR2, rule_name IN VARCHAR2);
パラメータ
表14-6 DELETE_RULE_FROM_RULE_SETのパラメータ
パラメータ | 説明 |
---|---|
|
ルール・セット名。 現行のデータベース・インスタンスで既存のルール・セットを検索するには、「DVSYS.DBA_DV_RULE_SETビュー」で説明されている |
|
ルール・セットから削除するルール。 現行のデータベース・インスタンスで既存のルールを検索するには、「DVSYS.DBA_DV_RULEビュー」で説明されている ルール・セットに関連付けられているルールを検索するには、「DVSYS.DBA_DV_RULE_SET_RULEビュー」で説明されている |
例
BEGIN DBMS_MACADM.DELETE_RULE_FROM_RULE_SET( rule_set_name => 'Limit_DBA_Access', rule_name => 'Check UPDATE operations'); END; /
DELETE_RULE_SET
プロシージャはルール・セットを削除します。
構文
DBMS_MACADM.DELETE_RULE_SET( rule_set_name IN VARCHAR2);
パラメータ
表14-7 DELETE_RULE_SETのパラメータ
パラメータ | 説明 |
---|---|
|
ルール・セット名。 現行のデータベース・インスタンスで既存のルール・セットを検索するには、「DVSYS.DBA_DV_RULE_SETビュー」で説明されている |
例
EXEC DBMS_MACADM.DELETE_RULE_SET('Limit_DBA_Access');
RENAME_RULE
プロシージャは、ルールの名前を変更して、その名前変更がすべてのルール使用箇所に反映されるようにします。
構文
DBMS_MACADM.RENAME_RULE( rule_name IN VARCHAR2, new_name IN VARCHAR2);
パラメータ
表14-8 RENAME_RULEのパラメータ
パラメータ | 説明 |
---|---|
|
現在のルール名。 現行のデータベース・インスタンスで既存のルールを検索するには、「DVSYS.DBA_DV_RULEビュー」で説明されている ルール・セットに関連付けられているルールを検索するには、「DVSYS.DBA_DV_RULE_SET_RULEビュー」で説明されている |
|
新しいルール名(大/小文字混在で最大128文字)。 |
例
BEGIN DBMS_MACADM.RENAME_RULE( rule_name => 'Check UPDATE operations', new_name => 'Check Sector 2 Processes'); END; /
RENAME_RULE_SET
プロシージャは、ルール・セットの名前を変更して、その名前変更がすべてのルール・セット使用箇所に反映されるようにします。
構文
DBMS_MACADM.RENAME_RULE_SET( rule_set_name IN VARCHAR2, new_name IN VARCHAR2);
パラメータ
表14-9 RENAME_RULE_SETのパラメータ
パラメータ | 説明 |
---|---|
|
現在のルール・セット名。 現行のデータベース・インスタンスで既存のルール・セットを検索するには、「DVSYS.DBA_DV_RULE_SETビュー」で説明されている |
|
新しいルール・セット名(大/小文字混在で最大128文字)。空白を使用できます。 |
例
BEGIN DBMS_MACADM.RENAME_RULE_SET( rule_set_name => 'Limit_DBA_Access', new_name => 'Limit Sector 2 Access'); END; /
UPDATE_RULE
プロシージャはルールを更新します。
構文
DBMS_MACADM.UPDATE_RULE( rule_name IN VARCHAR2, rule_expr IN VARCHAR2);
パラメータ
表14-10 UPDATE_RULEのパラメータ
パラメータ | 説明 |
---|---|
|
ルール名。 現行のデータベース・インスタンスで既存のルールを検索するには、「DVSYS.DBA_DV_RULEビュー」で説明されている ルール・セットに関連付けられているルールを検索するには、「DVSYS.DBA_DV_RULE_SET_RULEビュー」で説明されている |
|
PL/SQL 式に引用符が含まれる場合、二重引用符は使用しないでください。その場合は、2つの一重引用符を使用します。式全体を一重引用符で囲んでください。次に例を示します。 'TO_CHAR(SYSDATE,''HH24'') = ''12''' ルール式の詳細は、「新規ルールの作成」を参照してください。 既存のルール式を検索するには、 |
例
BEGIN DBMS_MACADM.UPDATE_RULE( rule_name => 'Check UPDATE operations', rule_expr =>'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''SYSADM'' AND ( UPPER(SYS_CONTEXT(''USERENV'',''MODULE'')) LIKE ''APPSRVR%'' OR UPPER(SYS_CONTEXT(''USERENV'',''MODULE'')) LIKE ''DBAPP%'' )' ); END; /
UPDATE_RULE_SET
プロシージャはルール・セットを更新します。
構文
DBMS_MACADM.UPDATE_RULE_SET( rule_set_name IN VARCHAR2, description IN VARCHAR2, enabled IN VARCHAR2, eval_options IN NUMBER, audit_options IN NUMBER, fail_options IN NUMBER, fail_message IN VARCHAR2, fail_code IN NUMBER, handler_options IN NUMBER, handler IN VARCHAR2, is_static IN BOOLEAN DEFAULT FALSE);
パラメータ
表14-11 UPDATE_RULE_SETのパラメータ
パラメータ | 説明 |
---|---|
|
ルール・セット名。 現行のデータベース・インスタンスで既存のルール・セットを検索するには、「DVSYS.DBA_DV_RULE_SETビュー」で説明されている |
|
ルール・セットの目的の説明(大/小文字混在で最大1024文字)。 |
|
|
|
ルール・セットに複数のルールを割り当てる場合は、次の設定のいずれかを入力します。
|
|
次の設定のいずれかを選択します。
|
|
エラーをレポートするオプション:
|
|
失敗を示すエラー・メッセージ。大/小文字混在の最大80文字で、 |
|
-20000から-20999または20000から20999の範囲の数値を入力し、 |
|
次の設定のいずれかを選択します。
|
|
カスタム・イベント・ハンドラ・ロジックを定義するPL/SQLファンクションまたはプロシージャの名前。 |
|
オプションです。SQL文によってアクセスされる際に、ルール・セットが評価される頻度を決定します。
|
例
BEGIN DBMS_MACADM.UPDATE_RULE_SET( rule_set_name => 'Limit_DBA_Access', description => 'DBA access through predefined processes', enabled => DBMS_MACUTL.G_YES, eval_options => DBMS_MACUTL.G_RULESET_EVAL_ANY, audit_options => DBMS_MACUTL.G_RULESET_AUDIT_FAIL, fail_options => DBMS_MACUTL.G_RULESET_FAIL_SHOW, fail_message => 'Access denied!', fail_code => 20900, handler_options => DBMS_MACUTL.G_RULESET_HANDLER_OFF, handler => '', is_static = TRUE); END; /
Oracle Database Vaultには、ルール・セットが保護するSQL文を検査するために、ルール・セットで使用するファンクションが用意されています。
たとえば、コマンド・ルールでルール・セットによりSELECT ON HR.EMPLOYEES
を保護する場合、ルール式でこれらのファンクションを使用して、より詳細な情報に基づいた判断を下すことができます。
表14-12にデフォルトのルール・ファンクションを示します。
表14-12 インストールされるOracle Database VaultのPL/SQLルール・セット・ファンクション
ルール・セット・ファンクション | 説明 |
---|---|
ルール・セットを起動するシステム・イベントを返します。 |
|
ログイン・ユーザー名を返します。 |
|
データベース・インスタンス番号を返します。 |
|
データベース名を返します。 |
|
データベース操作が発生したディクショナリ・オブジェクトのタイプ(表、プロシージャ、ビューなど)を返します。 |
|
データベース操作が発生したディクショナリ・オブジェクトの所有者を返します。 |
|
データベース操作が発生したディクショナリ・オブジェクトの名前を返します。 |
|
操作で使用されるデータベース文のSQLテキストの最初の4000文字を返します。 |
DV_SYSEVENT
ファンクションは、ルール・セットを起動するシステム・イベントを返します。
イベント名は、SQL文の構文のものと同じで、INSERT
やCREATE
などです。戻り型はVARCHAR2
です。
構文
DVSYS.DV_SYSEVENT () RETURN VARCHAR2;
パラメータ
ありません
例
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Get System Event Firing the Maintenance Rule Set', rule_expr => 'DVSYS.DV_SYSEVENT = ''CREATE'''); END; /
DV_LOGIN_USER
ファンクションは、ログイン・ユーザー名をVARCHAR2
データ型で返します。
構文
DVSYS.DV_LOGIN_USER () RETURN VARCHAR2;
パラメータ
ありません
例
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Check System Login User Name', rule_expr => 'DVSYS.DV_LOGIN_USER = ''SEBASTIAN'''); END; /
DV_INSTANCE_NUM
ファンクションは、データベース・インスタンス番号をNUMBER
データ型で返します。
構文
DVSYS.DV_INSTANCE_NUM () RETURN NUMBER;
パラメータ
ありません
例
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Check Database Instance Number', rule_expr => 'DVSYS.DV_INSTANCE_NUM BETWEEN 6 AND 9'); END; /
DV_DATABASE_NAME
ファンクションは、データベース名をVARCHAR2
データ型で返します。
構文
DVSYS.DV_DATABASE_NAME () RETURN VARCHAR2;
パラメータ
ありません
例
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Check Database Name', rule_expr => 'DVSYS.DV_DATABASE_NAME = ''ORCL'''); END; /
DV_DICT_OBJ_TYPE
ファンクションは、データベース操作が行われたディクショナリ・オブジェクトのタイプを返します。
たとえば、このファンクションが返すディクショナリ・オブジェクトは、表、プロシージャ、ビューです。戻り型はVARCHAR2
です。
構文
DVSYS.DV_DICT_OBJ_TYPE () RETURN VARCHAR2;
パラメータ
ありません
例
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Check Dictionary Object Type', rule_expr => 'DVSYS.DV_DICT_OBJ_TYPE IN (''TABLE'', ''VIEW'')'); END; /
DV_DICT_OBJ_OWNER
ファンクションは、データベース操作が発生したディクショナリ・オブジェクトの所有者の名前を返します。
戻り型はVARCHAR2
です。
構文
DVSYS.DV_DICT_OBJ_OWNER () RETURN VARCHAR2;
パラメータ
ありません
例
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Check Dictionary Object Owner', rule_expr => 'DVSYS.DV_DICT_OBJ_OWNER = ''JSMITH'''); END; /
DV_DICT_OBJ_NAME
ファンクションは、データベース操作が発生したディクショナリ・オブジェクトの名前を返します。
戻り型はVARCHAR2
です。
構文
DVSYS.DV_DICT_OBJ_NAME () RETURN VARCHAR2;
パラメータ
ありません
例
BEGIN DBMS_MACADM.CREATE_RULE( rule_name => 'Check Dictionary Object Name', rule_expr => 'DVSYS.DV_DICT_OBJ_NAME = ''SALES'''); END; /