Pois é, muito parecida. Eu guardei esse código, mas não trabalho mais no ambiente onde ela era usada. Onde eu tô agora nem tenho Oracle pra testar... Mas o resultado que eu obtia, com certeza, era o usuário da tentativa errada de login, e não SYS...
Em 29 de novembro de 2011 16:31, JLSilva <[email protected]> escreveu: > ** > > > Marcos, realmente muito semelhante sua trigger. > provavelmente me baseei nos mesmos exemplos.. rsrs.. > mas, seguinte.. o TXT_ORACLE_USER sempre retorna SYS, porque a trigger > executa no "contexto" do owner dela. > pelo menos é o que está ocorrendo aqui no banco onde estou testando. > será q você conseguiu um resultado diferente nessa coluna? > > > On Nov 29, 2011, at 16:12 , Marcos de Moura Gonçalves wrote: > > > Realmente, não percebi que no seu script vc se conecta como /. Eu vi o > > create trigger sem especificar o owner e achei que ficava em um outro > owner. > > > > Não sei se ajuda, mas segue o código do trigger e tabela q eu fiz na > época: > > > > CREATE TABLE marcos.erro_logon > > (dt_erro DATE DEFAULT SYSDATE > > ,txt_oracle_user VARCHAR2(30) > > ,txt_ip VARCHAR2(15) > > ,txt_maquina VARCHAR2(50) > > ,txt_os_user VARCHAR2(50) > > ,txt_software VARCHAR2(50) > > ,txt_tipo_autenticacao VARCHAR2(50) > > ,txt_erro VARCHAR2(100)) > > / > > CREATE OR REPLACE TRIGGER SYS.trg_as_erro_logon > > AFTER SERVERERROR ON DATABASE > > BEGIN > > IF ( is_servererror (1004) > > OR is_servererror (1005) > > OR is_servererror (1017) > > OR is_servererror (1035) > > OR is_servererror (1045) > > ) > > THEN > > INSERT INTO marcos.erro_logon > > (txt_oracle_user, > > txt_ip, > > txt_maquina, > > txt_os_user, > > txt_software, > > txt_tipo_autenticacao, > > txt_erro > > ) > > VALUES (SYS_CONTEXT ('USERENV', 'CURRENT_USER'), > > SYS_CONTEXT ('USERENV', 'IP_ADDRESS'), > > SYS_CONTEXT ('USERENV', 'HOST'), > > SYS_CONTEXT ('USERENV', 'OS_USER'), > > SYS_CONTEXT ('USERENV', 'MODULE'), > > SYS_CONTEXT ('USERENV', 'AUTHENTICATION_TYPE'), > > DBMS_UTILITY.format_error_stack > > ); > > COMMIT; > > END IF; > > END trg_as_erro_logon; > > / > > > > Erros logados: > > 1004: ORA-01004: default username feature not supported; logon denied > > 1005: ORA-01005: null password given; logon denied > > 1017: ORA-01017: invalid username/password; logon denied > > 1035: ORA-01035: ORACLE only available to users with RESTRICTED SESSION > > privilege > > 1045: ORA-01045: user ... lacks CREATE SESSION privilege; logon denied > > []s > > > > Marcos > > > > Em 29 de novembro de 2011 16:08, JLSilva <[email protected]> > escreveu: > > > >> ** > > >> > >> > >> Olha, não entendo qual seria a diferença. A trigger e a tabela já está > no > >> schema SYS. > >> De qualquer forma, executei este procedimento, mas o resultado foi > >> exatamente o mesmo, ou seja, o CURRENT_USER retorna o SYS e o > SESSION_USER > >> retorna nulo, independente de existir ou não no banco o usuário > informado > >> no login. > >> > >> Se tiver mais alguma dica, agradeço! > >> > >> connect / as sysdba > >> > >> create user jlsilva identified by jlsilva quota unlimited on users; > >> grant create session, create table to jlsilva; > >> > >> drop table jlsilva.log_falha_logon_tt purge; > >> create table jlsilva.log_falha_logon_tt as > >> > >> select > >> --ORA_LOGIN_USER SESSION_USER, > >> sys_context('USERENV','CURRENT_USER') SESSION_USER, > >> --sys_context('USERENV','SESSION_USER') SESSION_USER, > >> --sys_context('USERENV','SESSION_USERID') SESSION_USERID, > >> sys_context('USERENV','AUTHENTICATION_TYPE') AUTHENTICATION_TYPE, > >> ORA_DATABASE_NAME DATABASE_NAME, > >> ORA_INSTANCE_NUM INSTANCE_NUM, > >> ORA_SERVER_ERROR(1) SERVER_ERROR, > >> sysdate HORA_OCORR, > >> sys_context('USERENV','IP_ADDRESS') IP_ADDRESS, > >> sys_context('USERENV','HOST') HOST, > >> sys_context('USERENV','TERMINAL') TERMINAL, > >> sys_context('USERENV','OS_USER') OS_USER, > >> sys_context('USERENV','NETWORK_PROTOCOL') NETWORK_PROTOCOL > >> from dual > >> where 1=2; > >> > >> create or replace trigger sys.tr_falha_logon_tt > >> > >> AFTER SERVERERROR ON DATABASE > >> declare > >> BEGIN > >> IF IS_SERVERERROR(1017) THEN > >> insert into jlsilva.log_falha_logon_tt > >> > >> ( > >> SESSION_USER, > >> AUTHENTICATION_TYPE, > >> DATABASE_NAME, > >> INSTANCE_NUM, > >> SERVER_ERROR, > >> HORA_OCORR, > >> IP_ADDRESS, > >> HOST, > >> TERMINAL, > >> OS_USER, > >> NETWORK_PROTOCOL > >> ) > >> values > >> ( > >> --ORA_LOGIN_USER, > >> sys_context('USERENV','CURRENT_USER'), > >> --sys_context('USERENV','SESSION_USER'), > >> --sys_context('USERENV','SESSION_USERID'), > >> sys_context('USERENV','AUTHENTICATION_TYPE'), > >> ORA_DATABASE_NAME, > >> ORA_INSTANCE_NUM, > >> ORA_SERVER_ERROR(1), > >> sysdate, > >> sys_context('USERENV','IP_ADDRESS'), > >> sys_context('USERENV','HOST'), > >> sys_context('USERENV','TERMINAL'), > >> sys_context('USERENV','OS_USER'), > >> sys_context('USERENV','NETWORK_PROTOCOL') > >> ); > >> END IF; > >> END; > >> / > >> > >> connect abc123/abc123 > >> connect / as sysdba > >> > >> set linesize 999 pagesize 1000 > >> column SESSION_USER format a15 > >> column SESSION_USERID format a15 > >> column AUTHENTICATION_TYPE format a15 > >> column DATABASE_NAME format a15 > >> column INSTANCE_NUM format 999 > >> column SERVER_ERROR format 999999 > >> column IP_ADDRESS format a15 > >> column HOST format a35 > >> column TERMINAL format a15 > >> column OS_USER format a15 > >> column NETWORK_PROTOCOL format a15 > >> select * from jlsilva.log_falha_logon_tt order by hora_ocorr; > >> > >> > >> On Nov 29, 2011, at 15:55 , Marcos de Moura Gonçalves wrote: > >> > >>> Cara, a minha trigger é muito parecida com a sua, o mesmo conceito. Fiz > >>> essa trigger a um tempo já, e lembro que li alguma coisa sobre a > >> diferença > >>> entre essa trigger estar ou não no usuário SYS. O motivo, honestamente, > >> não > >>> lembro, mas lembro que minha tabela de log ficava dentro do meu schema, > >> mas > >>> a trigger eu criei dentro do schema sys. Experimenta dropar a sua > >> trigger e > >>> recompilá-la, igualzinha, apenas especificando: > >>> create or replace trigger SYS.tr_falha_logon_tt > >>> > >>> Em 29 de novembro de 2011 15:49, JLSilva <[email protected]> > >> escreveu: > >>> > >>>> ** > >> > >>>> > >>>> > >>>> Ah, entendi. > >>>> Você deve estar fazendo uma trigger de login, comum. > >>>> Veja meu processo e veja se é isto que você está fazendo: > >>>> > >>>> connect / as sysdba > >>>> > >>>> drop table log_falha_logon_tt purge; > >>>> create table log_falha_logon_tt as > >>>> select > >>>> --ORA_LOGIN_USER SESSION_USER, > >>>> sys_context('USERENV','CURRENT_USER') SESSION_USER, > >>>> --sys_context('USERENV','SESSION_USER') SESSION_USER, > >>>> --sys_context('USERENV','SESSION_USERID') SESSION_USERID, > >>>> sys_context('USERENV','AUTHENTICATION_TYPE') AUTHENTICATION_TYPE, > >>>> ORA_DATABASE_NAME DATABASE_NAME, > >>>> ORA_INSTANCE_NUM INSTANCE_NUM, > >>>> ORA_SERVER_ERROR(1) SERVER_ERROR, > >>>> sysdate HORA_OCORR, > >>>> sys_context('USERENV','IP_ADDRESS') IP_ADDRESS, > >>>> sys_context('USERENV','HOST') HOST, > >>>> sys_context('USERENV','TERMINAL') TERMINAL, > >>>> sys_context('USERENV','OS_USER') OS_USER, > >>>> sys_context('USERENV','NETWORK_PROTOCOL') NETWORK_PROTOCOL > >>>> from dual > >>>> where 1=2; > >>>> > >>>> create or replace trigger tr_falha_logon_tt > >>>> AFTER SERVERERROR ON DATABASE > >>>> declare > >>>> BEGIN > >>>> IF IS_SERVERERROR(1017) THEN > >>>> insert into log_falha_logon_tt > >>>> ( > >>>> SESSION_USER, > >>>> AUTHENTICATION_TYPE, > >>>> DATABASE_NAME, > >>>> INSTANCE_NUM, > >>>> SERVER_ERROR, > >>>> HORA_OCORR, > >>>> IP_ADDRESS, > >>>> HOST, > >>>> TERMINAL, > >>>> OS_USER, > >>>> NETWORK_PROTOCOL > >>>> ) > >>>> values > >>>> ( > >>>> --ORA_LOGIN_USER, > >>>> sys_context('USERENV','CURRENT_USER'), > >>>> --sys_context('USERENV','SESSION_USER'), > >>>> --sys_context('USERENV','SESSION_USERID'), > >>>> sys_context('USERENV','AUTHENTICATION_TYPE'), > >>>> ORA_DATABASE_NAME, > >>>> ORA_INSTANCE_NUM, > >>>> ORA_SERVER_ERROR(1), > >>>> sysdate, > >>>> sys_context('USERENV','IP_ADDRESS'), > >>>> sys_context('USERENV','HOST'), > >>>> sys_context('USERENV','TERMINAL'), > >>>> sys_context('USERENV','OS_USER'), > >>>> sys_context('USERENV','NETWORK_PROTOCOL') > >>>> ); > >>>> END IF; > >>>> END; > >>>> / > >>>> > >>>> connect abc123/abc123 > >>>> connect / as sysdba > >>>> > >>>> set linesize 999 pagesize 1000 > >>>> column SESSION_USER format a15 > >>>> column SESSION_USERID format a15 > >>>> column AUTHENTICATION_TYPE format a15 > >>>> column DATABASE_NAME format a15 > >>>> column INSTANCE_NUM format 999 > >>>> column SERVER_ERROR format 999999 > >>>> column IP_ADDRESS format a15 > >>>> column HOST format a35 > >>>> column TERMINAL format a15 > >>>> column OS_USER format a15 > >>>> column NETWORK_PROTOCOL format a15 > >>>> select * from log_falha_logon_tt order by hora_ocorr; > >>>> > >>>> > >>>> On Nov 29, 2011, at 15:43 , Marcos de Moura Gonçalves wrote: > >>>> > >>>>> Engraçado cara, eu fiz exatamente isso e trouxe o usuário da > conexão... > >>>>> Talvez seja porquê a minha trigger está no usuário SYS. Experimenta > >>>> criá-la > >>>>> para o usuário SYS. > >>>>> > >>>>> Em 29 de novembro de 2011 15:40, JLSilva <[email protected]> > >>>> escreveu: > >>>>> > >>>>>> ** > >>>> > >>>>>> > >>>>>> > >>>>>> Marcos, é por aí, mas o sys_context('USERENV','CURRENT_USER') > >> retornou o > >>>>>> usuário proprietário da trigger. > >>>>>> Precisaria de uma função que retornasse o usuário informado no > login. > >>>>>> Valeu! > >>>>>> > >>>>>> > >>>>>> On Nov 29, 2011, at 15:33 , Marcos de Moura Gonçalves wrote: > >>>>>> > >>>>>>> Boa tarde JLSilva, > >>>>>>> > >>>>>>> Experimenta SYS_CONTEXT ('USERENV', 'CURRENT_USER'). > >>>>>>> > >>>>>>> []s > >>>>>>> > >>>>>>> Marcos > >>>>>>> > >>>>>>> Em 29 de novembro de 2011 13:47, JLSilva <[email protected]> > >>>>>> escreveu: > >>>>>>> > >>>>>>>> ** > >>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> Pessoal, alguém teria uma trigger que consiga registrar o nome do > >>>>>> usuário > >>>>>>>> quando ocorre falha no login? > >>>>>>>> As funções ora_login_user e sys_context('USERENV','SESSION_USER') > >> não > >>>>>>>> registram nenhum valor quando ocorre erro de login (trigger "AFTER > >>>>>>>> SERVERERROR ON DATABASE"). > >>>>>>>> Consegui registrar todas as demais informações (osuser, machine, > >>>>>>>> ipaddress), exceto o nome do usuário. > >>>>>>>> Obrigado. > >>>>>>>> > >>>>>>>> Oracle11gR2 11.2.0.2.0 Standard Edition. > >>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> [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/[email protected]/ > >>>>>>> ---------------------------------------------------------- > >>>>>>>> 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 > >>>>>>> > >>>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>> > >>>>> > >>>>> [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/[email protected]/ > >>>>> ---------------------------------------------------------- > >>>>>> 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 > >>>>> > >>>>> > >>>> > >>>> > >>>> > >>> > >>> > >>> [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/[email protected]/ > >>> ---------------------------------------------------------- > >>>> 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 > >>> > >>> > >> > >> > >> > > > > > > [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/[email protected]/ > > ---------------------------------------------------------- > >> 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 > > > > > > > [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/[email protected]/ -------------------------------------------------------------------------------------------------------------------------- >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: [email protected] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
