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.