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 oADMIN
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 aoGRANTEE
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.