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_OPTIONindica se o privilégio concedido também inclui oADMINopçã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 aoGRANTEEpara 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.