Pesquisar

Quem sou eu

Minha foto
Formado em Tecnologia de Processamento de Dados pela FESP-Paraná. Pós-graduado em Administração em Informática e Administração de Banco de Dados pela FESP-Paraná. Certificação ORACLE/OCA e DB2 9 Family Fundamentals.

sábado, 15 de maio de 2010

DBLinks

Olá!

Vou falar de um tema que, na maioria das vezes, causa muita confusão para usuários e desenvolvedores, mas que na verdade não se trata de um "bicho de sete cabeças": DBLINKS. Depois de um certo tempo trabalhando com esses objetos, você acaba descobrindo que não são componentes tão complicados assim e que, na verdade, podem ser ótimos para controlar o acesso a objetos de uma outra instância.

Para familiarizar-se com o tema, primeiramente vamos entender o conceito e alguns dos tipos de  DBLinks existentes: um Database Link é um objeto do esquema em um banco de dados que possibilita você acessar objetos em um outro banco de dados. Detalhe importante: o banco de dados destino não precisa ser um RDBMS Oracle.

Consistem de 2 tipos:

PÚBLICO - Todos os usuários do BD conseguem ter acesso ao DBLink;
PRIVADO - Somente o OWNER do DBLink consegue acessá-lo.

Exemplo de como criar um Database Link:

Público

CREATE PUBLIC DATABASE LINK 'MeuDBLNK'
CONNECT TO 'user1' IDENTIFIED BY 'senha'
USING 'MeuBD'

Este DBLINK terá o nome 'MeuDBLNK', conectará no usuário 'user' cuja senha é 'senha' do banco de dados 'MeuBD'. Este objeto poderá ser acessado por todos os usuários do banco de dados.


Privado

CREATE DATABASE LINK 'MeuDBLNK'
CONNECT TO 'user1' IDENTIFIED BY 'senha'
USING 'MeuBD'

Para criar um DBLINK privado, apenas removemos a palavra-chave PUBLIC e esse DBLINK estará acessível apenas pelo o usuário OWNER do objeto.

Ok, mas como podem ser ótimos controladores de acesso conforme eu havia informado no primeiro parágrafo do texto?

Percebam que o DBLINK, tanto o público quanto o privado, conectam na instância 'MeuBD' através do usuário 'USER1'. Desta forma, quem utilizá-los só poderá acessar objetos na instância MeuBD que USER1 consegue acessar. Parece óbvio certo? Mas já cansei de ver DBLINKS PÚBLICOS conectando em instâncias diretamente no usuário/esquema OWNER de todos os objetos de uma aplicação, ou seja, deixando a aplicação inteira escancarada para todos os usuários que conseguem acessar o DBLINK.

Baseado nisso, recomendo a todos que criem na instância destino um usuário exclusivo para conectar DBLINKS e atribuam somente os privilégios necessários, e nada mais do que isso.

Existem mais tipos de DBLINKS que não citei no texto. Portanto, vale a pena uma consulta ao manual SQL da Oracle para conhecer todas as versatilidades de acesso desses objetos.

Até a próxima.

Um comentário:

  1. Alguém sabe como verificar quando foi o ultimo acesso no dblink para poder avaliar se pode ser excluído?

    ResponderExcluir