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
>
>