Gerenciamento de Privilégios de Usuário em Bancos de Dados Oracle

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;

Tags: Oracle SQL Privilégios Usuários roles

Publicado em 6-20 05:38