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.

domingo, 6 de junho de 2010

COMO BLOQUEAR CONEXÕES DE APLICATIVOS?

Olá !!!

O assunto que escolhi para compartilhar com vocês neste mês, é como implementar uma forma de bloqueio das conexões de alguns programas à instância de banco de dados.

É um processo relativamente simples e muito útil se você deseja restringir conexões de programas como SQLPLUS, TOAD, SQLDEVELOPER, PLSQL DEVELOPER, EXCEL, MSACCESS, etc. ao banco de dados.

Para a implementação do controle de acesso, criei uma trigger que dispara no evento "AFTER LOGON" do banco de dados.

Vamos ao código PL/SQL:


CREATE OR REPLACE TRIGGER "SYS"."AUDIT_LOGON" AFTER
LOGON ON DATABASE


DECLARE

v_sid number;
v_program varchar2(64);
v_msg varchar2(200);




BEGIN

EXECUTE IMMEDIATE 'SELECT DISTINCT sid FROM sys.v_$mystat'
INTO v_sid;

EXECUTE IMMEDIATE 'SELECT program FROM sys.v_$session WHERE sid = :b1'
INTO v_program
USING v_sid;

v_msg := 'Tentativa de conexao com: ' ||v_program||' recusada!!!';

-- programas bloqueados
IF (UPPER(v_program) LIKE '%TOAD%' OR
    UPPER(v_program) LIKE '%PLSQLDEV%' OR
    UPPER(v_program) LIKE '%MSACCESS%' OR
    UPPER(v_program) LIKE '%EXCEL%' OR
    UPPER(v_program) LIKE '%PLUS%') THEN



    RAISE_APPLICATION_ERROR(-20000,v_msg,true);



END IF;



END;
 
A vantagem deste código é a possibilidade de combinar IF ... END IF para restringir vários tipos de acesso. Por exemplo, você pode restringir acesso de algumas máquinas de seu ambiente de homologação através da coluna MACHINE da V$SESSION. Ou ainda, restringir o acesso de alguns usuários de rede através da coluna OSUSER também presente na V$SESSION. Enfim, a combinação de condições de acesso fica a seu critério.
 
Vale lembrar que, o usuário SYS sempre vai conseguir logar com sucesso no banco de dados via qualquer programa independentemente da existência ou não de uma trigger com estas características.
 
Até a próxima.