[oracle_br] Re: Trigger de logon...

2015-05-28 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Bom, é um negócio de louco Desenvolvedores terem acesso de qquer forma ao banco 
PROD (ninguém duvida que o CERTO era ninguém da turam de desenvolvedores ter 
acesso e ponto, sem necessidade de trigger algum), mas sobre isso já falamos 
nesta thread, mas tá : agora, antes de focar no comportamento, vc tem um erro 
lógico aí nesse código : pra começo de conversa, UPPER significa ** converta 
para MAIÚSCULO ** , então linhas como :
 

  IF UPPER (owner) NOT IN ('cbarbosa'
  
  ou 
  
  OR UPPER (v_prog) LIKE '%SQL Developer%' -- SQL Developer
  
  * NUNCA ** vão funcionar logicamente falando, pois um UPPER ** nunca 
** é igual a 'cbarbosa' ,NUNCA vai ser like 'SQL Developer', pois essas strings 
contém minúsculas, okdoc ??? CORRIJA ISSO, please
  
  Sobre o que vc reporta : vc tem TOTAL CERTEZA que está conectado no database 
correto ? Quando vc executou o CREATE OR REPLACE TRIGGER , vc REALMENTE estava 
conectado como SYS ??? A ferramenta-cliente Realmente deu MESMO mensagem de 
Trigger Created ou similar ?? Tenta refazer o CREATE OR REPLACE trigger 
conectando como SYS no tal database PROD via SQLPLUS, pois essa tool mostra 
Claramente as msgs de sucesso ou falha num DDL...
  
  SE vc recriar com sucesso no sqlplus, Recebendo a msg de criação, mas ainda 
assim quando ela disparar vc obter algum tipo de erro, a gente pensa 
principalmente na questão da CONCATENAÇÃO que vc faz : confirmar que não há 
nenhuma aspinha irregular, E que as strings que vc tá concatenando no total são 
** MENORES ** do que os 2000 bytes que a RAISE_APPLICATION_ERROR permite na 
mensagem, ok ?
   Pode valer muito a pena vc, pra fins de debug, substituir as strings 
concatenadas por uma msg fixa única, que vc sabe que tá menor que esse limite...
   
[]s

  Chiappa
 



[oracle_br] Re: Trigger de Logon.

2015-05-27 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Opa : então, primeiro eu sou ** obrigado ** a te dizer que restringir acesso 
por ferramenta cliente é algo que o RDBMS Oracle absolutamente Não Prevê : o 
fato é que o RDBMS tá pouco se lixando pra qual ferramenta vc usou pra exercer 
seu direito de conexão no database (a preocupação dos desenvolvedores do RDBMS 
Oracle é em comprovar que vc tem direito a acessar o database, com o que vc vai 
acessar não importa pra ele), E além disso numa aplicação moderna tipicamente o 
RDBMS ** nem sequer ENXERGA a máquina do usuário-final (pois ele conecta num 
pool de conexões, e não diretamente ao database)... Ademais, o database NÂO 
CONTROLA quais programas estão solicitando conexão, assim depende TOTALMENTE da 
informação que o programa-cliente dá :  Assim sendo, se vc montar um trigger 
que faça um IF nomedoprogramaconectando = 'SQLPLUS.EXE' , para isso ser burlado 
basta o usuário RENOMEAR o arquivo SQLPLUS.EXE para OUTRACOISA.EXE...  :)
 

  Segundo ponto : normalmente quando a pessoa quer restringir o acesso ao 
database apenas pela Aplicação, isso indica que se o usuário acessar por fora 
há Risco de quebra de integridade/segurança - tipicamente, há alguma regra de 
negócio e/ou alguma Integridade de dados que ao invés de ser mantida DENTRO DO 
DATABASE (caso em que a validação SEMPRE ocorre, independente de qquer coisa) 
neguim criou a tal regra/validação/integridade DENTRO DA APLICAÇÃO, aí se 
acessar o banco fora da aplicação é kaput... Se for esse o seu motivo, pense ** 
seriamente ** em tornar a sua aplicação DATABASE-centric, passando as tais 
regras/validações para dentro do database, que é onde elas Pertencem... Sempre, 
o que se refere a DADOS fica necessariamente DENTRO DO DATABASE...
 

 Mas se ainda assim vc quiser ter um trigger de LOGON que faça isso, veja o 
exemplo em 
https://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:561622956788 
...
 

 Agora : imho muito mais Efetivo (se é que essa palavra cabe num 
quebra-galho/gambi do tipo implícito em tasks estranhas como bloquear acesso 
por tool cliente) seria OU vc não dar Acesso às tabelas da Aplicação se a 
pessoa não conectar pela aplicação (digamos, há uma trigger 
WHEN-NEW-FORM-INSTANCE que faz um ALTER SESSION que libera o acesso às tabelas 
ativando uma ROLE, ou popula um context que vai ser exigido numa política de 
FGA que vc criou no database, algo do tipo), OU então vc fazer o controle após 
o fato, ie : ter um job de banco que de minuto em minuto dispara e mata as 
sessões que não setaram algum valor predeterminado via DBMS_APPLICATION_INFO ou 
alguma coisa assim que as tools  clientes não fazem e vc programaria tua 
aplicação para fazer
 

  []s
 

   Chiappa


Re: [oracle_br] Re: trigger de logon

2010-04-15 Por tôpico Miguel Angelo Rodrigues
Obrigado Braga e chiappa pelas informações.
Agora compreendi a funcionalidade.
Estaremos resolvendo o problema nas aplicações.
Grato a todos

Em 15 de abril de 2010 08:49, José Laurindo jlchia...@yahoo.com.brescreveu:



 Pelo que entendi não é isso não, o colega tá reclamando do ORA-00604:
 ocorreu um erro no nível 1 SQL recursivo , e isso ** não ** é causado pelo
 userenv : na verdade, sendo essa a pergunta, em verdade isso ** não é
 problema Algum ** , o client Oracle está programado para listar exceções,
 cfrme
 http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:68817379083269...
  Não tem como tirar o 604 do error stack, MAS a Aplicação dele
 tranquilamente pode ser programada para não exibir o stack de erros todo, o
 sqlplus porém (deve ser isso que ele está usando) não pode ...

 []s

 Chiappa

 --- Em oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br,
 Marcos Braga braga.mar...@... escreveu

 
  Olá Miguel,
 
  O que observei de diferente na sua trigger foi a utilização do USERENV.
 
  Ao invés de utilizar:
  USERENV('SESSIONID')
 
  Tente:
  SYS_CONTEXT('USERENV', 'SESSIONID')
 
  Verifique se pode ser isso.
 
  []s
  Braga
 
  Em 14 de abril de 2010 17:32, Miguel Angelo Rodrigues 
  miguelangelo.rodrig...@... escreveu:

 
  
  
   Senhores,
  
   estou com uma trigger para controlar o acesso dos usuario no ambiente
 de
   produção.
   Ela está funcionando, porem apresenta o erro de sql recursivo.
   A versão do oracle é 10.2.0.3.0.
   Fico grato com a ajuda de vcs.
   Segue a trigger e o erro:
  
   create or replace trigger log_restriction
   after logon on database
   begin
   for x in
   (
   select CLIENT_IDENTIFIER, program
   from sys.v_$session
   where audsid = sys_context('userenv', 'sessionid')
   )
   loop
   if ltrim(rtrim(x.CLIENT_IDENTIFIER)) not in
   ('10.11.7.230','10.11.7.216','10.1.1.48','10.1.1.28'
  
  
  
 ,'10.1.1.15','127.0.0.1','10.1.1.31','200.198.213.112','200.198.202.105','10.1.1.36')
   or upper(ltrim(rtrim(x.program))) not in (
   'AETI.EXE'
   ,'SIRCX.EXE'
   ,'EQCASSERVICE.EXE'
   ,'SRVAQUISICAO.EXE'
   ,'SRVSOPHIABIB.EXE'
   ,'SRVBIB.EXE'
   ,'BIBLI.EXE'
   ,'MONC.EXE'
   ,'BIBCONF.EXE')
   then
   raise_application_error( -20999, 'USUÁRIO OU APLICAÇÃO NÃO AUTORIZADO
   PARA USO NO AMBIENTE DE PRODUÇÃO!');
   end if;
   end loop;
   end log_restriction;
   /
  
   ORA-00604: ocorreu um erro no nível 1 SQL recursivo
   ORA-20999: USUÁRIO OU APLICAÇÃO NÃO AUTORIZADO PARA USO NO AMBIENTE DE
   PRODUÇÃO!
  
   --
   Miguel Angelo Rodrigues da Silva
   Administrador de Banco de Dados Oracle
  
 
 
  [As partes desta mensagem que não continham texto foram removidas]
 

  




-- 
 Miguel Angelo Rodrigues da Silva
Administrador de Banco de Dados Oracle


[As partes desta mensagem que não continham texto foram removidas]





--
Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--
Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » 
Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: 
http://www.oraclebr.com.br/  

 Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/

* Para sair deste grupo, envie um e-mail para:
oracle_br-unsubscr...@yahoogrupos.com.br

* O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html




[oracle_br] Re: Trigger de Logon

2006-10-06 Por tôpico jlchiappa
O trigger em si funciona em versões inferiores à 10g , o que ocorrerá
(em ququer versão), é CLARO, é que a lógica vai funcionar ENQUANTO o
usuário não baixar pela internet um dos n+1! freewares e sharewaresque
conectam no banco, é simplesmente ** IMPRATICÁVEL ** vc ter uma lista
de todos os progs clientes possíveis, a cada minuto (ou quase :)
aparece mais um...  E isso sem contar que MUITAS
tools/linguagens/progs ** não ** preenchem a coluna PROGRAM na
v$session, se os seus usuários usarem uma dessa, sorry...  

== Justamente por causa de coisas do tipo é que normalmente é
considerado INÚTIL se tentar bloquear tools, o que se pode e deve
fazer normalmente é limitar o usuário em si, não importando a tool -
esuqemas mirabolantes de bloquear tools só funcionam SE a Empresa
tem uma política RÍGIDA de proibir baixar/instalar freewares e tools
não-homologadas, e SE for isso que ocorre muito + fácil seria a
empresa só homologar sqlplus, toad e similares comerciais aonde vc TEM
COMO, dentro de config da própria ferramenta, limitar ações de usuário.

[]s

 Chiappa


===
Participe do ENPO - Encontro de Profissionais Oracle 2006 ! 
Informações e inscrições em www.enpo-br.org
José Laurindo Chiappa, Palestrante ENPO-2006
===

--- Em oracle_br@yahoogrupos.com.br, Cristian [EMAIL PROTECTED] escreveu

 Caro Berrondo,
   uso uma trigger AFTER LOGON ON DATABASE, não sei se funciona em todas 
 as versões, no Oracle 10g funciona:
 
 
 
 CREATE OR REPLACE TRIGGER SYS.BLOCK_TOOLS_FROM_PROD AFTER LOGON ON
DATABASE
 DECLARE
   v_prog   sys.v_$session.program%TYPE;
   ownersys.v_$session.username%TYPE;
   v_osuser sys.v_$session.osuser%TYPE;
 BEGIN
   SELECT program, username, osuser
 INTO v_prog, owner, v_osuser
 FROM sys.v_$session
   WHERE  audsid = USERENV('SESSIONID')
 AND  audsid != 0  -- Don't Check SYS Connections
 AND  rownum = 1;  -- Parallel processes will have the same AUDSID's
 
 
IF UPPER(owner) NOT IN ('usuarios_liberados'.)
THEN
 
  IF UPPER(v_prog) LIKE '%TOAD%'  OR
 UPPER(v_prog) LIKE '%T.O.A.D%'   OR  -- Toad
 UPPER(v_prog) LIKE '%SQLNAV%'OR  -- SQL Navigator
 UPPER(v_prog) LIKE '%PLSQLDEV%'  OR  -- PLSQL Developer
 UPPER(v_prog) LIKE '%BUSOBJ%'OR  -- Business Objects
 UPPER(v_prog) LIKE '%EXCEL%' OR  -- MS-Excel plug-in
 UPPER(v_prog) LIKE '%SQLPLUS%'   OR  -- SQLPLUS
 UPPER(v_prog) LIKE '%DEVELOPER%' OR  -- Oracle SQL Developer
 UPPER(v_prog) LIKE '%IFBLD%' OR  -- Oracle Forms Developer 
 Builder
 UPPER(v_prog) LIKE '%RWBUILDER%' OR  -- Oracle Reports Builder
 UPPER(v_prog) LIKE '%RAPTOR%'-- Oracle Raptor
  THEN
 RAISE_APPLICATION_ERROR(-2, 'Development tools are not 
 allowed on PRODUCTION DATABASE! ('||v_osuser||' - '||owner||' - 
 '||v_prog||')');
  END IF;
 
   END IF;
 EXCEPTION
 WHEN NO_DATA_FOUND THEN NULL;
 END;
 
 
 
 
 
 
 abraços,
 Cristian.
 
 
 
 rberrondo wrote:
  Preciso fazer uma trigger para evento a nível
  de banco/instancia.
  Toda vez que uma conexão é estabelecida, faria a
  checagem de usuário, aplicação e IP, se não estivesse de acordo com as
  regras , mataria a sessão.
  Alguem teria algum scprit para isto?
  Grata
  R Berrondo
  AD
 
 
 
 








--
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--__
Vem aí: ENPO-BR 2006 - Encontro Nacional de Profissionais Oracle
VISITE: http://www.enpo-br.org/ - Dia 11/11 Vagas Limitadas
__
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine  
Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/

* Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

* O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html