Neste post, vamos explorar o conceito de permissões no Oracle, focando nos dois tipos principais: System Privileges e Object Privileges, que são essenciais para controlar o acesso e as ações que os usuários podem realizar dentro do banco de dados.
Usuários e Estrutura de Permissões
No Oracle, os usuários são contas que podem se conectar ao banco de dados e executar várias operações, dependendo das permissões atribuídas. Para ilustrar, criamos dois usuários que representam aplicações no sistema:
CREATE USER app1 IDENTIFIED BY "12345";
CREATE USER app2 IDENTIFIED BY "12345";
Usuários Padrão:
SYSTEM: Usuário DBA padrão, com todas as permissões administrativas.
SYS: Responsável pelo dicionário de dados do Oracle, que contém as tabelas que controlam o próprio banco.
Também definimos a quota de armazenamento para o usuário app1 na tablespace users, permitindo que ele armazene dados nessa área:
ALTER USER app1 quota unlimited ON users;
Permissões de Sistema (System Privileges)
As System Privileges permitem aos usuários realizar ações administrativas no banco de dados, como criar tabelas, sessões ou outros objetos. Essas permissões são atribuídas diretamente a um usuário e afetam todo o banco de dados.
Para visualizar as permissões de sistema disponíveis no Oracle, podemos executar o seguinte comando:
SELECT DISTINCT privilege FROM dba_sys_privs ORDER BY 1;
Abaixo estão alguns exemplos de concessão e revogação de permissões de sistema:
Concedendo a permissão para app1 iniciar uma sessão no banco de dados:
GRANT CREATE SESSION TO app1;
Revogando a permissão de app1 para iniciar uma sessão:
REVOKE CREATE SESSION FROM app1;
Concedendo a permissão CREATE SESSION para app2:
GRANT CREATE SESSION TO app2;
Além disso, é possível conceder a app1 a permissão para criar tabelas:
GRANT CREATE TABLE TO app1;
Essas permissões permitem que o usuário não só se conecte ao banco de dados, mas também crie e manipule objetos de banco.
Permissões de Objeto (Object Privileges)
As Object Privileges são permissões específicas que controlam o que os usuários podem fazer com objetos individuais, como tabelas, views, e procedures. Isso inclui ações como SELECT, INSERT, UPDATE, e DELETE.
Para ver as permissões de objeto atribuídas no banco de dados, utilizamos:
SELECT DISTINCT privilege FROM dba_tab_privs ORDER BY 1;
Essas permissões são atribuídas para permitir que um usuário execute operações em objetos específicos, garantindo controle granular sobre quem pode acessar ou modificar certos dados.
Papéis (Roles)
Os Papéis ou Roles no Oracle são grupos de permissões que podem ser atribuídos a um ou mais usuários, facilitando a administração de permissões. Em vez de conceder várias permissões individualmente, você pode conceder um papel, que já contém várias permissões pré-definidas.
Para visualizar os papéis no Oracle, usamos:
SELECT * FROM dba_roles;
Por exemplo, podemos conceder ao app2 os papéis de CONNECT e RESOURCE, que dão ao usuário permissões básicas de conexão e criação de objetos no banco de dados:
GRANT CONNECT, RESOURCE TO app2;
Esses papéis agrupam várias permissões relacionadas, simplificando o gerenciamento de usuários.
Consultando Permissões
Para verificar quais permissões ou papéis estão associados a um determinado usuário, como o DBA, podemos executar:
SELECT * FROM dba_role_privs WHERE grantee = 'DBA';
SELECT * FROM dba_sys_privs WHERE grantee = 'DBA';
Esses comandos mostram quais papéis e permissões de sistema foram concedidos ao usuário DBA.
Conclusão
Com esses exemplos, mostramos como conceder e revogar permissões no Oracle, tanto no nível de sistema quanto no nível de objeto. Essas permissões são fundamentais para controlar o que os usuários podem fazer no banco de dados, garantindo segurança e governança adequadas. Além disso, o uso de papéis facilita o gerenciamento de permissões em ambientes com muitos usuários.
Não deixe de assitir o vídeo abaixo sobre permissões no Oracle Database lá no canal do Youtube!