Oracle® Database Vault Administrator's Guide 10g Release 2 (10.2) Part Number B25166-09 |
|
|
View PDF |
In this chapter:
The DVSYS.DBMS_MACUTL
package provides a set of general purpose utility procedures and functions that you can use throughout the application code you write for Oracle Database Vault. This package is available to all users.
In this section:
Table 13-1 summarizes constant (that is, fields) descriptions for the DVSYS.DBMS_MACUTL
package. You can use these constants with any of the Oracle Database Vault PL/SQL packages. Many of these constants have equivalents in the Oracle Database Vault package. For example, the enabled
parameter, which is available in several procedures, can accept either Y
(for Yes) or the constant G_YES
. Choosing one over the other is a matter of personal preference. They both have the same end result.
Table 13-1 DVSYS.DBMS_MACUTL Listing of Constants
Example 13-1 shows how to use the G_YES
and G_REALM_AUDIT_FAIL
DBMS_MACUTL
constants when creating a realm.
Example 13-1 Creating a Realm Using DVSYS.DBMS_MACUTL Constants
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;
Example 13-2 shows how to use several DVSYS.DBMS_MACUTL
constants when creating a rule set.
Example 13-2 Creating a Rule Set Using DVSYS.DBMS_MACUTL Constants
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;
Example 13-3 shows how to use constants when creating a factor.
Example 13-3 Creating a Factor Using DVSYS.DBMS_MACUTL Constants
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;
Table 13-2 lists the procedures and functions in the DVSYS.DBMS_MACUTL
package. You can use these procedures or functions as stand-alone code, or within rule expressions. The examples in this section show a mixture of using both.
Table 13-2 DVSYS.DBMS_MACUTL Utility Functions
This procedure verifies that public packages are not being bypassed by users updating the Oracle Database Vault configuration.
Syntax
CHECK_DVSYS_DML_ALLOWED( p_user VARCHAR2 DEFAULT USER);
Parameter
Table 13-3 CHECK_DVSYS_DML_ALLOWED Parameter
Parameter | Description |
---|---|
|
User performing the operation. To find existing users in the current database instance, query they following views:
|
Example
User SYSTEM
fails the check:
SQL> 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
User dbvowner
, who has the DV_OWNER
role, passes the check:
SQL> EXEC DVSYS.DBMS_MACUTL.CHECK_DVSYS_DML_ALLOWED('dbvowner'); PL/SQL procedure successfully completed.
This function looks up the value for a code within a code group, and then returns a VARCHAR2
value.
Syntax
GET_CODE_VALUE( p_code_group VARCHAR2, p_code VARCHAR2) RETURNS VARCHAR2;
Parameters
Table 13-4 GET_CODE_VALUE Parameters
Parameter | Description |
---|---|
|
Code group, for example, To find available code groups in the current database instance, query the |
|
ID of the code. This ID is listed when you run the |
Example
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;
This function returns the seconds in Oracle SS (seconds) format (00–59), and then returns a NUMBER
value. It is useful for rule expressions based on time data.
Syntax
GET_SECOND( p_date DATE DEFAULT SYSDATE) RETURNS NUMBER;
Parameter
Table 13-5 GET_SECOND Parameter
Parameter | Description |
---|---|
|
Date in SS format, for example: If you do not specify a date, Oracle Database Vault uses the Oracle Database |
Example
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get the Second', rule_expr => 'DVSYS.DBMS_MACUTL.GET_SECOND(59); END;
This function returns the minute in Oracle MI (minute) format (00–59); returns a NUMBER
value. Useful for rule expressions based on time data.
Syntax
GET_MINUTE( p_date DATE DEFAULT SYSDATE) RETURNS NUMBER;
Parameter
Table 13-6 GET_MINUTE Parameter
Parameter | Description |
---|---|
|
Date in MI format, for example, If you do not specify a date, Oracle Database Vault uses the Oracle Database |
Example
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get the Minute', rule_expr => 'DVSYS.DBMS_MACUTL.GET_MINUTE(30); END;
This function returns the hour in Oracle HH24 (hour) format (00–23); returns a NUMBER
value. Useful for rule expressions based on time data.
Syntax
GET_HOUR( p_date DATE DEFAULT SYSDATE) RETURNS NUMBER;
Parameter
Table 13-7 GET_HOUR Parameter
Parameter | Description |
---|---|
|
Date in HH24 format, for example, If you do not specify a date, Oracle Database Vault uses the Oracle Database |
Example
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get the Hour', rule_expr => 'DVSYS.DBMS_MACUTL.GET_HOUR(14); END;
This function returns the day in Oracle DD (day) format (01–31); returns a NUMBER
value. It is useful for rule expressions based on time data.
Syntax
GET_DAY( p_date DATE DEFAULT SYSDATE) RETURNS NUMBER;
Parameter
Table 13-8 GET_DAY Parameter
Parameter | Description |
---|---|
|
Date in DD format, for example, If you do not specify a date, Oracle Database Vault uses the Oracle Database |
Example
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get the Day', rule_expr => 'DVSYS.DBMS_MACUTL.GET_DAY(); END;
This function returns the month in Oracle MM (month) format (01–12); returns a NUMBER
value. Useful for rule expressions based on time data.
Syntax
GET_MONTH( p_date DATE DEFAULT SYSDATE) RETURNS NUMBER;
Parameter
Table 13-9 GET_MONTH Parameter
Parameter | Description |
---|---|
|
Date in MM format, for example, If you do not specify a date, Oracle Database Vault uses the Oracle Database |
Example
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get the Month', rule_expr => 'DVSYS.DBMS_MACUTL.GET_MONTH(08); END;
This function returns the year in Oracle YYYY (year) format (0001–9999); returns a NUMBER
value. Useful for rule expressions based on time data.
Syntax
GET_YEAR( p_date DATE DEFAULT SYSDATE) RETURNS NUMBER;
Parameter
Table 13-10 GET_YEAR Parameter
Parameter | Description |
---|---|
|
Date in YYYY format, for example, If you do not specify a date, Oracle Database Vault uses the |
Example
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get the Year', rule_expr => 'DVSYS.DBMS_MACUTL.GET_YEAR(1984); END;
This function concatenates the elements of ora_name_list_t
into a single VARCHAR2
value, and then returns a VARCHAR2
value.
Syntax
GET_SQL_TEXT( p_sql_text ora_name_list_t) RETURNS VARCHAR2;
Parameters
Table 13-11 GET_SQL_TEXT Parameter
Parameter | Description |
---|---|
|
Table of |
Example
BEGIN DVSYS.DBMS_MACADM.CREATE_RULE( rule_name => 'Get SQL strings', rule_expr => 'DVSYS.DBMS_MACUTL.GET_SQL_TEXT(sec_mgr.sql_strings); END;
This function checks whether the character is alphabetic, and then returns a BOOLEAN
value. IS_ALPHA
returns TRUE
if the character is alphabetic.
Syntax
IS_ALPHA( c VARCHAR2) RETURNS BOOLEAN;
Parameter
Example
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;
This function checks whether the character is numeric, and then returns a BOOLEAN
value. IS_DIGIT
returns TRUE
if the character is a digit.
Syntax
IS_DIGIT( c VARCHAR2) RETURNS BOOLEAN;
Parameter
Example
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;
This function determines whether a user is authorized to manage the Oracle Database Vault configuration, and then returns a BOOLEAN
value. IS_DVSYS_OWNER
returns TRUE
if the user is authorized.
Syntax
IS_DVSYS_OWNER( p_user VARCHAR2 DEFAULT USER) RETURNS BOOLEAN;
Parameter
Table 13-14 IS_DVSYS_OWNER Parameter
Parameter | Description |
---|---|
|
User to check. To find existing users, query they following views:
|
Example
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;
This function returns an indicator as to whether or not Oracle Label Security is installed, and then returns a TRUE or FALSE BOOLEAN
value. If Oracle Label Security is installed, IS_OLS_INSTALLED
returns TRUE
.
Syntax
IS_OLS_INSTALLED() RETURNS BOOLEAN;
Parameters
None.
Example
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;
This function returns an indicator as to whether or not Oracle Label Security is installed, and then returns a Y or N VARCHAR2
value. If Oracle Label Security is installed, IS_OLS_INSTALLED_VARCHAR
returns Y
.
Syntax
IS_OLS_INSTALLED_VARCHAR() RETURNS VARCHAR2;
Parameters
None.
This function checks whether a user or role may access an object through an object privilege grant, and then returns a BOOLEAN
value. If the user or role has object privileges, then USER_HAS_OBJECT_PRIVILEGE
returns TRUE
.
Syntax
USER_HAS_OBJECT_PRIVILEGE( p_user VARCHAR2, p_object_owner VARCHAR2, p_object_name VARCHAR2, p_privilege VARCHAR2) RETURNS BOOLEAN;
Parameters
Table 13-15 USER_HAS_OBJECT_PRIVILEGE Parameters
Parameter | Description |
---|---|
|
User or role to check. To find existing users, query they following views:
|
|
Object owner. To find the available users, query they To find the authorization of a particular user, query they |
|
Object name. To find the available objects, query they To find objects that are secured by existing realms, query they |
|
Object privilege, for example, To find privileges for a database account excluding To find all privileges for a database account, use |
Example
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;
This function checks whether a user has a role privilege, directly or indirectly (through another role), and then returns a BOOLEAN
value. If the user has a role privilege, then USER_HAS_ROLE
returns TRUE
.
Syntax
USER_HAS_ROLE( p_role VARCHAR2, p_user VARCHAR2 DEFAULT USER) RETURNS BOOLEAN;
Parameters
Table 13-16 USER_HAS_ROLE Parameters
Parameter | Description |
---|---|
|
Role privilege to check. To find existing roles, query they following views:
|
|
User to check. To find existing users, query they following views:
|
Example
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;
This function checks whether a user has a role privilege, directly or indirectly (through another role), and then returns a VARCHAR2
value. If the user has the role privilege specified, then USER_HAS_ROLE_VARCHAR
returns Y
.
Syntax
USER_HAS_ROLE_VARCHAR( p_role VARCHAR2, p_user VARCHAR2 DEFAULT USER) RETURNS VARCHAR2;
Parameters
Table 13-17 USER_HAS_ROLE_VARCHAR Parameters
Parameter | Description |
---|---|
|
Role to check. To find existing roles, query they following views:
|
|
User to check. To find existing users, query they following views:
|
This function checks whether a user has a system privilege, directly or indirectly (through a role), and then returns a BOOLEAN
value. If the user has the system privilege specified, then USER_HAS_SYSTEM_PRIVILEGE
returns TRUE
.
Syntax
USER_HAS_SYSTEM_PRIVILEGE( p_privilege VARCHAR2, p_user VARCHAR2 DEFAULT USER) RETURNS BOOLEAN;
Parameters
Table 13-18 USER_HAS_SYSTEM_PRIVILEGE Parameters
Parameter | Description |
---|---|
|
System privilege to check for. To find privileges for a database account excluding To find all privileges for a database account, use |
|
User to check. To find existing users, query they following views:
|
Example
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;