oracle - lista usuários com acesso a determinadas tabelas

28

Tenho certeza de que isso já foi solicitado antes, mas não consigo encontrar os detalhes relevantes para o seguinte.

Existe algum tipo de tabela pré-criada que pode fazer o seguinte (usei o dba_tab_privs, mas é limitado e não atende a todas as minhas necessidades); caso contrário, alguém tem alguma dúvida para responder ao seguinte?

  1. Listar todos os usuários aos quais foi atribuída uma função específica?
  2. Listar todas as funções atribuídas a um usuário?
  3. Listar todos os privilégios dados a um usuário?
  4. Listar a quais tabelas uma determinada função concede acesso ao SELECT?
  5. Listar todas as tabelas das quais um usuário pode SELECIONAR?
  6. Listar todos os usuários que podem SELECIONAR em uma tabela específica (seja através de uma função relevante ou através de uma concessão direta (por exemplo, seleção de concessão na possibilidade de participar))? O resultado dessa consulta também deve mostrar por qual função o usuário tem esse acesso ou se foi uma concessão direta.
dgf
fonte

Respostas:

33

Listar todos os usuários aos quais foi atribuída uma função específica

-- Change 'DBA' to the required role
select * from dba_role_privs where granted_role = 'DBA'

Listar todas as funções atribuídas a um usuário

-- Change 'PHIL@ to the required user
select * from dba_role_privs where grantee = 'PHIL';

Listar todos os privilégios dados a um usuário

select
  lpad(' ', 2*level) || granted_role "User, his roles and privileges"
from
  (
  /* THE USERS */
    select 
      null     grantee, 
      username granted_role
    from 
      dba_users
    where
      username like upper('%&enter_username%')
  /* THE ROLES TO ROLES RELATIONS */ 
  union
    select 
      grantee,
      granted_role
    from
      dba_role_privs
  /* THE ROLES TO PRIVILEGE RELATIONS */ 
  union
    select
      grantee,
      privilege
    from
      dba_sys_privs
  )
start with grantee is null
connect by grantee = prior granted_role;

Nota: Extraído de http://www.adp-gmbh.ch/ora/misc/recursively_list_privilege.html

Listar a quais tabelas uma determinada função concede acesso ao SELECT?

-- Change 'DBA' to the required role.
select * from role_tab_privs where role='DBA' and privilege = 'SELECT';

Listar todas as tabelas das quais um usuário pode SELECIONAR?

--Change 'PHIL' to the required user
select * from dba_tab_privs where GRANTEE ='PHIL' and privilege = 'SELECT';

Listar todos os usuários que podem SELECIONAR em uma tabela específica (seja através de uma função relevante ou através de uma concessão direta (por exemplo, seleção de concessão na possibilidade de participar))? O resultado dessa consulta também deve mostrar por qual função o usuário tem esse acesso ou se foi uma concessão direta.

-- Change 'TABLENAME' below
select Grantee,'Granted Through Role' as Grant_Type, role, table_name
from role_tab_privs rtp, dba_role_privs drp
where rtp.role = drp.granted_role
and table_name = 'TABLENAME' 
union
select Grantee,'Direct Grant' as Grant_type, null as role, table_name
from dba_tab_privs
where table_name = 'TABLENAME' ;
Philᵀᴹ
fonte
Este é um bom começo, mas o nº 3 não inclui privilégios de objeto, o nº 5 não inclui os SELECTprivilégios disponíveis devido a uma função e o nº 6 está ausente.
Leigh Riffel
Opps, preciso de alguns CONNECT BY .. ANTERIOR para # 6
Phil
A sua resposta para o item 5 inclui tabelas que o usuário pode selecionar através de uma função que foi designada?
Dgf
Isso funciona se o usuário obtiver o privilégio de uma função à qual foi concedida outra função?
precisa saber é o seguinte
2

Existem várias maneiras de obter as informações que você deseja usar:

visualizações do dicionário de dados

presente no oracle.

Você pode apenas consultar as visualizações e recuperar os detalhes: Por exemplo:

selecione * de DBA_COL_PRIVS;

selecione * de ALL_COL_PRIVS;

selecione * de USER_COL_PRIVS;

Isso diz a você:

A visualização DBA descreve todas as concessões de objetos da coluna no banco de dados. A visualização TODAS descreve todas as concessões de objetos da coluna para as quais o usuário atual ou PUBLIC é o proprietário, concedente ou donatário do objeto. A visualização USER descreve concessões de objetos de coluna para as quais o usuário atual é o proprietário, concedente ou donatário do objeto.

Para mais informações, confira

Espero que isto ajude.

Vimalnath
fonte
1
Isso não parece responder à pergunta: como um DBA pode descobrir o que um usuário arbitrário específico pode acessar?
Jon of All Trades