监控数据库中的DDL事件,直接获取终端的IP地址和终端名称,让你确切的知道谁在操作你的数据库!
他到底想做什么!
drop
trigger
LogDDLActions;
/
drop table ddl_actions;
/
-- ---------------------------------------------------------------
create table ddl_actions
(who varchar2 ( 100 ),
what varchar2 ( 2000 ),
when date,
ip_address varchar2 ( 100 ),
terminal varchar2 ( 100 )
);
/
-- -----------------------------------------------------------------
CREATE OR REPLACE TRIGGER LogDDLActions
BEFORE DDL ON DATABASE
DECLARE
executor ddl_actions.who % TYPE;
action ddl_actions.what % TYPE;
ipaddr ddl_actions.ip_address % TYPE;
tterminal ddl_actions.terminal % TYPE;
BEGIN
executor : = LOGIN_USER;
action : = SYSEVENT || ' ' || DICTIONARY_OBJ_TYPE || ' '
|| DICTIONARY_OBJ_OWNER || ' . ' || DICTIONARY_OBJ_NAME;
SELECT DISTINCT TRIM(SYS_CONTEXT( ' userenv ' , ' ip_address ' )), terminal INTO ipaddr, tterminal
FROM V_$SESSION
WHERE NVL(USERNAME, ' NULL ' ) = USER
AND TERMINAL = USERENV( ' TERMINAL ' );
INSERT INTO ddl_actions VALUES (executor, action, SYSDATE, ipaddr, tterminal);
EXCEPTION
WHEN OTHERS THEN
INSERT INTO ddl_actions VALUES (executor, action, SYSDATE, null , null );
END ;
/
/
drop table ddl_actions;
/
-- ---------------------------------------------------------------
create table ddl_actions
(who varchar2 ( 100 ),
what varchar2 ( 2000 ),
when date,
ip_address varchar2 ( 100 ),
terminal varchar2 ( 100 )
);
/
-- -----------------------------------------------------------------
CREATE OR REPLACE TRIGGER LogDDLActions
BEFORE DDL ON DATABASE
DECLARE
executor ddl_actions.who % TYPE;
action ddl_actions.what % TYPE;
ipaddr ddl_actions.ip_address % TYPE;
tterminal ddl_actions.terminal % TYPE;
BEGIN
executor : = LOGIN_USER;
action : = SYSEVENT || ' ' || DICTIONARY_OBJ_TYPE || ' '
|| DICTIONARY_OBJ_OWNER || ' . ' || DICTIONARY_OBJ_NAME;
SELECT DISTINCT TRIM(SYS_CONTEXT( ' userenv ' , ' ip_address ' )), terminal INTO ipaddr, tterminal
FROM V_$SESSION
WHERE NVL(USERNAME, ' NULL ' ) = USER
AND TERMINAL = USERENV( ' TERMINAL ' );
INSERT INTO ddl_actions VALUES (executor, action, SYSDATE, ipaddr, tterminal);
EXCEPTION
WHEN OTHERS THEN
INSERT INTO ddl_actions VALUES (executor, action, SYSDATE, null , null );
END ;
/