LÖSUNG: Oracle10g Anmeldung überwachen
Hi Martin, Hallo @all,
natürlich kann ich die Lösung veröffentlichen.
die ersten 3 Trigger protokolieren jede Datenbankänderung!
(habe ich abgeschrieben
)
die letzten beiden wurden von mir angepasst, sie protokolieren
jede an- und abmeldung!!!
#Tabelle für Information
CREATE TABLE so.so_session_log
(ora_user VARCHAR2(100),
ora_time TIMESTAMP,
ora_sid VARCHAR2(100),
ora_objeto VARCHAR2(100),
ora_tipo VARCHAR2(100),
ora_sql CLOB,
ora_osuser VARCHAR2(200),
ora_machine VARCHAR2(200),
ora_oprogram VARCHAR2(200))
TABLESPACE USERS;
/
CREATE OR REPLACE TRIGGER so.so_session_alter
AFTER
ALTER
ON DATABASE
DECLARE
csql_text ora_name_list_t;
n NUMBER;
cSQL CLOB;
var_user varchar2(30);
var_osuser varchar2(30);
var_machine varchar2(64);
var_process varchar2(09);
var_program varchar2(48);
var_sqltext varchar2(1000);
BEGIN
select s.username, s.osuser, s.machine, s.program
into var_user, var_osuser, var_machine, var_program
from sys.v_$session s
,sys.v_$sqlarea t
where s.audsid = userenv(‚sessionid‘)
and s.prev_sql_addr = t.address(+)
and s.prev_hash_value = t.hash_value(+)
and username is not null;
n:= ora_sql_txt(csql_text);
FOR I IN 1…N LOOP
cSQL:=cSQL||csql_text(i);
END LOOP;
INSERT INTO so.so_session_log
(ora_user, ora_time, ora_sid, ora_objeto, ora_tipo,ora_SQL,
ora_OSUSER , ora_MACHINE , ora_OPROGRAM
)
VALUES(
‚A-‘||DBMS_STANDARD.LOGIN_USER, sysdate,
userenv(‚sessionid‘), DBMS_STANDARD.DICTIONARY_OBJ_NAME,
DBMS_STANDARD.dictionary_obj_type,cSQL,
var_osuser, var_machine, var_program
);
END;
/
– End of DDL Script for Trigger ADM.TGR_ALTER
– Start of DDL Script for Trigger ADM.TGR_CREATE
– Generated 04/05/2004 15:36:01 from ADM@xxxxxxxxxx
CREATE OR REPLACE TRIGGER so.so_session_create
AFTER
CREATE
ON DATABASE
DECLARE
csql_text ora_name_list_t;
n NUMBER;
cSQL CLOB;
var_user varchar2(30);
var_osuser varchar2(30);
var_machine varchar2(64);
var_process varchar2(09);
var_program varchar2(48);
var_sqltext varchar2(1000);
BEGIN
select s.username, s.osuser, s.machine, s.program
into var_user, var_osuser, var_machine, var_program
from sys.v_$session s
,sys.v_$sqlarea t
where s.audsid = userenv(‚sessionid‘)
and s.prev_sql_addr = t.address(+)
and s.prev_hash_value = t.hash_value(+)
and username is not null;
n:= ora_sql_txt(csql_text);
FOR I IN 1…N LOOP
cSQL:=cSQL||csql_text(i);
END LOOP;
INSERT INTO so.so_session_log
(ora_user, ora_time, ora_sid, ora_objeto, ora_tipo,ora_SQL,
ora_OSUSER , ora_MACHINE , ora_OPROGRAM
)
VALUES(
‚C-‘||DBMS_STANDARD.LOGIN_USER, sysdate,
userenv(‚sessionid‘), DBMS_STANDARD.DICTIONARY_OBJ_NAME,
DBMS_STANDARD.dictionary_obj_type,cSQL,
var_osuser, var_machine, var_program
);
END;
/
– End of DDL Script for Trigger ADM.TGR_CREATE
– Start of DDL Script for Trigger ADM.TGR_DROP
– Generated 04/05/2004 15:36:04 from ADM@xxxxxxxxxx
CREATE OR REPLACE TRIGGER so.so_session_drop
AFTER
DROP
ON DATABASE
DECLARE
csql_text ora_name_list_t;
n NUMBER;
cSQL CLOB;
var_user varchar2(30);
var_osuser varchar2(30);
var_machine varchar2(64);
var_process varchar2(09);
var_program varchar2(48);
var_sqltext varchar2(1000);
BEGIN
select s.username, s.osuser, s.machine, s.program
into var_user, var_osuser, var_machine, var_program
from sys.v_$session s
,sys.v_$sqlarea t
where s.audsid = userenv(‚sessionid‘)
and s.prev_sql_addr = t.address(+)
and s.prev_hash_value = t.hash_value(+)
and username is not null;
n:= ora_sql_txt(csql_text);
FOR I IN 1…N LOOP
cSQL:=cSQL||csql_text(i);
END LOOP;
INSERT INTO so.so_session_log
(ora_user, ora_time, ora_sid, ora_objeto, ora_tipo,ora_SQL,
ora_OSUSER , ora_MACHINE , ora_OPROGRAM
)
VALUES(
‚D-‘||DBMS_STANDARD.LOGIN_USER, sysdate,
userenv(‚sessionid‘), DBMS_STANDARD.DICTIONARY_OBJ_NAME,
DBMS_STANDARD.dictionary_obj_type,cSQL,
var_osuser, var_machine, var_program
);
END;
/
CREATE OR REPLACE TRIGGER so.so_session_logon
AFTER
lOGON
ON DATABASE
DECLARE
csql_text ora_name_list_t;
n NUMBER;
cSQL CLOB;
var_user varchar2(30);
var_osuser varchar2(30);
var_machine varchar2(64);
var_process varchar2(09);
var_program varchar2(48);
var_sqltext varchar2(1000);
BEGIN
select s.username, s.osuser, s.machine, s.program
into var_user, var_osuser, var_machine, var_program
from sys.v_$session s
where s.audsid = userenv(‚sessionid‘)
and username is not null;
INSERT INTO so.so_session_log
(ora_user, ora_time, ora_sid, ora_objeto, ora_tipo,ora_SQL,
ora_OSUSER , ora_MACHINE , ora_OPROGRAM
)
VALUES(
DBMS_STANDARD.LOGIN_USER, sysdate,
userenv(‚sessionid‘), ‚CONNECT‘,
DBMS_STANDARD.dictionary_obj_type, ‚‘,
var_osuser, var_machine, var_program
);
END;
/
CREATE OR REPLACE TRIGGER so.so_session_logoff
before
lOGOFF
ON DATABASE
DECLARE
csql_text ora_name_list_t;
n NUMBER;
cSQL CLOB;
var_user varchar2(30);
var_osuser varchar2(30);
var_machine varchar2(64);
var_process varchar2(09);
var_program varchar2(48);
var_sqltext varchar2(1000);
BEGIN
select s.username, s.osuser, s.machine, s.program
into var_user, var_osuser, var_machine, var_program
from sys.v_$session s
where s.audsid = userenv(‚sessionid‘)
and username is not null;
INSERT INTO so.so_session_log
(ora_user, ora_time, ora_sid, ora_objeto, ora_tipo,ora_SQL,
ora_OSUSER , ora_MACHINE , ora_OPROGRAM
)
VALUES(
DBMS_STANDARD.LOGIN_USER, sysdate,
userenv(‚sessionid‘), ‚DISCONNECT‘,
DBMS_STANDARD.dictionary_obj_type, ‚‘,
var_osuser, var_machine, var_program
);
END;
/