Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
78 views50 pages

Data Vault Tutorial 2

The document provides a detailed tutorial on configuring Oracle 19c Data Vault operations, including checking the current Data Vault status, creating users, and enabling operations control. It outlines the steps to set up Data Vault in both container and pluggable databases, as well as testing and disabling operations control. Additionally, it includes SQL commands for managing user privileges and implementing security measures for database objects.

Uploaded by

Aqib
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
78 views50 pages

Data Vault Tutorial 2

The document provides a detailed tutorial on configuring Oracle 19c Data Vault operations, including checking the current Data Vault status, creating users, and enabling operations control. It outlines the steps to set up Data Vault in both container and pluggable databases, as well as testing and disabling operations control. Additionally, it includes SQL commands for managing user privileges and implementing security measures for database objects.

Uploaded by

Aqib
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 50

Oracle 19c Data Vault Tutorial

Configure Data Vault Operations Control

Check current Data Vault Status

SQL> SELECT USERNAME FROM DBA_USERS WHERE USERNAME IN ('DVSYS', 'LBACSYS');

USERNAME
--------------------------------------------------------------------------------
DVSYS
LBACSYS

SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Oracle Database Vault';

VALUE
----------------------------------------------------------------
FALSE

SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Oracle Label Security';

VALUE
----------------------------------------------------------------
FALSE

SQL> SELECT * FROM DBA_DV_STATUS;


NAME
-------------------
STATUS
----------------------------------------------------------------
DV_APP_PROTECTION
NOT CONFIGURED

DV_CONFIGURE_STATUS
FALSE

DV_ENABLE_STATUS
FALSE

SQL> col pdb_name format a20


SQL> col status format a20

SQL> select a.name pdb_name, a.open_mode, b.name, b.status


from v$pdbs a , cdb_dv_status b
where a.con_id=b.con_id
order by 1,2;

PDB_NAME OPEN_MODE NAME STATUS


-------------------- ---------- ------------------- --------------------
PDB1 READ WRITE DV_APP_PROTECTION NOT CONFIGURED
PDB1 READ WRITE DV_ENABLE_STATUS FALSE
PDB1 READ WRITE DV_CONFIGURE_STATUS FALSE

Create the Admin Common User


SQL> create user c##admin identified by Oracle_4U
container=all;

User created.

SQL> grant dba to c##admin container=all;

Grant succeeded.

SQL> alter session set container=pdb1;

Session altered.

Create the DEMO user

SQL> create user demo identified by demo;

User created.

SQL> grant create session, create table ,unlimited tablespace to demo;


Grant succeeded.

SQL> create table demo.myobjects as select * from all_objects;

Table created.

SQL> select count(*) from demo.myobjects;

COUNT(*)
----------
71345
C##ADMIN user is able to select rows from DEMO.MYOBJECTS

SQL> conn c##admin/Oracle_4U@pdb1


Connected.

SQL> select count(*) from demo.myobjects;

COUNT(*)
----------
71345

Configure Data Vault in Container Database

SQL> conn / as sysdba


Connected.

SQL> create user c##dvowner identified by Oracle_4U container=all;


User created.

SQL> create user c##dvacctmgr identified by Oracle_4U container=all;

User created.

SQL> create user c##dvowner_bkp identified by Oracle_4U container=all;

User created.

SQL> create user c##dvacctmgr_bkp identified by Oracle_4U container=all;


User created.

SQL> grant connect,resource to c##dvowner container=all;

Grant succeeded.

SQL> grant connect,resource to c##dvowner_bkp container=all;

Grant succeeded.

SQL> grant connect,resource to c##dvacctmgr container=all;

Grant succeeded.

SQL> grant connect,resource to c##dvacctmgr_bkp container=all;

Grant succeeded.

SQL> BEGIN
CONFIGURE_DV (
dvowner_uname => 'c##dvowner',
dvacctmgr_uname => 'c##dvacctmgr');
END;
/

PL/SQL procedure successfully completed.

SQL> @?/rdbms/admin/utlrp.sql
SQL> conn c##dvowner/Oracle_4U
Connected.

SQL> exec dbms_macadm.enable_dv;

PL/SQL procedure successfully completed.

SQL> grant dv_owner to c##dvowner_bkp container=all;

Grant succeeded.

SQL> conn c##dvacctmgr/Oracle_4U


Connected.

SQL> grant dv_acctmgr to c##dvacctmgr_bkp container=all;

Grant succeeded.

SQL> conn / as sysdba


Connected.

SQL> shutdown immediate;


Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup;
ORACLE instance started.

Total System Global Area 1073738488 bytes


Fixed Size 9143032 bytes
Variable Size 700448768 bytes
Database Buffers 360710144 bytes
Redo Buffers 3436544 bytes
Database mounted.
Database opened.

Configure Data Vault in Pluggable Database

SQL> alter session set container=pdb1;

Session altered.

SQL> BEGIN
CONFIGURE_DV (
dvowner_uname => 'c##dvowner',
dvacctmgr_uname => 'c##dvacctmgr');
END;
/

PL/SQL procedure successfully completed.

SQL> conn c##dvowner/Oracle_4U@pdb1


Connected.

SQL> exec dbms_macadm.enable_dv;

PL/SQL procedure successfully completed.

SQL> conn / as sysdba


Connected.

SQL> alter pluggable database pdb1 close immediate;


Pluggable database altered.

SQL> alter pluggable database pdb1 open;

Pluggable database altered.

SQL> col pdb_name format a20


SQL> col status format a20

SQL> select a.name pdb_name, a.open_mode, b.name, b.status


from v$pdbs a , cdb_dv_status b
where a.con_id=b.con_id
order by 1,2;

PDB_NAME OPEN_MODE NAME STATUS


-------------------- ---------- ------------------- --------------------
PDB1 READ WRITE DV_APP_PROTECTION NOT CONFIGURED
PDB1 READ WRITE DV_ENABLE_STATUS TRUE
PDB1 READ WRITE DV_CONFIGURE_STATUS TRUE

SQL> alter session set container=pdb1;

Session altered.

SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Oracle Database Vault';

VALUE
----------------------------------------------------------------
TRUE
SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Oracle Label Security';

VALUE
----------------------------------------------------------------
TRUE

SQL> conn / as sysdba


Connected.
SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED


---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY YES
3 PDB1 READ WRITE NO

Enable Operations Control

SQL> conn c##dvowner/Oracle_4U


Connected.

SQL> exec dbms_macadm.enable_app_protection;

PL/SQL procedure successfully completed.

SQL> conn / as sysdba


Connected.

SQL> SELECT * FROM DBA_DV_STATUS;


NAME STATUS
------------------- --------------------
DV_APP_PROTECTION ENABLED
DV_CONFIGURE_STATUS TRUE
DV_ENABLE_STATUS TRUE

SQL> select a.name pdb_name, a.open_mode, b.name, b.status


from v$pdbs a , cdb_dv_status b
where a.con_id=b.con_id
order by 1,2;

PDB_NAME OPEN_MODE NAME STATUS


-------------------- ---------- ------------------- --------------------
PDB1 READ WRITE DV_APP_PROTECTION ENABLED
PDB1 READ WRITE DV_ENABLE_STATUS TRUE
PDB1 READ WRITE DV_CONFIGURE_STATUS TRUE

Test Operations Control

C##ADMIN user is now not able to select rows from DEMO.MYOBJECTS – even with the DBA role

SQL> conn c##admin/Oracle_4U@pdb1


Connected.

SQL> select count(*) from demo.myobjects;


select count(*) from demo.myobjects
*
ERROR at line 1:
ORA-01031: insufficient privileges
DEMO user is able to select rows from MYOBJECTS table

SQL> conn demo/demo@pdb1


Connected.

SQL> /

COUNT(*)
----------
71345

Disable Operations Control

SQL> conn c##dvowner/Oracle_4U


Connected.

SQL> exec dbms_macadm.disable_app_protection('PDB1');


PL/SQL procedure successfully completed.

SQL> conn c##admin/Oracle_4U@pdb1


Connected.

SQL> select count(*) from demo.myobjects;

COUNT(*)
----------
71345

Enable Operations Control – add an exception to enable only SYSTEM user


SQL> conn c##dvowner/Oracle_4U
Connected.

SQL> exec dbms_macadm.enable_app_protection;

PL/SQL procedure successfully completed.

SQL> conn system/Oracle_4U@pdb1


ERROR:
Connected.

SQL> select count(*) from demo.myobjects;


select count(*) from demo.myobjects
*
ERROR at line 1:
ORA-01031: insufficient privileges

SQL> conn c##dvowner/Oracle_4U


Connected.

SQL> exec dbms_macadm.add_app_exception('SYSTEM','%');

PL/SQL procedure successfully completed.

SQL> conn system/Oracle_4U@pdb1


Connected.

SQL> select count(*) from demo.myobjects;

COUNT(*)
----------
71345
SQL> conn c##admin/Oracle_4U@pdb1
Connected.

SQL> select count(*) from demo.myobjects;


select count(*) from demo.myobjects
*
ERROR at line 1:
ORA-01031: insufficient privileges
begin
DVSYS.DBMS_MACADM.CREATE_REALM(realm_name => 'DEMO_REALM', description => ' Realm to protect DEMO schema', enabled => 'Y', audit_options
=> 1, realm_type =>'1' );
DVSYS.DBMS_MACADM.ADD_OBJECT_TO_REALM(realm_name => 'DEMO_REALM', object_owner => SYS.DBMS_ASSERT.ENQUOTE_NAME('DEMO',FALSE),
object_name => 'MYOBJECTS', object_type => 'TABLE' );
DVSYS.DBMS_MACADM.ADD_AUTH_TO_REALM(realm_name => 'DEMO_REALM', grantee => SYS.DBMS_ASSERT.ENQUOTE_NAME('DEMO',FALSE),
rule_set_name => '', auth_options => '0' );
end;

begin DVSYS.DBMS_MACADM.CREATE_REALM(realm_name => 'DEMO_REALM', description => ' Realm to secure DEMO schema', enabled => 'Y',
audit_options => 1, realm_type =>'0' ); DVSYS.DBMS_MACADM.ADD_OBJECT_TO_REALM(realm_name => 'DEMO_REALM', object_owner =>
SYS.DBMS_ASSERT.ENQUOTE_NAME('DEMO',FALSE), object_name => 'MYOBJECTS', object_type => 'TABLE' ); end;

SQL> conn system/Oracle_4U@pdb1


Connected.

SQL> select count(*) from demo.myobjects;


select count(*) from demo.myobjects
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> conn demo/demo@pdb1
Connected.

SQL> /

COUNT(*)
----------
67214
SQL> conn c##dbv_owner/Oracle_4U

Connected.

SQL> exec dbms_macadm.disable_app_protection('PDB1');


SQL> conn system/Oracle_4U@pdb1

Connected.

SQL> select count(*) from demo.myobjects;


COUNT(*)

----------

67214

SQL> conn c##dbv_owner/Oracle_4U@pdb1

Connected.

SQL> col violation_type format a29

col username format a12

column machine format a20

col command format a12

col dv$_module format a12

col sqltext format a50

set lines 300

select violation_type, username,machine,command,dv$_module, sqltext from

dba_dv_simulation_log;SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> 2

VIOLATION_TYPE USERNAME MACHINE COMMAND DV$_MODULE SQLTEXT

----------------------------- ------------ -------------------- ------------ ------------ --------------------------------------------------


Command Rule Violation SYSTEM ogg.example.com SELECT SQL*Plus SELECT COUNT(*) FROM DEMO.MYOBJECTS

Command Rule Violation SYSTEM ogg.example.com SELECT SQL*Plus SELECT COUNT(*) FROM DEMO.MYOBJECTS

Command Rule Violation SYSTEM ogg.example.com SELECT SQL*Plus SELECT COUNT(*) FROM DEMO.MYOBJECTS
begin DECLARE x VARCHAR2(40);static_option BOOLEAN := FALSE; BEGIN x:='N'; IF x = 'Y' THEN static_option := TRUE; ELSE static_option := FALSE; END IF;
DVSYS.DBMS_MACADM.CREATE_RULE_SET(rule_set_name => 'RS_ALLOW_DEMO_ACCESS', description => ' Rule Set limits SELECT access to DEMO user',
enabled => 'Y', eval_options => 1, audit_options => 1, fail_options => 1, fail_message => 'Only DEMO user can execute SELECT ', fail_code => '-20002',
handler_options => 0, handler => '',is_static => static_option); END; DVSYS.DBMS_MACADM.ADD_RULE_TO_RULE_SET(rule_set_name =>
'RS_ALLOW_DEMO_ACCESS', rule_name => 'ALLOW_DEMO_ACCESS', rule_order => '1', enabled => 'Y'); end;
SQL> conn system/Oracle_4U@pdb1
Connected.
SQL> select count(*) from demo.myobjects;

COUNT(*)
----------
67214

SQL> conn c##dbv_owner/Oracle_4U@pdb1


Connected.
SQL> col violation_type format a29
col username format a12
column machine format a20
col command format a12
col dv$_module format a12
col sqltext format a50

set lines 300


select violation_type, username,machine,command,dv$_module, sqltext from
dba_dv_simulation_log;SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> 2

VIOLATION_TYPE USERNAME MACHINE COMMAND DV$_MODULE SQLTEXT


----------------------------- ------------ -------------------- ------------ ------------ --------------------------------------------------
Command Rule Violation SYSTEM ogg.example.com SELECT SQL*Plus SELECT COUNT(*) FROM DEMO.MYOBJECTS
Command Rule Violation SYSTEM ogg.example.com SELECT SQL*Plus SELECT COUNT(*) FROM DEMO.MYOBJECTS
Command Rule Violation SYSTEM ogg.example.com SELECT SQL*Plus SELECT COUNT(*) FROM DEMO.MYOBJECTS
Command Rule Violation SYSTEM ogg.example.com SELECT SQL*Plus SELECT COUNT(*) FROM DEMO.MYOBJECTS
SQL> conn system/Oracle_4U@pdb1
Connected.
SQL> select count(*) from demo.myobjects;
select count(*) from demo.myobjects
*
ERROR at line 1:
ORA-47306: 20002: Only DEMO user can execute SELECT
SQL> conn demo/demo@pdb1
Connected.
SQL> select count(*) from demo.myobjects;
COUNT(*)
----------
67214

You might also like