この章の内容は次のとおりです。
DBMS_MACUTLパッケージは、Oracle Database Vault用に作成するアプリケーション・コードのあらゆる箇所で使用できる一連の汎用ユーティリティ・プロシージャおよびファンクションを提供します。このパッケージは、すべてのユーザーが使用できます。
この項の内容は次のとおりです。
表14-1に、DBMS_MACUTLパッケージの定数(フィールド)の説明をまとめています。これらの定数は、Oracle Database VaultのPL/SQLパッケージのいずれかとともに使用できます。これらの定数の多くは、Oracle Database Vaultパッケージに同等のものがあります。たとえば、複数のプロシージャで使用可能なenabledパラメータでは、Y(Yes)または定数G_YESのいずれも使用できます。どちらを選択するかは個人の好みの問題です。どちらも結果は同じです。
表14-1 DBMS_MACUTLの定数のリスト
| 定数名 | データ型 | 説明 |
|---|---|---|
|
|
|
すべてのオブジェクト名またはオブジェクト・タイプを示すワイルドカードとして、レルムAPI |
|
|
|
監査を有効にするために、ファクタAPI |
|
|
|
監査 |
|
|
|
|
|
|
|
|
|
|
|
信頼レベルが負の場合に監査を行うために、ファクタAPI |
|
|
|
信頼レベルが存在しない場合に監査を行うために、ファクタAPI |
|
|
|
検証ファンクションがエラーを返した場合に監査を行うために、ファクタAPI |
|
|
|
検証ファンクションがFalseの場合に監査を行うために、ファクタAPI |
|
|
|
アクセスするたびにファクタを再評価するために、ファクタAPI |
|
|
|
ユーザーがセッションにログインしたとき、1回のみファクタを評価するために、ファクタAPI |
|
|
|
失敗時にエラー・メッセージを表示しないように、 |
|
|
|
失敗時にエラー・メッセージを表示するように、 |
|
|
|
ファクタAPI |
|
|
|
コンテキストを示すために、ファクタAPI |
|
|
|
|
|
|
|
ファクタAPI |
|
|
|
ファクタAPI |
|
|
|
サブファクタおよびマージ・アルゴリズムからラベルを導出するために、ファクタAPI |
|
|
|
ファクタ・アイデンティティのラベル付けのために、ファクタAPI |
|
|
|
これは、ファクタに基づいてユーザーが設定できる最高のラベルです。ユーザーに対するラベルは考慮されません。 |
|
|
|
NULLラベルのファクタにデフォルト設定されるラベル。 |
|
|
|
次のAPIで使用します。
|
|
|
|
|
|
|
|
|
|
|
|
監査を無効にするために、レルムAPI |
|
|
|
レルムAPI |
|
|
|
所有者に対するレルム認可を設定するために、レルムAPI |
|
|
|
参加者に対するレルム認可を設定するために、レルムAPI |
|
|
|
|
|
|
|
監査を無効にするために、ルール・セットAPI |
|
|
|
ルール・セット成功時に監査を行うために、ルール・セットAPI |
|
|
|
すべてのルールがTrueと評価された場合にルール・セットが成功するように、ルール・セットAPI |
|
|
|
ルールのいずれかがTrueと評価された場合に成功するように、ルール・セットAPI |
|
|
|
ルール・セットが失敗した場合にエラー・メッセージが表示されるように、ルール・セットAPI |
|
|
|
ルール・セットが失敗した場合にエラー・メッセージが表示されないように、ルール・セットAPI |
|
|
|
ルール・セットが失敗した場合にハンドラ( |
|
|
|
ハンドラへのコールを無効にするか、ハンドラが使用されない場合に、ルール・セットAPI |
|
|
|
ルール・セットが成功した場合にハンドラをコールするように、ルール・セットAPI |
|
|
|
前の値を考慮した上で、ユーザーのラベルに設定する必要があるとOracle Label Securityで決められた値。 |
|
|
|
次のAPIで使用します。
|
例14-1は、レルム作成時にG_YES定数およびG_REALM_AUDIT_FAIL DBMS_MACUTL定数を使用する方法を示しています。
例14-1 DBMS_MACUTLの定数を使用したレルムの作成
BEGIN DBMS_MACADM.CREATE_REALM( realm_name => 'Performance Statistics Realm', description => 'Realm to measure performance', enabled => DBMS_MACUTL.G_YES, audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL); END; /
例14-2は、ルール・セット作成時に複数のDBMS_MACUTLの定数を使用する方法を示しています。
例14-2 DBMS_MACUTLの定数を使用したルール・セットの作成
BEGIN DBMS_MACADM.CREATE_RULE_SET( rule_set_name => 'Limit_DBA_Access', description => 'DBA access through predefined processes', enabled => 'Y', eval_options => DBMS_MACUTL.G_RULESET_EVAL_ALL, audit_options => DBMS_MACUTL.G_RULESET_AUDIT_FAIL, fail_options => DBMS_MACUTL.G_RULESET_FAIL_SHOW, fail_message => 'Rule Set Limit_DBA_Access has failed.', fail_code => 20000, handler_options => DBMS_MACUTL.G_RULESET_HANDLER_FAIL, handler => 'dbavowner.email_alert'); END; /
例14-3は、ファクタ作成時に、定数を使用する方法を示しています。
例14-3 DBMS_MACUTLの定数を使用したファクタの作成
BEGIN
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 => DBMS_MACUTL.G_IDENTIFY_BY_FACTOR,
labeled_by => DBMS_MACUTL.G_LABELED_BY_SELF,
eval_options => DBMS_MACUTL.G_EVAL_ON_SESSION,
audit_options => DBMS_MACUTL.G_AUDIT_ALWAYS,
fail_options => DBMS_MACUTL.G_FAIL_SILENTLY);
END;
/
表14-2に、DBMS_MACUTLパッケージのプロシージャおよびファンクションを示します。 これらのプロシージャまたはファンクションは、スタンドアロン・コードとして、またはルール式内で使用できます。この項では、両方が使用されている例を示します。
表14-2 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_SYSTEM_PRIVILEGEファンクション |
CHECK_DVSYS_DML_ALLOWEDプロシージャは、Oracle Database Vault構成を更新するユーザーによってパブリック・パッケージが無視されていないことを検証します。
構文
DBMS_MACUTL.CHECK_DVSYS_DML_ALLOWED( p_user IN VARCHAR2 DEFAULT USER);
パラメータ
表14-3 CHECK_DVSYS_DML_ALLOWEDのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
操作を実行しているユーザー。 現在のデータベース・インスタンスで既存のユーザーを検索するには、次のビューに問い合せます。
|
例
ユーザーSYSTEMがチェックに失格となります。
EXEC 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 "DBMS_MACUTL", line 23
ORA-06512: at "DBMS_MACUTL", line 372
ORA-06512: at "DBMS_MACUTL", line 508
ORA-06512: at "DBMS_MACUTL", line 572
ORA-06512: at line 1
lbrown_dvownerロールを持つユーザーDV_OWNERが、チェックに合格します。
EXEC DBMS_MACUTL.CHECK_DVSYS_DML_ALLOWED('lbrown_dvowner');
PL/SQL procedure successfully completed.
GET_CODE_VALUEファンクションは、コード・グループ内でコードの値を検索し、VARCHAR2値を返します。
構文
DBMS_MACUTL.GET_CODE_VALUE( p_code_group IN VARCHAR2, p_code IN VARCHAR2) RETURN VARCHAR2;
パラメータ
表14-4 GET_CODE_VALUEのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
コード・グループ( 現行のデータベース・インスタンスで使用可能なコード・グループを検索するには、 |
|
|
コードのID。 このIDは、 |
例
BEGIN
DBMS_MACADM.CREATE_RULE(
rule_name => 'Get Label Algorithm for Maximum Level/Union/Null',
rule_expr => 'DBMS_MACUTL.GET_CODE_VALUE(''LABEL_ALG'', ''HUN'') = ''Union''');
END;
/
GET_SECONDファンクションは、Oracle SS(秒)形式で秒(00から59)を返します。NUMBER値を返します。時間データに基づいたルール式に有用です。
構文
DBMS_MACUTL.GET_SECOND( p_date IN DATE DEFAULT SYSDATE) RETURN NUMBER;
パラメータ
表14-5 GET_SECONDのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SS形式の日付(たとえば 日付を指定しない場合、Oracle Database VaultはOracle Databaseの |
例
SET SERVEROUTPUT ON
DECLARE
seconds number;
BEGIN
seconds := DBMS_MACUTL.GET_SECOND(TO_DATE('03-APR-2009 6:56 PM',
'dd-mon-yyyy hh:mi PM'));
DBMS_OUTPUT.PUT_LINE('Seconds: '||seconds);
END;
/
この例では固定日時を使用しており、次の値を返します。
Seconds: 56
GET_MINUTEファンクションは、Oracle MI(分)形式の分(00から59)をNUMBER値で返します。時間データに基づいたルール式に有用です。
構文
DBMS_MACUTL.GET_MINUTE( p_date IN DATE DEFAULT SYSDATE) RETURN NUMBER;
パラメータ
表14-6 GET_MINUTEのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
MI形式の日付(たとえば2:30の場合は 日付を指定しない場合、Oracle Database VaultはOracle Databaseの |
例
SET SERVEROUTPUT ON
DECLARE
minute number;
BEGIN
minute := DBMS_MACUTL.GET_MINUTE(SYSDATE);
DBMS_OUTPUT.PUT_LINE('Minute: '||minute);
END;
/
次のような出力が表示されます。
Minute: 17
GET_HOURファンクションは、Oracle HH24(時間)形式の時間(00から23)をNUMBER値で返します。時間データに基づいたルール式に有用です。
構文
DBMS_MACUTL.GET_HOUR( p_date IN DATE DEFAULT SYSDATE) RETURN NUMBER;
パラメータ
表14-7 GET_HOURのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
HH24形式の日付(たとえば午後2:00の場合は 日付を指定しない場合、Oracle Database VaultはOracle Databaseの |
例
SET SERVEROUTPUT ON
DECLARE
hours number;
BEGIN
hours := DBMS_MACUTL.GET_HOUR(SYSDATE);
DBMS_OUTPUT.PUT_LINE('Hour: '||hours);
END;
/
次のような出力が表示されます。
Hour: 12
GET_DAYファンクションは、Oracle DD(日)形式の日(01から31)をNUMBER値で返します。時間データに基づいたルール式に有用です。
構文
DBMS_MACUTL.GET_DAY( p_date IN DATE DEFAULT SYSDATE) RETURN NUMBER;
パラメータ
表14-8 GET_DAYのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
DD形式の日付(たとえば月の初日の場合は 日付を指定しない場合、Oracle Database VaultはOracle Databaseの |
例
SET SERVEROUTPUT ON
DECLARE
day number;
BEGIN
day := DBMS_MACUTL.GET_DAY(SYSDATE);
DBMS_OUTPUT.PUT_LINE('Day: '||day);
END;
/
次のような出力が表示されます。
Day: 3
GET_MONTHファンクションは、Oracle MM(月)形式の月(01から12)をNUMBER値で返します。時間データに基づいたルール式に有用です。
構文
DBMS_MACUTL.GET_MONTH( p_date IN DATE DEFAULT SYSDATE) RETURN NUMBER;
パラメータ
表14-9 GET_MONTHのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
MM形式の日付(たとえば8月の場合は 日付を指定しない場合、Oracle Database VaultはOracle Databaseの |
例
SET SERVEROUTPUT ON
DECLARE
month number;
BEGIN
month := DBMS_MACUTL.GET_MONTH(SYSDATE);
DBMS_OUTPUT.PUT_LINE('Month: '||month);
END;
/
次のような出力が表示されます。
Month: 4
GET_YEARファンクションは、Oracle YYYY(年)形式の年(0001から9999)をNUMBER値で返します。時間データに基づいたルール式に有用です。
構文
DBMS_MACUTL.GET_YEAR( p_date IN DATE DEFAULT SYSDATE) RETURN NUMBER;
パラメータ
表14-10 GET_YEARのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
YYYY形式の日付(たとえば 日付を指定しない場合、Oracle Database Vaultは |
例
SET SERVEROUTPUT ON
DECLARE
year number;
BEGIN
year := DBMS_MACUTL.GET_YEAR(SYSDATE);
DBMS_OUTPUT.PUT_LINE('Year: '||year);
END;
/
IS_ALPHAファンクションは、文字がアルファベットかどうかをチェックし、BOOLEAN値を返します。IS_ALPHAは、文字がアルファベットの場合にTRUEを返します。
構文
DBMS_MACUTL.IS_ALPHA( c IN VARCHAR2) RETURN BOOLEAN;
パラメータ
例
SET SERVEROUTPUT ON
BEGIN
IF DBMS_MACUTL.IS_ALPHA('z')
THEN DBMS_OUTPUT.PUT_LINE('The alphabetic character was found');
ELSE
DBMS_OUTPUT.PUT_LINE('No alphabetic characters today.');
END IF;
END;
/
IS_DIGITファンクションは、文字が数値かどうかをチェックし、BOOLEAN値を返します。IS_DIGITは、文字が数値の場合にTRUEを返します。
構文
DBMS_MACUTL.IS_DIGIT( c IN VARCHAR2) RETURN BOOLEAN;
パラメータ
例
SET SERVEROUTPUT ON
BEGIN
IF 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;
/
IS_DVSYS_OWNERファンクションは、Oracle Database Vault構成を管理する権限がユーザーに付与されているかどうかを判断し、BOOLEAN値を返します。IS_DVSYS_OWNERは、ユーザーに権限が付与されている場合にTRUEを返します。
構文
DBMS_MACUTL.IS_DVSYS_OWNER( p_user IN VARCHAR2 DEFAULT USER) RETURN BOOLEAN;
パラメータ
表14-13 IS_DVSYS_OWNERのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
チェックするユーザー。 既存のユーザーを検索するには、次のビューに問い合せます。
|
例
SET SERVEROUTPUT ON
BEGIN
IF 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;
/
IS_OLS_INSTALLEDファンクションは、Oracle Label Securityがインストールされているかどうかについてインジケータを返し、TRUEまたはFALSEのBOOLEAN値を返します。Oracle Label Securityがインストールされている場合、IS_OLS_INSTALLEDはTRUEを返します。
構文
DBMS_MACUTL.IS_OLS_INSTALLED() RETURN BOOLEAN;
パラメータ
なし。
例
SET SERVEROUTPUT ON
BEGIN
IF 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;
/
IS_OLS_INSTALLED_VARCHARファンクションは、Oracle Label Securityがインストールされているかどうかについてインジケータを返し、YまたはNのVARCHAR2値を返します。Oracle Label Securityがインストールされている場合、IS_OLS_INSTALLED_VARCHARはYを返します。
構文
DBMS_MACUTL.IS_OLS_INSTALLED_VARCHAR() RETURN VARCHAR2;
パラメータ
なし。
例
例については「IS_OLS_INSTALLEDファンクション」を参照してください。
USER_HAS_ROLEファンクションは、ユーザーがロール権限を直接保持するのか間接的に(他のロールを介して)保持するのかをチェックし、BOOLEAN値を返します。ユーザーにロール権限がある場合、USER_HAS_ROLEはTRUEを返します。
構文
DBMS_MACUTL.USER_HAS_ROLE( p_role IN VARCHAR2, p_user IN VARCHAR2 DEFAULT USER) RETURN BOOLEAN;
パラメータ
表14-14 USER_HAS_ROLEのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
チェックするロール権限。 既存のロールを検索するには、次のビューに問い合せます。
|
|
|
チェックするユーザー。 既存のユーザーを検索するには、次のビューに問い合せます。
|
例
SET SERVEROUTPUT ON
BEGIN
IF DBMS_MACUTL.USER_HAS_ROLE('SECTOR2_APP_MGR', 'PSMITH')
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;
/
USER_HAS_ROLE_VARCHARファンクションは、ユーザーがロール権限を直接保持するのか間接的に(他のロールを介して)保持するのかをチェックし、VARCHAR2値を返します。ユーザーにロール権限が指定されている場合、USER_HAS_ROLE_VARCHARはYを返します。
構文
DBMS_MACUTL.USER_HAS_ROLE_VARCHAR( p_role IN VARCHAR2, p_user IN VARCHAR2 DEFAULT USER) RETURN VARCHAR2;
パラメータ
表14-15 USER_HAS_ROLE_VARCHARのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
チェックするロール。 既存のロールを検索するには、次のビューに問い合せます。
|
|
|
チェックするユーザー。 既存のユーザーを検索するには、次のビューに問い合せます。
|
USER_HAS_SYSTEM_PRIVILEGEファンクションは、ユーザーがシステム権限を直接保持するのか間接的に(ロールを介して)保持するのかをチェックし、BOOLEAN値を返します。ユーザーにシステム権限が指定されている場合、USER_HAS_SYSTEM_PRIVILEGEはTRUEを返します。
構文
DBMS_MACUTL.USER_HAS_SYSTEM_PRIVILEGE( p_privilege IN VARCHAR2, p_user IN VARCHAR2 DEFAULT USER) RETURN BOOLEAN;
パラメータ
表14-16 USER_HAS_SYSTEM_PRIVILEGEのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
チェックするシステム権限。
データベース・アカウントのすべての権限を検索するには、 |
|
|
チェックするユーザー。 既存のユーザーを検索するには、次のビューに問い合せます。
|
例
SET SERVEROUTPUT ON
BEGIN
IF DBMS_MACUTL.USER_HAS_SYSTEM_PRIVILEGE('EXECUTE', 'PSMITH')
THEN DBMS_OUTPUT.PUT_LINE('User PSMITH has the EXECUTE ANY PRIVILEGE privilege.');
ELSE
DBMS_OUTPUT.PUT_LINE('User PSMITH does not have the EXECUTE ANY PRIVILEGE privilege.');
END IF;
END;
/