Segurança do Banco de Dados
A segurança em bancos de dados Oracle abrange dois pilares fundamentais: segurança do sistema e segurança dos dados. Os privilégios são classificados em privilégios de sistema, que controlam operações a nível do banco de dados, e privilégios de objeto, que regulam ações sobre objetos específicos como tabelas e visualizações.
Privilégios de Sistema
O Oracle oferece mais de cem tipos de privilégios de sistema. Administradores de banco de dados (DBAs) detêm permissões elevadas para tarefas administrativas, incluindo a criação e remoção de usuários, exclusão de tabelas e execução de backups.
Criação de Usuário
O DBA pode estabelecer um novo usuário definindo uma senha de autenticação:
CREATE USER usr_analista
IDENTIFIED BY chave_acesso;
Concessão de Privilégios de Sistema
Após a criação, o DBA atribui privilégios de sistema ao usuário. Para desenvolvedores de aplicações, os privilégios comuns incluem:
- CREATE SESSION (abertura de sessão)
- CREATE TABLE (criação de tabelas)
- CREATE SEQUENCE (geração de sequências)
- CREATE VIEW (definição de visões)
- CREATE PROCEDURE (desenvolvimetno de procedimentos)
Exemplo de concessão múltipla:
GRANT criar_sessao, criar_tabela, criar_sequencia, criar_visao
TO usr_analista;
Funções (Roles)
Funções são coleções de privilégios que simplificam a administração de permissões. Ao associar uma função a um usuário, este herda todos os privilégios contidos nela.
Definição e Atribuição de Funções
CREATE ROLE supervisor;
GRANT criar_tabela, criar_visao
TO supervisor;
GRANT supervisor TO usr_analista;
Alteração de Senha
Tanto o DBA quanto o usuário podem modificar a senha de autenticação:
ALTER USER usr_analista
IDENTIFIED BY nova_chave;
Privilégios de Objeto
Cada tipo de objeto no banco de dados possui um conjunto distinto de privilégios. O proprietário do objeto detém todos os privilégios e pode redistribuí-los a outros usuários.
| Objeto \ Privilégio | Tabela | Visão | Sequência | Procedimento |
|---|---|---|---|---|
| Inserir | ✓ | ✓ | ||
| Modificar | ✓ | ✓ | ||
| Excluir | ✓ | ✓ | ||
| Exeuctar | ✓ | |||
| Indexar | ✓ | |||
| Referência | ✓ | ✓ | ||
| Selecionar | ✓ | ✓ | ✓ | |
| Atualizar | ✓ | ✓ |
Concessão de Privilégios de Objeto
A sintaxe para conceder privilégios em objetos segue este padrão:
GRANT priv[(colunas)]
ON obj
TO {usr|role|PUBLIC}
[WITH GRANT OPTION];
Exemplo 1: Permitir SELECT em uma tabela específica.
GRANT selecionar
ON quadro_funcionarios
TO usr_analista;
Exemplo 2: Liberar UPDATE em colunas selecionadas.
GRANT atualizar (nome_setor, cod_local)
ON setores
TO usr_analista;
Exemplo 3: Utilizando WITH GRANT OPTION para permitir repasse de privilégios.
GRANT selecionar, inserir
ON setores
TO usr_analista
WITH GRANT OPTION;
Exemplo 4: Concedendo privilégio a todos os usuários do banco.
GRANT selecionar
ON setores
TO PUBLIC;
Visualização de Privilégios Concedidos
Para auditar permissões, consulte as seguintes visões do dicionário de dados:
| Visão | Descrição |
|---|---|
| ROLE_SYS_PRIVS | Privilégios de sistema atribuídos a funções |
| ROLE_TAB_PRIVS | Privilégios de objeto associados a funções |
| USER_ROLE_PRIVS | Funções vinculadas ao usuário |
| USER_TAB_PRIVS_MADE | Privilégios de objeto em tabelas concedidos pelo usuário |
| USER_TAB_PRIVS_RECD | Privilégios de objeto em tabelas recebidos pelo usuário |
| USER_COL_PRIVS_MADE | Privilégios de objeto em colunas concedidos pelo usuário |
| USER_COL_PRIVS_RECD | Privilégios de objeto em colunas recebidos pelo usuário |
| USER_SYS_PRIVS | Privilégios de sistema do usuário |
Revogação de Privilégios de Objeto
Para remover privilégios concedidos anteriormente:
REVOKE {priv [, priv...]|ALL}
ON obj
FROM {usr[, usr...]|role|PUBLIC}
[CASCADE CONSTRAINTS];
Exemplo de revogação:
REVOKE selecionar, inserir
ON setores
FROM usr_analista;
Ao revogar, privilégios passados com WITH GRANT OPTION também são automaticamente removidos.
Conexões Remotas com Banco de Dados
Criação de Database Link
Para acessar bancos de dados remotos, é necessário configurar um link:
CREATE PUBLIC DATABASE LINK srv_remoto
USING 'servico_remoto';
Acesso via SQL a Banco Remoto
Utilize o link criado em consultas SQL para manipular dados remotos:
SELECT *
FROM vendas@srv_remoto;