Isolar Base de Dados

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
djoq
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 27 Jan 2012 8:16 am
Localização: Londres UK

Olá, pessoal. Estou desenvolvendo um trabalho sobre isolamento de base de dados, não sei se este é o nome correto. O que fiz foi o seguinte, criei uma aplicação, criei a sua base de dados com as tabelas, porém não conectei a aplicação nesta base de dados que possui as tabelas. Eu criei uma base intermediária que possui apenas procedures e funções, esta base intermediária conecta na aplicação e faz os insert, update, delete na base onde estão as tabelas. Assim, caso um invasor consiga acessar meu banco de dados via aplicação, ele não terá acesso à base onde estão armazenados os registros. Agora a minha pergunta, aonde eu encontro material que fale sobre este conceito de isolamento de base de dados? É este o nome correto, isolamento de base da dados? Agradeço qualquer ajuda! =)
Avatar do usuário
fbifabio
Moderador
Moderador
Mensagens: 199
Registrado em: Ter, 22 Fev 2011 1:51 pm
Localização: São Paulo - SP
Contato:
Fábio Prado
www.fabioprado.net

@djoq,

Não sei se entendi muito bem. você está criando 2 BDS? porque você resolveu fazer isso? Não vejo necessidade de coisa desse tipo, que ao meu ver, só tornaria a aplicação mais lenta. O BD possui muitos recursos de segurança que podem impedir o acesso aos registros. Um modo simples de implementar isso no mesmo BD, é criar 2 usuários, 1 dono das tabelas e outro pelo qual a aplicação se conecta. No schema deste segundo usuário você cria stored procedures para atualizar/acessar dados do outro schema, ok?

[]s
djoq
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 27 Jan 2012 8:16 am
Localização: Londres UK

Olá Fabio, me expressei mal, é isto mesmo dois schemas, em um deles stored procedures e no outro as tabelas. Existe algum material que fale a respeito disto?

Obrigada!
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Brother , não seria encapsulamento ou ocultamento de códigos em PL/SQL ? Tipo procedures , packages e packages bodies , se for esse caso tem um utilitário no Oracle chamado Wrapp que criptografa os códigos em PL/SQL.
Caso queira se aprofundar sobre o Wrapping , segue o link da Oracle que esclarece muito bem tudo isso:
[urlhttp://docs.oracle.com/cd/B28359_01/appdev.111/b28370/wrap.htm[/url]
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Hehe não é brother é sister , mil desculpas djoq
http://docs.oracle.com/cd/B28359_01/app ... 0/wrap.htm
djoq
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 27 Jan 2012 8:16 am
Localização: Londres UK

huehe.adrianoturbo valeu a dica, vou ver este link que você passou.
Obrigada!! :)
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá djoq,

Acho que você pode proceder exatamente como o Fábio sugeriu.

Para isso você poderia criar os seguintes objetos (exemplo):

A) Usuário de nome "DJOQ", que seria o dono do schema de seu sistema. Nele você criará todos os objetos de banco de dados, incluindo suas procedures.
B) Usuário "DJOQUSER", que seria o usuário para sua aplicação irá apontar. Este usuário só terá permissão para executar as suas procedures/packages que farão todas as operações DML (SELECT-INSERT-DELETE-UPDATE)
C) Uma role de nome "DJOQ_ALL", que será atribuida para o usuário "DJOQUSER". Para esta role, você dará a permissão de EXECUTE de cada procedure/package que foram criadas no schema "DJOQ".

Exemplificando (você precisa pesquisar mais a fundo os comandos):

1) Criar o usuário : pesquise mais sobre o comando CREATE USER;

Selecionar tudo

CREATE USER DJOQ IDENTIFIED BY DJOQ ...;

2) Criar o usuário :

Selecionar tudo

CREATE USER DJOQUSER IDENTIFIED BY DJOQUSER ..;

3) Criar a role :

Selecionar tudo

CREATE ROLE DJOQ_ALL;
4) Atribuir ROLE para o usuario :

Selecionar tudo

GRANT DJOQ_ALL TO DJOQUSER;
5) Criar uma tabela TB_USUARIO no schema DJOQ:

Selecionar tudo

CREATE TABLE TB_USUARIO ..;
6) Criar uma package PKG_USUARIO no schema DJOQ, que fará todas as operações de SELECT-INSERT-DELETE-UPDATE na tabela TB_USUARIO :

Selecionar tudo

CREATE OR REPLACE PACKAGE PKG_USUARIO ... END PGK_USUARIO; CREATE OR REPLACE PACKAGE BODY PKG_USUARIO ... END PGK_USUARIO;
7) Atribuir permissão desta package para a role :

Selecionar tudo

GRANT ALL ON PKG_USUARIO TO DJOQ_ALL;
8) Criar sinonimo privado para o usuário da aplicação :

Selecionar tudo

CREATE OR REPLACE SYNONYM DJOQUSER.PKG_USUARIO FOR DJOQ.PKG_USUARIO;
Estes passos lhe permitirão isolar a aplicação, exatamente como os foristas lhe explicaram.

No meu caso, eu até costumno criar um terceiro usuário, com fins de auditoria/suporte (ex: DJOQAUDIT). Este usuário só consegue fazer SELECT (ou executar somente a procedure de SELECT) das tabelas do sistema, sendo adequado para equipes de suporte da aplicação.

Abraços,

Sergio Coutinho
djoq
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 27 Jan 2012 8:16 am
Localização: Londres UK

Sergio valeu pelo excelente tutorial :) , ficou bem fácil entender.
Grande ajuda!
Abraço
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes