Pessoal,

eu estou precisando de uma query (ou procedure) que liste, por exemplo,
todos os usuários que possuem privilégio "CREATE SESSION".
Eu usei algumas (que coloco abaixo), mas nenhuma delas listam todos os
usuários. Ainda não resolvi o problema quando o privilégio é dado a uma
role, essa role para outra role, e essa role para um usuário.
Alguém conhece uma query ou procedure que rode em Oracle 8, 9 e 10 e me
traga isso?
- Quais os usuários que possuem privilégio de "CREATE SESSION" (ou DROP,
ALTER SESSION, etc...)
- Quais os usuários que possuem a role DBA (ou DELETE_CATALOG_ROLE, etc...)

Essa query só funciona no 9i, e para role parece que traz tudo:
SELECT grantee, granted_role FROM dba_role_privs
START WITH granted_role='DBA'
CONNECT BY PRIOR grantee = granted_role;

Essa outra funciona no 8, 9 e 10, mas só verifica dois níveis:
SELECT a.grantee, a.granted_role
FROM dba_role_privs a, dba_role_privs b
WHERE a.granted_role = b.grantee
AND b.granted_role='DBA'
UNION
SELECT grantee, granted_role
FROM dba_role_privs
WHERE granted_role='DBA'
ORDER BY 2;

Essa funciona em todas as versões, mas também não varre todos os níveis:
select
   rp.GRANTEE,GRANTED_ROLE,rp.ADMIN_OPTION,DEFAULT_ROLE,PRIVILEGE
from
dba_role_privs rp, dba_sys_privs sp
where    rp.GRANTEE = sp.GRANTEE
and      rp.GRANTEE not in ('SYS','SYSTEM', 'DBA')
and      privilege = 'CREATE SESSION'
order by rp.GRANTEE, GRANTED_ROLE, PRIVILEGE;



Alguém pode me ajudar?


-- 
Thiago Delfim
Oracle & SQL Server Database Administrator
Oracle 9i Database Certified Associate
IBM IT Delivery
[EMAIL PROTECTED] (MSN)
Campinas/SP
(19) 9111-1439


[As partes desta mensagem que não continham texto foram removidas]

Responder a