create or replace trigger marca_logon
after logon on database
begin
insert into vigia
values
(User || ' entrou no systema' ||
to_char(sysdate, 'DD-MM-YYYY HH24:MI:SS'));
COMMIT;
END;
create or replace trigger marca_logon
after logon on database
begin
insert into vigia
values
(User || ' entrou no systema' ||
to_char(sysdate, 'DD-MM-YYYY HH24:MI:SS'));
COMMIT;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001,'Erro ao logar:'||sqlerrm);
END;
CREATE OR REPLACE TRIGGER sys.security_check
AFTER LOGON ON DATABASE
DECLARE
v_sid NUMBER;
v_isdba VARCHAR2(10);
v_program VARCHAR2(30);
v_osuser VARCHAR2(30);
v_username VARCHAR2(30);
BEGIN
select distinct sid
INTO v_sid
from sys.v_$mystat;
select program, osuser, username
INTO v_program, v_osuser, v_username
from sys.v_$session
where sid = v_sid;
SELECT sys_context ('userenv','ISDBA')
INTO v_isdba
FROM DUAL;
IF (UPPER(v_osuser) != UPPER(v_username))
THEN
RAISE_APPLICATION_ERROR
(-20001,'You cant access the database!',TRUE);
END IF;
END;
/
criei a mesma trigger, com o usuário sys e mesmo assim nada foi inserido na tabela...
Ele compilou normalmente, mas quando vi a trigger a mesma estava com erro, mandei recompilar e o erro era da tabela vigia, que não existia.
Criei a mesma e a trigger compilou normalmente. Fechei a sessão e me loguei com o user sys e novamente nada foi add na tabela.
create or replace trigger sys.marca_logon
after logon on database
begin
insert into vigia
values
(User || ' entrou no sistema ' || to_char(sysdate, 'DD-MM-YYYY HH24:MI:SS'));
COMMIT;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001,'Erro ao logar:'||sqlerrm);
END;
Crianças...
qual a versão do banco???isso é muito importante pode ser um bug.
Outra coisa...
já tentou "BEFORE LOGON" ao invés de after...
se compilou e est´´a invalida...teria que ter dado erro
dá um "show errors" depois de cimpilar no sqlplus...mostra algo?
No caso, versão de banco, eu creio que não possa interferir na trigger de After-Logon, mas...
Outra coisa, não pode ser (creio eu) de Before-Logon, pois "antes" de entrar? Como pegar essas informações? Conversei com o DBA aqui e, disse que tem que ser com o After mesmo.
Se surgiu erros, ele me informou que não.
Uma outra coisa que confirmei, muito importante:
Criar com o próprio SYS ou, o usuário que esteja criando, tenha permissão explícita nos objetos.
Outra coisa, você deu uma olhada no Alert do banco pra ver se existe alguma informação referente à essa tentativa? Conversando aqui com a DBA, só me passou pra se tomar cuidado com esta trigger, pois você pode não conseguir logar mais na base.
--1) tabela
CREATE TABLE auditoria (usuario VARCHAR2(30),
data DATE);
--2) trigger
CREATE OR REPLACE TRIGGER log_auditoria AFTER LOGON ON DATABASE
DECLARE
BEGIN
INSERT INTO auditoria (usuario,
data)
VALUES (USER,
SYSDATE);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'Erro logando no banco:'||sqlerrm);
END;
-- depois de logado com Sys e Scott
SELECT *
FROM auditoria;
-- resultado
SCOTT 27-fev-2008 10:36:40
SYS 27-fev-2008 10:37:03