Neste post, você descobrirá de forma simples e rápida como verificar usuários, privilégios e roles no Oracle.
Primeiramente, a recuperação de dados sobre usuários, papéis (roles) e privilégios de um usuário no Oracle pode variar de uma tarefa simples usando uma consulta SQL básica a um script avançado, dependendo principalmente do envolvimento das funções e privilégios no servidor.
Neste breve tutorial, separamos algumas queries para obter informações a respeito de usuários, papéis (roles) e privilégios em um banco de dados Oracle.
O que é uma Role (papel) no Oracle?
Antes de mais nada, vamos entender o conceito de Role. Primeiramente, uma Role, ou papel, é um agrupamento de permissões que pode ser concedida a usuários ou outras roles. Além disso, sua utilização ajuda a administrar as permissões de objetos no banco de dados. Dessa forma, poupa-se o tempo que seria gasto com permissões e revogações individuais.
Consultando views de privilégio do DBA / USER
Um administrador de banco de dados (DBA) Oracle pode executar consultas nas views DBA_SYS_PRIVS, DBA_TAB_PRIVS e DBA_ROLE_PRIVS para obter informações sobre os privilégios de usuário relacionados com ao sistema, tabelas e roles, respectivamente.
DBA_SYS_PRIVS : Privilégios de sistema concedidos a usuários e funções
Por exemplo, um DBA que precisa exibir os privilégios de sistema concedidos a usuários e funções pode efetuar uma consulta na view DBA_SYS_PRIVS. Para isso, pode utilizar a seguinte consulta SQL:
SELECT * FROM DBA_SYS_PRIVS;
A view DBA_SYS_PRIVS contém três colunas de dados:
- GRANTEE: Este campo indica o nome, função ou usuário ao qual foi atribuído o privilégio.
- PRIVILEGE: Esta coluna especifica o privilégio do sistema que foi designado.
- ADMIN_OPTION: Esta coluna informa se o privilégio concedido estava com a opção ADMIN.
Portanto, ao utilizar essa view, os DBAs conseguem obter uma visão clara das permissões de sistema atribuídas, facilitando a gestão dos privilégios no banco de dados Oracle.
DBA_TAB_PRIVS : Privilégios concedidos em objetos no banco de dados
Para determinar quais usuários têm acesso direto a uma tabela ou objeto de banco de dados, usamos a view DBA_TAB_PRIVS:
SELECT * FROM DBA_TAB_PRIVS;
Você pode verificar a documentação oficial para obter mais informações sobre as colunas retornadas nesta consulta, mas as colunas importantes são:
- GRANTEE – Nome do usuário com acesso concedido.
- OWNER – Proprietário do objeto
- TABLE_NAME – Nome do objeto (tabela, índice, sequência etc.).
- GRANTOR – Nome do usuário que executou a concessão
- PRIVILEGE – Privilégio atribuído ao GRANTEE objeto associado.
DBA_ROLE_PRIVS : Privilégios em roles para usuários e roles
Por fim, a view DBA_ROLE_PRIVS que fornece informações sobre papéis (roles) que foram concedidas aos usuários:
SELECT * FROM DBA_ROLE_PRIVS;
- Grantee – Nome de usuário a quem a função foi concedida
- Granted_role – Nome do objeto
- Admin_option – SIM se a função foi concedida com a opção de administrador, NÃO caso contrário.
- Default_role – SIM se a função estiver ativada quando o usuário autorizado criar uma sessão.
Exemplos de consultas para verificar usuários, roles e privilégios no Oracle
Em seguida, separamos algumas querys para serem utilizadas pelo DBA para para verificar usuários, permissões / papéis (roles) concedidos de um usuário
Query para consultar roles para um usuário
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = '&NOMEDOUSUARIO';
Privilégios concedidos a um usuário
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'NOMEDOUSUARIO';
Privilégios concedidos a objetos conforme privilégio concedido a uma role de um usuário
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE IN (SELECT granted_role FROM DBA_ROLE_PRIVS WHERE GRANTEE = '&NOMEDOUSUARIO''') order by 3;
Consulta para verificar se o usuário possui privilégios de sistema
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '&NOMEDOUSUARIO'';
Consulta para verificar as permissões concedidas a uma role
select * from ROLE_ROLE_PRIVS where ROLE = '&NOME_DA_ROLE';
select * from ROLE_TAB_PRIVS where ROLE = '&NOME_DA_ROLE';
select * from ROLE_SYS_PRIVS where ROLE = '&NOME_DA_ROLE';
Referências : usuários privilégios roles Oracle:
Materiais e leituras que recomendamos para você:
- Como Instalar o SQL Developer Oracle no Linux
- Monitorando operações de longa duração no Oracle
- Solução para erro Oracle : [FATAL] [DBT-06103] The port (5.500) is already in use
- Como listar as maiores tabelas ou objetos Oracle
Obrigado
Espero que este tutorial possa lhe ajudar a gerenciar permissões de usuários no Oracle Database e por consequência apoiá-lo em seu trabalho ou estudo deste banco de dados.
Se você gostou desta publicação, compartilhe com seus amigos ou nos acompanhe pelas redes sociais.
Você pode nos ajudar a criar mais conteúdos como este. Como ?
Prestigie nossos anunciantes conhecendo seus produtos e serviços.
É simples e rápido e você certamente ajuda a gente a crescer.
Obrigado e um grande abraço
Renato Sanches