Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como mostrar todos os privilégios do banco de dados Oracle para um usuário


A recuperação de todos os privilégios do usuário no Oracle pode variar de uma tarefa simples usando uma consulta SQL básica a um script avançado, dependendo principalmente de como as funções e os privilégios envolvidos são configurados no servidor.

Neste breve tutorial, abordaremos o método de consulta SQL básico e o método de script avançado para que você não tenha problemas, independentemente da complexidade de sua configuração.

Consultando visualizações de privilégios de DBA/USER


Um administrador de banco de dados (DBA) para Oracle pode simplesmente executar uma consulta para visualizar as linhas em DBA_SYS_PRIVS , DBA_TAB_PRIVS e DBA_ROLE_PRIVS para recuperar informações sobre privilégios de usuário relacionados ao system , tables e roles , respectivamente.

Por exemplo, um DBA desejando visualizar todos os system privilégios concedidos a todos os usuários emitiriam a seguinte consulta:
SELECT
  *
FROM
  DBA_SYS_PRIVS;

O DBA_SYS_PRIVS view contém três colunas de dados:
  • GRANTEE é o nome, função ou usuário que recebeu o privilégio.
  • PRIVILEGE é o privilégio atribuído.
  • ADMIN_OPTION indica se o privilégio concedido também inclui o ADMIN opção.

Para determinar quais usuários têm diretos conceder acesso a uma table usaremos o DBA_TAB_PRIVS visualizar:
SELECT
  *
FROM
  DBA_TAB_PRIVS;

Você pode verificar a documentação oficial para obter mais informações sobre as colunas retornadas desta consulta, mas as colunas críticas são:
  • GRANTEE é o nome do usuário com acesso concedido.
  • TABLE_NAME é o nome do objeto (tabela, índice, sequência, etc).
  • PRIVILEGE é o privilégio atribuído ao GRANTEE para o objeto associado.

Por fim, consultando o DBA_ROLE_PRIVS view tem muitas das mesmas informações, mas aplicável a roles em vez disso, onde o GRANTED_ROLE coluna especifica a função em questão:
SELECT
  *
FROM
  DBA_ROLE_PRIVS;

Consultando os privilégios do usuário atual


Se o acesso ao DBA não for possível ou necessário, também é possível modificar ligeiramente as consultas acima para visualizar os privilégios exclusivamente para o usuário atual .

Isso é feito consultando alternativamente USER_ versões do DBA_ acima Visualizações. Assim, em vez de olhar para DBA_SYS_PRIVS consultaríamos USER_SYS_PRIVS , igual a:
SELECT
  *
FROM
  USER_SYS_PRIVS;

Como o USER_ visualizações de privilégios são efetivamente as mesmas que seus DBA_ homólogos, mas específicos apenas para o usuário atual, o tipo de dados retornados e os nomes das colunas são idênticos àqueles ao consultar DBA_ vistas em vez disso.

Script avançado para encontrar todos os privilégios


Embora os métodos acima funcionem para configurações básicas do sistema, as coisas começam a ficar confusas no Oracle quando existem muitas funções que, por sua vez, concedem privilégios de função a outras funções e assim por diante. Como o DBA_ e USER_ visualizações de privilégios exibem apenas GRANTEES com diretamente atribuído acesso, muitas vezes os privilégios que são herdados por meio de outras funções não serão mostrados prontamente.

Para resolver isso, é aconselhável usar um script avançado, como o trabalho confiável de Pete Finnigan e seu find_all_privs.sql roteiro. Você também pode optar por uma versão modificada por David Arthur, find_all_privs2.sql .

Em ambos os casos, o objetivo desses scripts é permitir que você recursivamente localizar todos os privilégios concedidos a um determinado usuário. Quando o script localiza um role para o usuário, ele procura recursivamente outras funções e privilégios concedidos a essa função, repetindo o processo por toda a cadeia. Os resultados do script podem ser exibidos na tela ou em um arquivo conforme desejado.

Mais informações sobre esses scripts e seu uso podem ser encontradas em petefinnigan.com.