WEB开发网
开发学院数据库Oracle Oracle数据库网络与安全FAQ精粹 阅读

Oracle数据库网络与安全FAQ精粹

 2007-05-08 12:11:44 来源:WEB开发网   
核心提示: 1、该用户有v_$session与v_$mystat的对象查询权限,可以在sys下对该拥护显式授权,Oracle数据库网络与安全FAQ精粹(5),2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,用来记录ddl的记录2、sp_write_log原本是一个写日志的过程

1、该用户有v_$session与v_$mystat的对象查询权限,可以在sys下对该拥护显式授权。

2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,如null跳过。

3、必须在创建该触发器之前创建一个log$information的表记录登录信息。

[Q]怎么捕获整个数据库的DDL语句或者是说对象结构变化与修改

[A]可以采用DDL触发器,如

CREATE OR REPLACE TRIGGER tr_trace_ddl
AFTER DDL ON DATABASE
DECLARE
sql_text ora_name_list_t;
state_sql ddl$trace.ddl_sql%TYPE;
BEGIN
FOR i IN 1..ora_sql_txt(sql_text) LOOP
state_sql := state_sql||sql_text(i);
END LOOP;
INSERT INTO ddl$trace(login_user,ddl_time,ip_address,audsid,
schema_user,schema_object,ddl_sql)
VALUES(ora_login_user,SYSDATE,userenv('SESSIONID'),
sys_context('USERENV','IP_ADDRESS'),
ora_dict_obj_owner,ora_dict_obj_name,state_sql);
EXCEPTION
WHEN OTHERS THEN
sp_write_log('Capture DDL Excption:'||SQLERRM);
END tr_trace_ddl;

在创建以上触发器时要注意几点

1、必须创建一个ddl$trace的表,用来记录ddl的记录

2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,如null跳过

[Q]怎么捕获表上的DML语句(不包括select)语句)

[A]可以采用dml触发器,如

CREATE OR REPLACE TRIGGER tr_capt_sql
BEFORE DELETE OR INSERT OR UPDATE
ON manager.test
DECLARE
sql_text ora_name_list_t;
state_sql capt$sql.sql_text%TYPE;
BEGIN
FOR i IN 1..ora_sql_txt(sql_text) LOOP
state_sql := state_sql || sql_text(i);
END LOOP;
INSERT INTO capt$sql(login_user,capt_time,ip_address,audsid,owner,table_name,sql_text)
VALUES(ora_login_user,sysdate,sys_context('USERENV','IP_ADDRESS'),
userenv('SESSIONID'),'MANAGER','TEST',state_sql);
EXCEPTION
WHEN OTHERS THEN
sp_write_log('Capture DML Exception:'||SQLERRM);
END tr_capt_sql;

在创建以上触发器时要注意几点

上一页  1 2 3 4 5 6  下一页

Tags:Oracle 数据库 网络

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接