Como listar todos os usuários que têm concessões em um pacote

9

Estou procurando alguma consulta para listar todos os usuários que têm concessões sobre um pacote.

Por exemplo, o usuário Schema_A foi concedido para executar o pacote: B.MyPackage.

Estou consultando visualizações ou tabelas como: role_tab_privs, role_sys_privs, sys.dba_sys_privs, dba_role_privs ... mas não consigo encontrar o que estou procurando.

Delmonte
fonte

Respostas:

15

Se o privilégio foi concedido diretamente ou a uma função, a concessão aparecerá em DBA_TAB_PRIVS

SELECT grantee, privilege
  FROM dba_tab_privs
 WHERE owner = 'B'
   AND table_name = 'MYPACKAGE'
   AND privilege = 'EXECUTE'

Se granteefor uma função, você precisará dba_role_privsverificar quais usuários (ou funções) receberam essa função e seguir a cadeia se você tiver funções concedidas a outras funções. Se você precisar dar conta de usuários que tenham concessões por causa das concessões (muito perigosas) ANY(ou seja EXECUTE ANY PROCEDURE), isso exigiria uma consulta separada.

dba_tab_privsPorém, se você deseja se sofisticar mais do que simplesmente fazer uma consulta direta , provavelmente é melhor usar os scripts de Pete Finnigan como o who_has_priv.sql(ou who_has_priv_procedure.sql). Pete é provavelmente o principal especialista em segurança da Oracle, portanto, é muito mais provável que isso represente todos os casos possíveis do que qualquer coisa que eu tentaria reunir.

Justin Cave
fonte