Oracle report all users, their roles and privileges
>> Wednesday, 31 October 2018
I took the sql for listing privileges recursively for Oracle users from Rene Nyffenegger's site, it is very good but only works for one user at a time as it stands, I wanted to run a report that outputted the same way for every user in my database. So it needed to go into a PL/SQL loop.
You get a formatted output like:
set serveroutput on
declare
TYPE re_type IS TABLE OF varchar2(1024);
v_statement varchar2(1024);
v_result re_type;
BEGINfor x in ( select username from dba_users)
LOOPv_statement := 'select concat(lpad('' '', 2*level), granted_role) line1 from (select null grantee, username granted_role from dba_users where username = ''' || x.username || ''' union select grantee, granted_role from dba_role_privs union select grantee, privilege from dba_sys_privs ) start with grantee is null connect by grantee = prior granted_role';
execute immediate v_statement BULK COLLECT INTO v_result;
for indx in v_result.FIRST .. v_result.LAST
loop DBMS_OUTPUT.PUT_LINE(v_result(indx));end loop;
END LOOP;END;/
MYUSER1
MYROLE_SESSION
ALTER SESSION
CREATE SESSION
CONNECT
CREATE SESSION
MYROLE1
MYROLE2
MYUSER2
CONNECT
CREATE SESSION
MYROLE1
MYROLE3
Particular thanks to Pete for seeing me past my quotes and array woes Read more...