conn / as sysdba
alter session set container = pdb1;
create user priv_test_user identified by priv_test_user;
grant dba, resource to priv_test_user;
begin
dbms_privilege_capture.create_capture(
name => 'dba_res_user_pol',
type => dbms_privilege_capture.g_role_and_context,
roles => role_name_list('DBA', 'RESOURCE'),
condition => 'sys_context(''userenv'', ''session_user'') = ''PRIV_TEST_USER'''
);
dbms_privilege_capture.enable_capture(
name => 'dba_res_user_pol'
);
end;
/
conn priv_test_user/priv_test_user@pdb1
create table tab1 (
id number,
description varchar2(50),
constraint tab1_px primary key (id)
);
create sequence tab1_seq;
create view tab1_view as
select * from tab1;
insert into tab1
select level, 'Description of ' || to_char(level)
from dual
connect by level <= 5;
commit;
select name from v$database;
conn / as sysdba
alter session set container = pdb1;
begin
dbms_privilege_capture.disable_capture(
name => 'dba_res_user_pol'
);
dbms_privilege_capture.generate_result(
name => 'dba_res_user_pol'
);
end;
/
column username format a20
column sys_priv format a20
select username, sys_priv
from dba_used_sysprivs
where capture = 'dba_res_user_pol'
order by username, sys_priv;
USERNAME SYS_PRIV
-------------------- --------------------
PRIV_TEST_USER CREATE ANY INDEX
PRIV_TEST_USER CREATE SEQUENCE
PRIV_TEST_USER CREATE SESSION
PRIV_TEST_USER CREATE TABLE
PRIV_TEST_USER CREATE VIEW
5 rows selected.
SQL>
column username format a20
column used_role format a30
column sys_priv format a20
column path format a50
set linesize 200
select username, sys_priv, used_role, path
from dba_used_sysprivs_path
where capture = 'dba_res_user_pol'
order by username, sys_priv;
USERNAME SYS_PRIV USED_ROLE PATH
-------------------- -------------------- ------------------------------ --------------------------------------------------
PRIV_TEST_USER CREATE ANY INDEX IMP_FULL_DATABASE GRANT_PATH('PRIV_TEST_USER', 'DBA', 'IMP_FULL_DATA
BASE')
PRIV_TEST_USER CREATE ANY INDEX IMP_FULL_DATABASE GRANT_PATH('PRIV_TEST_USER', 'DBA', 'DATAPUMP_IMP_
FULL_DATABASE', 'IMP_FULL_DATABASE')
PRIV_TEST_USER CREATE SEQUENCE OLAP_DBA GRANT_PATH('PRIV_TEST_USER', 'DBA', 'OLAP_DBA')
PRIV_TEST_USER CREATE SESSION EM_EXPRESS_BASIC GRANT_PATH('PRIV_TEST_USER', 'DBA', 'EM_EXPRESS_AL
L', 'EM_EXPRESS_BASIC')
PRIV_TEST_USER CREATE TABLE DATAPUMP_EXP_FULL_DATABASE GRANT_PATH('PRIV_TEST_USER', 'DBA', 'DATAPUMP_EXP_
FULL_DATABASE', 'EXP_FULL_DATABASE')
PRIV_TEST_USER CREATE TABLE DATAPUMP_EXP_FULL_DATABASE GRANT_PATH('PRIV_TEST_USER', 'DBA', 'DATAPUMP_EXP_
FULL_DATABASE')
PRIV_TEST_USER CREATE VIEW DBA GRANT_PATH('PRIV_TEST_USER', 'DBA')
7 rows selected.
SQL>
column username format a20
column obj_priv format a8
column object_owner format a15
column object_name format a20
column object_type format a11
select username, obj_priv, object_owner, object_name, object_type
from dba_used_objprivs
where capture = 'dba_res_user_pol';
USERNAME OBJ_PRIV OBJECT_OWNER OBJECT_NAME OBJECT_TYPE
-------------------- -------- --------------- -------------------- -----------
PRIV_TEST_USER SELECT SYS V_$DATABASE VIEW
1 row selected.
SQL>
column username format a20
column obj_priv format a8
column object_owner format a15
column object_name format a20
column used_role format a20
column path format a30
set linesize 200
select username, obj_priv, object_owner, object_name, used_role, path
from dba_used_objprivs_path
where capture = 'dba_res_user_pol';
USERNAME OBJ_PRIV OBJECT_OWNER OBJECT_NAME USED_ROLE PATH
-------------------- -------- --------------- -------------------- -------------------- ------------------------------
PRIV_TEST_USER SELECT SYS V_$DATABASE SELECT_CATALOG_ROLE GRANT_PATH('PRIV_TEST_USER', '
DBA', 'SELECT_CATALOG_ROLE')
PRIV_TEST_USER SELECT SYS V_$DATABASE SELECT_CATALOG_ROLE GRANT_PATH('PRIV_TEST_USER', '
DBA', 'EXP_FULL_DATABASE', 'SE
LECT_CATALOG_ROLE')
PRIV_TEST_USER SELECT SYS V_$DATABASE SELECT_CATALOG_ROLE GRANT_PATH('PRIV_TEST_USER', '
DBA', 'IMP_FULL_DATABASE', 'SE
LECT_CATALOG_ROLE')
PRIV_TEST_USER SELECT SYS V_$DATABASE SELECT_CATALOG_ROLE GRANT_PATH('PRIV_TEST_USER', '
DBA', 'DATAPUMP_EXP_FULL_DATAB
ASE', 'EXP_FULL_DATABASE', 'SE
LECT_CATALOG_ROLE')
PRIV_TEST_USER SELECT SYS V_$DATABASE SELECT_CATALOG_ROLE GRANT_PATH('PRIV_TEST_USER', '
DBA', 'DATAPUMP_IMP_FULL_DATAB
ASE', 'EXP_FULL_DATABASE', 'SE
LECT_CATALOG_ROLE')
PRIV_TEST_USER SELECT SYS V_$DATABASE SELECT_CATALOG_ROLE GRANT_PATH('PRIV_TEST_USER', '
DBA', 'DATAPUMP_IMP_FULL_DATAB
ASE', 'IMP_FULL_DATABASE', 'SE
LECT_CATALOG_ROLE')
PRIV_TEST_USER SELECT SYS V_$DATABASE SELECT_CATALOG_ROLE GRANT_PATH('PRIV_TEST_USER', '
DBA', 'EM_EXPRESS_ALL', 'EM_EX
PRESS_BASIC', 'SELECT_CATALOG_
ROLE')
7 rows selected.
SQL>
conn / as sysdba
alter session set container = pdb1;
create role custom_role;
grant create sequence to custom_role;
grant create session to custom_role;
grant create table to custom_role;
grant create view to custom_role;
grant select on sys.v_$database to custom_role;
grant custom_role to priv_test_user;
revoke dba, resource from priv_test_user;
begin
dbms_privilege_capture.drop_capture(
name => 'dba_res_user_pol'
);
end;
/