
Eclipsys has helped McMaster University maximize its investment in the Oracle Exadata Cloud@Customer solution. Read the story here






Business Introduction:
Business Importance:
Potential ROI:
In this blog, I'll demonstrate the following:
Prerequisites:
Note: The Configure/Enable/Disable DV command syntax, which will be used in this blog, is only for Autonomous Database Shared. Other Oracle database flavors use a slightly different syntax.
CREATE USER appschema IDENTIFIED BY WElcome_123#;
GRANT CREATE SESSION, CREATE TABLE TO appschema;
GRANT UNLIMITED TABLESPACE TO appschema;
BEGIN
ORDS_ADMIN.ENABLE_SCHEMA(
p_enabled => TRUE,
p_schema => UPPER('appschema'),
p_url_mapping_type => 'BASE_PATH',
p_url_mapping_pattern => LOWER('appschema'),
p_auto_rest_auth => TRUE);
END;
/
CREATE TABLE appschema.customers AS SELECT * FROM sh.customers;
CREATE TABLE appschema.countries AS SELECT * FROM sh.countries;
--- Create DBA_USER
CREATE USER dba_user IDENTIFIED BY WElcome_123#;
GRANT PDB_DBA TO dba_user;
BEGIN
ORDS_ADMIN.ENABLE_SCHEMA(
p_enabled => TRUE,
p_schema => UPPER('dba_user'),
p_url_mapping_type => 'BASE_PATH',
p_url_mapping_pattern => LOWER('dba_user'),
p_auto_rest_auth => TRUE);
END;
/
-- Create APPUSER user
CREATE USER appuser IDENTIFIED BY WElcome_123#;
GRANT CREATE SESSION, READ ANY TABLE TO appuser;
BEGIN
ORDS_ADMIN.ENABLE_SCHEMA(
p_enabled => TRUE,
p_schema => UPPER('appuser'),
p_url_mapping_type => 'BASE_PATH',
p_url_mapping_pattern => LOWER('appuser'),
p_auto_rest_auth => TRUE);
END;
/
- DV_ADMIN_OWNER is the owner of DV objects
- DV_ADMIN_ACCTS creates users and changes user passwords
-- Create DV owner
CREATE USER dv_admin_owner IDENTIFIED BY WElcome_123#;
GRANT CREATE SESSION TO dv_admin_owner;
GRANT SELECT ANY DICTIONARY TO dv_admin_owner;
GRANT AUDIT_ADMIN to dv_admin_owner;
-- Create DV account manager
CREATE USER dv_admin_accts IDENTIFIED BY WElcome_123#;
GRANT CREATE SESSION TO dv_admin_accts;
GRANT AUDIT_ADMIN to dv_admin_accts;
-- Enable SQL Worksheet for the users just created
BEGIN
ORDS_ADMIN.ENABLE_SCHEMA(
p_enabled => TRUE,
p_schema => UPPER('dv_admin_owner'),
p_url_mapping_type => 'BASE_PATH',
p_url_mapping_pattern => LOWER('dv_admin_owner'),
p_auto_rest_auth => TRUE);
ORDS_ADMIN.ENABLE_SCHEMA(
p_enabled => TRUE,
p_schema => UPPER('dv_admin_accts'),
p_url_mapping_type => 'BASE_PATH',
p_url_mapping_pattern => LOWER('dv_admin_accts'),
p_auto_rest_auth => TRUE);
END;
/
EXEC DBMS_CLOUD_MACADM.CONFIGURE_DATABASE_VAULT('dv_admin_owner', 'dv_admin_accts')
SELECT * FROM DBA_DV_STATUS;
EXEC DBMS_CLOUD_MACADM.ENABLE_DATABASE_VAULT;
SELECT * FROM DBA_DV_STATUS;
Now we create a DV realm to secure the table APPSCHEMA.CUSTOMERS from access by DBA_USER and APPSCHEMA and grant access to APPUSER only.
SELECT cust_id, cust_first_name, cust_last_name, cust_email, cust_main_phone_number
FROM appschema.customers
WHERE rownum < 5;
BEGIN
DVSYS.DBMS_MACADM.CREATE_REALM(
realm_name => 'PROTECT_APPSCHEMA'
,description => 'A mandatory realm to protect APPSCHEMA tables'
,enabled => DBMS_MACUTL.G_YES
,audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL
,realm_type => 1);
END;
/
-- Show the current DV realm
SELECT name, description, enabled FROM dba_dv_realm WHERE id# >= 5000 ORDER BY 1;
BEGIN
DVSYS.DBMS_MACADM.ADD_OBJECT_TO_REALM(
realm_name => 'PROTECT_APPSCHEMA',
object_owner => 'APPSCHEMA',
object_name => 'CUSTOMERS',
object_type => 'TABLE');
END;
/
-- Show the objects protected by the DV realm PROTECT_APPSCHEMA
SELECT realm_name, owner, object_name, object_type
FROM dvsys.dba_dv_realm_object
WHERE realm_name IN (SELECT name FROM dvsys.dv$realm WHERE id# >= 5000);
SELECT cust_id, cust_first_name, cust_last_name, cust_email, cust_main_phone_number
FROM appschema.customers
WHERE rownum < 5;
BEGIN
DVSYS.DBMS_MACADM.ADD_AUTH_TO_REALM(
realm_name => 'PROTECT_APPSCHEMA',
grantee => 'APPUSER');
END;
/
SELECT cust_id, cust_first_name, cust_last_name, cust_email, cust_main_phone_number
FROM appschema.customers
WHERE rownum < 5;
BEGIN
DVSYS.DBMS_MACADM.DELETE_REALM_CASCADE(realm_name => 'PROTECT_APPSCHEMA');
END;
/
-- Show the current DV realm
SELECT name, description, enabled FROM dba_dv_realm WHERE id# >= 5000 order by 1;
EXEC DBMS_CLOUD_MACADM.DISABLE_DATABASE_VAULT;
DROP USER sec_admin_owen;
DROP USER accts_admin_ace;
Note: Because Database Vault is disabled, separation of duties is also disabled.
