Control de DDL's

Hola, tengo este trigger para controlar cuando se realizan ddl en mi bd. El problema es que quiero saber desde que pc se realiza cada ddl. He probado con
ora_client_ip_address, pero no funciona.
CREATE OR REPLACE TRIGGER DDLTrigger
after ddl on database
begin
INSERT INTO DDL_EVENTS
(UserName, DDL_Date, DDL_Obj_Type, DDL_Obj_Owner, DDL_Obj_Name, DDL_Event, Ip_Client) VALUES
(ora_login_user, SYSDATE, ora_dict_obj_type,ora_dict_obj_owner, ora_dict_obj_name, ora_sysevent, ora_client_ip_address);
END;
Un saludo

1 respuesta

Respuesta
1
OK!
Aquí te mando una función muy útil del sql
Que te permite hacer eso que quieres hacer!
SELECT USERENV('TERMINAL')
FROM DUAL;
SELECT USERENV('ENTRYID')
FROM DUAL;
SELECT USERENV('SESSIONID')
FROM DUAL;
SELECT USERENV('TERMINAL')
FROM DUAL;
SELECT USERENV('LANGUAGE')
FROM DUAL;
SELECT USERENV('LANG')
FROM DUAL;
SELECT USERENV('CLIENT_INFO')
FROM DUAL;
BIEN
Claro
Esto estaría en la session que dispara el trigger
O mejor dicho dentro del trigger!
Suerte!
Y si llegas a necesitar como capturar la dirección ip de las maquinas ya sea en modo web o modo liente/servidor!!!
Pues formúlame una pregunta para ello!
BYE
Suerte
He probado lo que me has dicho dentro del trigger y al hacer una alter sobre una tabla salta el trigger y me da este error. ¿Alguna idea?
ORA-00604: error producido a nivel 1 de SQL recursivo
ORA-02003: parámetro USERENV no válido
ORA-06512: en línea 4
El código es :
CREATE OR REPLACE TRIGGER ddl_trigger
after ddl on database
Declare
l_cnt VARCHAR2(15);
BEGIN
EXECUTE IMMEDIATE 'SELECT USERENV("IP_ADDRESS") FROM DUAL; '
INTO l_cnt;
INSERT INTO DDL_EVENTS
(username, ddl_date, ddl_obj_type,
ddl_obj_owner, ddl_obj_name, ddl_event,
ip_client
)
VALUES (ora_login_user, SYSDATE, ora_dict_obj_type,
ora_dict_obj_owner, ora_dict_obj_name, ora_sysevent,
l_cnt
);
END;
/
Ya he solucionado el problema con
EXECUTE IMMEDIATE 'SELECT SYS_CONTEXT (''USERENV'', ''IP_ADDRESS'') FROM DUAL' INTO w_a;
Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas