この章の内容は次のとおりです。
DVSYS.DBMS_MACUTL
パッケージは、Oracle Database Vault用に作成するアプリケーション・コードのあらゆる箇所で使用できる一連の汎用ユーティリティ・プロシージャおよびファンクションを提供します。このパッケージは、すべてのユーザーが使用できます。
この項の内容は次のとおりです。
表13-1に、DVSYS.DBMS_MACUTL
パッケージの定数(フィールド)の説明をまとめています。これらの定数は、Oracle Database VaultのPL/SQLパッケージのいずれかとともに使用できます。これらの定数の多くは、Oracle Database Vaultパッケージに同等のものがあります。たとえば、複数のプロシージャで使用可能なenabled
パラメータでは、Y
(Yes)または定数G_YES
のいずれも使用できます。どちらを選択するかは個人の好みの問題です。どちらも結果は同じです。
表13-1 DVSYS.DBMS_MACUTLの定数のリスト
例13-1は、レルム作成時にG_YES
定数およびG_REALM_AUDIT_FAIL
DBMS_MACUTL
定数を使用する方法を示しています。
例13-1 DVSYS.DBMS_MACUTLの定数を使用したレルムの作成
BEGIN DVSYS.DBMS_MACADM.CREATE_REALM( realm_name => 'Performance Statistics Realm', description => 'Realm to measure performance', enabled => DVSYS.DBMS_MACUTL.G_YES, audit_options => DVSYS.DBMS_MACUTL.G_REALM_AUDIT_FAIL); END;
例13-2は、ルール・セット作成時に複数のDVSYS.DBMS_MACUTL
の定数を使用する方法を示しています。
例13-2 DVSYS.DBMS_MACUTLの定数を使用したルール・セットの作成
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE_SET( rule_set_name => 'Limit_DBA_Access', description => 'DBA access through predefined processes', enabled => 'Y', eval_options => DVSYS.DBMS_MACUTL.G_RULESET_EVAL_ALL, audit_options => POWER(2,0), fail_options => DVSYS.DBMS_MACUTL.G_RULESET_FAIL_SHOW, fail_message => 'Rule Set Limit_DBA_Access has failed.', fail_code => -22220, handler_options => POWER(2,0), handler => 'dbavowner.email_alert'); END;
例13-3は、ファクタ作成時に、定数を使用する方法を示しています。
例13-3 DVSYS.DBMS_MACUTLの定数を使用したファクタの作成
BEGIN DVSYS.DBMS_MACADM.CREATE_FACTOR( factor_name => 'Sector2_DB', factor_type_name => 'Instance', description => ' ', rule_set_name => 'DB_access', get_expr => 'UPPER(SYS_CONTEXT('USERENV','DB_NAME'))', validate_expr => 'dbavowner.check_db_access', identify_by => 2, labeled_by => DVSYS.DBMS_MACUTL.G_LABELED_BY_SELF, eval_options => DVSYS.DBMS_MACUTL.G_EVAL_ON_SESSION, audit_options => 0, fail_options => DVSYS.DBMS_MACUTL.G_FAIL_SILENTLY; END;
表13-2に、DVSYS.DBMS_MACUTL
パッケージのプロシージャおよびファンクションを示します。これらのプロシージャまたはファンクションは、スタンドアロン・コードとして、またはルール式内で使用できます。この項では、両方が使用されている例を示します。
表13-2 DVSYS.DBMS_MACUTLのユーティリティ・ファンクション
プロシージャまたはファンクション | 説明 |
---|---|
|
Oracle Database Vault構成を更新するユーザーによってパブリック・パッケージが無視されていないことを検証します。 |
|
|
|
Oracle SS形式(00〜59)で秒を返します。時間データに基づいたルール式に有用です。 |
|
Oracle MI形式(00〜59)で分を返します。時間データに基づいたルール式に有用です。 |
|
Oracle HH24形式(00〜23)で月を返します。時間データに基づいたルール式に有用です。 |
|
|
|
Oracle MM形式(01〜12)で月を返します。時間データに基づいたルール式に有用です。 |
|
Oracle YYYY形式(0001〜9999)で年を返します。時間データに基づいたルール式に有用です。 |
|
|
|
文字がアルファベットかどうかをチェックします。 |
|
文字が数値かどうかをチェックします。 |
|
Oracle Database Vault構成を管理する権限がユーザーに付与されているかどうかを判断します。 |
|
|
IS_OLS_INSTALLED_VARCHARファンクション |
Oracle Label Securityがインストールされているかどうかについてインジケータを返します。 |
USER_HAS_OBJECT_PRIVILEGEファンクション |
|
|
ユーザーがロール権限を直接保持するのか間接的に(他のロールを介して)保持するのかをチェックします。 |
|
|
USER_HAS_SYSTEM_PRIVILEGEファンクション |
このプロシージャは、Oracle Database Vault構成を更新するユーザーによってパブリック・パッケージが無視されていないことを検証します。
構文
DVSYS.DBMS_MACUTL.CHECK_DVSYS_DML_ALLOWED( p_user VARCHAR2 DEFAULT USER);
パラメータ
表13-3 CHECK_DVSYS_DML_ALLOWEDのパラメータ
パラメータ | 説明 |
---|---|
|
操作を実行しているユーザー。 現在のデータベース・インスタンスで既存のユーザーを検索するには、次のビューに問い合せます。
|
例
ユーザーSYSTEM
がチェックに失格となります。
EXEC DVSYS.DBMS_MACUTL.CHECK_DVSYS_DML_ALLOWED('system'); ERROR at line 1: ORA-47920: Authorization failed for user system to perform this operation ORA-06512: at "DVSYS.DBMS_MACUTL", line 23 ORA-06512: at "DVSYS.DBMS_MACUTL", line 372 ORA-06512: at "DVSYS.DBMS_MACUTL", line 508 ORA-06512: at "DVSYS.DBMS_MACUTL", line 572 ORA-06512: at line 1
DV_OWNER
ロールを持つユーザーdbvowner
が、チェックに合格します。
EXEC DVSYS.DBMS_MACUTL.CHECK_DVSYS_DML_ALLOWED('dbvowner'); PL/SQL procedure successfully completed.
このファンクションは、コード・グループ内でコードの値を検索し、VARCHAR2
値を返します。
構文
DVSYS.DBMS_MACUTL.GET_CODE_VALUE( p_code_group VARCHAR2, p_code VARCHAR2) RETURNS VARCHAR2;
パラメータ
表13-4 GET_CODE_VALUEのパラメータ
パラメータ | 説明 |
---|---|
|
コード・グループ( 現行のデータベース・インスタンスで使用可能なコード・グループを検索するには、「DBA_DV_CODEビュー」で説明されている |
|
コードのID。 このIDは、 |
例
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get Label Algorithm for Maximum Level/Union/Null', rule_expr => 'DVSYS.DBMS_MACUTL.GET_CODE_VALUE(''LABEL_ALG'', ''HUN'')'); END;
このファンクションは、Oracle SS(秒)形式(00〜59)で秒を返します。NUMBER
値を返します。時間データに基づいたルール式に有用です。
構文
DVSYS.DBMS_MACUTL.GET_SECOND( p_date DATE DEFAULT SYSDATE) RETURNS NUMBER;
パラメータ
表13-5 GET_SECONDのパラメータ
パラメータ | 説明 |
---|---|
|
SS形式の日付(たとえば 日付を指定しない場合、Oracle Database VaultはOracle Databaseの |
例
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get the Second', rule_expr => 'DVSYS.DBMS_MACUTL.GET_SECOND(59); END;
このファンクションは、Oracle MI(分)形式(00〜59)で分をNUMBER
値で返します。時間データに基づいたルール式に有用です。
構文
DVSYS.DBMS_MACUTL.GET_MINUTE( p_date DATE DEFAULT SYSDATE) RETURNS NUMBER;
パラメータ
表13-6 GET_MINUTEのパラメータ
パラメータ | 説明 |
---|---|
|
MI形式の日付(たとえば2:30の場合は 日付を指定しない場合、Oracle Database VaultはOracle Databaseの |
例
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get the Minute', rule_expr => 'DVSYS.DBMS_MACUTL.GET_MINUTE(30); END;
このファンクションは、Oracle HH24(時間)形式(00〜23)で時間をNUMBER
値で返します。時間データに基づいたルール式に有用です。
構文
DVSYS.DBMS_MACUTL.GET_HOUR( p_date DATE DEFAULT SYSDATE) RETURNS NUMBER;
パラメータ
表13-7 GET_HOURのパラメータ
パラメータ | 説明 |
---|---|
|
HH24形式の日付(たとえば午後2:00の場合は 日付を指定しない場合、Oracle Database VaultはOracle Databaseの |
例
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get the Hour', rule_expr => 'DVSYS.DBMS_MACUTL.GET_HOUR(14); END;
このファンクションは、Oracle DD(日)形式(01〜31)で日をNUMBER
値で返します。時間データに基づいたルール式に有用です。
構文
DVSYS.DBMS_MACUTL.GET_DAY( p_date DATE DEFAULT SYSDATE) RETURNS NUMBER;
パラメータ
表13-8 GET_DAYのパラメータ
パラメータ | 説明 |
---|---|
|
DD形式の日付(たとえば月の初日の場合は 日付を指定しない場合、Oracle Database VaultはOracle Databaseの |
例
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get the Day', rule_expr => 'DVSYS.DBMS_MACUTL.GET_DAY(); END;
このファンクションは、Oracle MM(月)形式(01〜12)で月をNUMBER
値で返します。時間データに基づいたルール式に有用です。
構文
DVSYS.DBMS_MACUTL.GET_MONTH( p_date DATE DEFAULT SYSDATE) RETURNS NUMBER;
パラメータ
表13-9 GET_MONTHのパラメータ
パラメータ | 説明 |
---|---|
|
MM形式の日付(たとえば8月の場合は 日付を指定しない場合、Oracle Database VaultはOracle Databaseの |
例
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get the Month', rule_expr => 'DVSYS.DBMS_MACUTL.GET_MONTH(08); END;
このファンクションは、Oracle YYYY(年)形式(0001〜9999)で年をNUMBER
値で返します。時間データに基づいたルール式に有用です。
構文
DVSYS.DBMS_MACUTL.GET_YEAR( p_date DATE DEFAULT SYSDATE) RETURNS NUMBER;
パラメータ
表13-10 GET_YEARのパラメータ
パラメータ | 説明 |
---|---|
|
YYYY形式の日付(たとえば 日付を指定しない場合、Oracle Database Vaultは |
例
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get the Year', rule_expr => 'DVSYS.DBMS_MACUTL.GET_YEAR(1984); END;
このファンクションは、ora_name_list_t
の要素を単一のVARCHAR2
値に連結し、VARCHAR2
値を返します。
構文
DVSYS.DBMS_MACUTL.GET_SQL_TEXT( p_sql_text ora_name_list_t) RETURNS VARCHAR2;
パラメータ
例
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get SQL strings', rule_expr => 'DVSYS.DBMS_MACUTL.GET_SQL_TEXT(sec_mgr.sql_strings); END;
このファンクションは、文字がアルファベットかどうかをチェックし、BOOLEAN
値を返します。IS_ALPHA
は、文字がアルファベットの場合にTRUE
を返します。
構文
DVSYS.DBMS_MACUTL.IS_ALPHA( c VARCHAR2) RETURNS BOOLEAN;
パラメータ
例
SET SERVEROUTPUT ON BEGIN IF DVSYS.DBMS_MACUTL.IS_ALPHA('z') THEN DBMS_OUTPUT.PUT_LINE('The alphabetic character was found'); ELSE DBMS_OUTPUT.PUT_LINE('No alphbetic characters today.'); END IF; END;
このファンクションは、文字が数値かどうかをチェックし、BOOLEAN
値を返します。IS_DIGIT
は、文字が数値の場合にTRUE
を返します。
構文
DVSYS.DBMS_MACUTL.IS_DIGIT( c VARCHAR2) RETURNS BOOLEAN;
パラメータ
例
SET SERVEROUTPUT ON BEGIN IF DVSYS.DBMS_MACUTL.IS_DIGIT('7') THEN DBMS_OUTPUT.PUT_LINE('The numeric character was found'); ELSE DBMS_OUTPUT.PUT_LINE('No numeric characters today.'); END IF; END;
このファンクションは、Oracle Database Vault構成を管理する権限がユーザーに付与されているかどうかを判断し、BOOLEAN
値を返します。IS_DVSYS_OWNER
は、ユーザーに権限が付与されている場合にTRUE
を返します。
構文
DVSYS.DBMS_MACUTL.IS_DVSYS_OWNER( p_user VARCHAR2 DEFAULT USER) RETURNS BOOLEAN;
パラメータ
表13-14 IS_DVSYS_OWNERのパラメータ
パラメータ | 説明 |
---|---|
|
チェックするユーザー。 既存のユーザーを検索するには、次のビューに問い合せます。
|
例
SET SERVEROUTPUT ON BEGIN IF DVSYS.DBMS_MACUTL.IS_DVSYS_OWNER('PSMITH') THEN DBMS_OUTPUT.PUT_LINE('PSMITH is authorized to manage Database Vault.'); ELSE DBMS_OUTPUT.PUT_LINE('PSMITH is not authorized to manage Database Vault.'); END IF; END;
このファンクションは、Oracle Label Securityがインストールされているかどうかについてインジケータを返し、TRUEまたはFALSEのBOOLEAN
値を返します。Oracle Label Securityがインストールされている場合、IS_OLS_INSTALLED
はTRUE
を返します。
構文
DVSYS.DBMS_MACUTL.IS_OLS_INSTALLED() RETURNS BOOLEAN;
パラメータ
なし。
例
SET SERVEROUTPUT ON BEGIN IF DVSYS.DBMS_MACUTL.IS_OLS_INSTALLED() THEN DBMS_OUTPUT.PUT_LINE('OLS is installed'); ELSE DBMS_OUTPUT.PUT_LINE('OLS is not installed'); END IF; END;
このファンクションは、Oracle Label Securityがインストールされているかどうかについてインジケータを返し、YまたはNのVARCHAR2
値を返します。Oracle Label Securityがインストールされている場合、IS_OLS_INSTALLED_VARCHAR
はY
を返します。
構文
DVSYS.DBMS_MACUTL.IS_OLS_INSTALLED_VARCHAR() RETURNS VARCHAR2;
パラメータ
なし。
例
例については「IS_OLS_INSTALLEDファンクション」を参照してください。
このファンクションは、ユーザーまたはロールがオブジェクト権限の付与によってオブジェクトにアクセスできるかどうかをチェックし、BOOLEAN
値を返します。ユーザーまたはロールにオブジェクト権限がある場合、USER_HAS_OBJECT_PRIVILEGE
はTRUE
を返します。
構文
DVSYS.DBMS_MACUTL.USER_HAS_OBJECT_PRIVILEGE( p_user VARCHAR2, p_object_owner VARCHAR2, p_object_name VARCHAR2, p_privilege VARCHAR2) RETURNS BOOLEAN;
パラメータ
表13-15 USER_HAS_OBJECT_PRIVILEGEのパラメータ
パラメータ | 説明 |
---|---|
|
チェックするユーザーまたはロール。 既存のユーザーを検索するには、次のビューに問い合せます。
|
|
オブジェクト所有者。 使用可能なユーザーを検索するには、『Oracle Databaseリファレンス』で説明されている 特定のユーザーの認可を検索するには、「DBA_DV_REALM_AUTHビュー」で説明されている |
|
オブジェクト名。 使用可能なオブジェクトを検索するには、『Oracle Databaseリファレンス』で説明されている 既存のレルムによって保護されているオブジェクトを検索するには、「DBA_DV_REALM_OBJECTビュー」で説明されている |
|
オブジェクト権限(
データベース・アカウントのすべての権限を検索するには、「DBA_DV_USER_PRIVS_ALLビュー」で説明されている |
例
SET SERVEROUTPUT ON BEGIN IF DVSYS.DBMS_MACUTL.USER_HAS_OBJECT_PRIVILEGE( 'SECTOR2_APP_MGR', 'OE', 'ORDERS', 'SELECT, UPDATE') THEN DBMS_OUTPUT.PUT_LINE('SECTOR2_APP_MGR has privileges.'); ELSE DBMS_OUTPUT.PUT_LINE('SECTOR2_APP_MGR does not have privileges.'); END IF; END;
このファンクションは、ユーザーがロール権限を直接保持するのか間接的に(他のロールを介して)保持するのかをチェックし、BOOLEAN
値を返します。ユーザーにロール権限がある場合、USER_HAS_ROLE
はTRUE
を返します。
構文
DVSYS.DBMS_MACUTL.USER_HAS_ROLE( p_role VARCHAR2, p_user VARCHAR2 DEFAULT USER) RETURNS BOOLEAN;
パラメータ
表13-16 USER_HAS_ROLEのパラメータ
パラメータ | 説明 |
---|---|
|
チェックするロール権限。 既存のロールを検索するには、次のビューに問い合せます。
|
|
チェックするユーザー。 既存のユーザーを検索するには、次のビューに問い合せます。
|
例
SET SERVEROUTPUT ON BEGIN IF DVSYS.DBMS_MACUTL.USER_HAS_ROLE('PSMITH', 'SECTOR2_APP_MGR') THEN DBMS_OUTPUT.PUT_LINE('User PSMITH has the SECTOR2_APP_MGR role'); ELSE DBMS_OUTPUT.PUT_LINE('User PSMITH does not have the SECTOR2_APP_MGR role.'); END IF; END;
このファンクションは、ユーザーがロール権限を直接保持するのか間接的に(他のロールを介して)保持するのかをチェックし、VARCHAR2
値を返します。ユーザーにロール権限が指定されている場合、USER_HAS_ROLE_VARCHAR
はY
を返します。
構文
DVSYS.DBMS_MACUTL.USER_HAS_ROLE_VARCHAR( p_role VARCHAR2, p_user VARCHAR2 DEFAULT USER) RETURNS VARCHAR2;
パラメータ
表13-17 USER_HAS_ROLE_VARCHARのパラメータ
パラメータ | 説明 |
---|---|
|
チェックするロール。 既存のロールを検索するには、次のビューに問い合せます。
|
|
チェックするユーザー。 既存のユーザーを検索するには、次のビューに問い合せます。
|
このファンクションは、ユーザーがシステム権限を直接保持するのか間接的に(ロールを介して)保持するのかをチェックし、BOOLEAN
値を返します。ユーザーにシステム権限が指定されている場合、USER_HAS_SYSTEM_PRIVILEGE
はTRUE
を返します。
構文
DVSYS.DBMS_MACUTL.USER_HAS_SYSTEM_PRIVILEGE( p_privilege VARCHAR2, p_user VARCHAR2 DEFAULT USER) RETURNS BOOLEAN;
パラメータ
表13-18 USER_HAS_SYSTEM_PRIVILEGEのパラメータ
パラメータ | 説明 |
---|---|
|
チェックするシステム権限。
データベース・アカウントのすべての権限を検索するには、「DBA_DV_USER_PRIVS_ALLビュー」で説明されている |
|
チェックするユーザー。 既存のユーザーを検索するには、次のビューに問い合せます。
|
例
SET SERVEROUTPUT ON BEGIN IF DVSYS.DBMS_MACUTL.USER_HAS_SYSTEM_PRIVILEGE('EXECUTE', 'PSMITH') THEN DBMS_OUTPUT.PUT_LINE('User PSMITH has the EXECUTE system privilege.'); ELSE DBMS_OUTPUT.PUT_LINE('User PSMITH does not have the EXECUTE system privilege.'); END IF; END;