quinta-feira, 22 de junho de 2017
Verifica privilégios de usuários no banco de dados
Em alguns momentos, podemos ter a necessidade de identificar privilégios que usuários do banco de dados possuem e para isso, podemos utilizar os comandos abaixo:
1) Privilégios de sistema
Para consultar os privilégios de sistema, podemos usar os seguintes comandos:
select GRANTEE,PRIVILEGE from dba_sys_privs where PRIVILEGE='<PRIVILEGIO>';
select GRANTEE,PRIVILEGE from dba_sys_privs where GRANTEE='<USUARIO>';
Exemplo:
a) Verificar quem possui um determinado privilégio de sistema
select GRANTEE,PRIVILEGE from dba_sys_privs where PRIVILEGE='SELECT ANY DICTIONARY';
No comando acima, estamos informando o privilégio que queremos identificar, neste caso o SELECT ANY DICTIONARY
b) Verificar quais privilégios de sistema um determinado usuário possui
select PRIVILEGE from dba_sys_privs where GRANTEE='XPTO';
Já neste comando, estamos informando o nome do usuário que queremos listar os privilégios de sistema concedidos.
2) Roles atribuídas para o usuário
Com os comandos abaixo, podemos identificar as ROLEs que foram atribuídas para um determinado usuário.
select GRANTEE,GRANTED_ROLE from dba_role_privs;
select GRANTEE,GRANTED_ROLE from dba_role_privs where GRANTED_ROLE='<ROLE>';
select GRANTED_ROLE from dba_role_privs where GRANTEE='<USUARIO>';
a) Lista todos os usuários e as roles atribuídas
select GRANTEE,GRANTED_ROLE from dba_role_privs;
b) Lista os usuários que possuem uma determinada role atribuída:
select GRANTEE,GRANTED_ROLE from dba_role_privs where GRANTED_ROLE='SELECT_CATALOG_ROLE';
select GRANTEE,GRANTED_ROLE from dba_role_privs where GRANTED_ROLE='DBA';
c) Lista as roles que um determinado usuário possui:
select GRANTED_ROLE from dba_role_privs where GRANTEE='XPTO';
3) Privilégio em objetos
Podemos ainda obter informações sobre privilégios em objetos de banco de dados para determinado usuário.
Para isso, podemos utilizar a view dba_tab_privs.
Exemplo:
select GRANTEE,TABLE_NAME,PRIVILEGE from dba_tab_privs where GRANTEE='XPTO';
Onde temos o GRANTEE sendo o usuário com a permissão concedida, o table_name é o objeto que o usuário tem permissão de acesso e o PRIVILEGE o privilégio que o usuário tem no acesso ao objeto identificado.