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.

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' ;

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.