Oracle9i新特性之数据库监控系列详解
2007-05-12 12:25:07 来源:WEB开发网最后创建触发器,记载登录信息。 CREATE OR REPLACE TRIGGER TR_LOGIN_RECORD
AFTER logon ON DATABASE
DECLARE
mtSession v$session%ROWTYPE;
CURSOR cSession(iiQuerySid IN NUMBER) IS
SELECT * FROM v$session
WHERE audsid = iiQuerySid;
BEGIN
OPEN cSession(userenv('SESSIONID'));
FETCH cSession INTO mtSession;
IF cSession%FOUND THEN
INSERT INTO log$information(id,username,logintime,terminal,ipadress,osuser,machine,
program,sid,serial#,ausid)
VALUES(sq_login.nextval,USER,SYSDATE,mtSession.Terminal,
SYS_CONTEXT ('USERENV','IP_ADDRESS'),mtSession.Osuser,
mtSession.Machine,mtSession.Program,mtSession.
Sid,mtSession.Serial#,userenv('SESSIONID'));
ELSE
sp_write_log('session信息错误:'||SQLERRM);
raise_application_error(-20099,'登录异常错误',FALSE);
END IF;
CLOSE cSession;
EXCEPTION
WHEN OTHERS THEN
sp_write_log('登记登录信息错误:'||SQLERRM);
RAISE;
END;
说明:这个触发器监控所有登录用户,并把其信息存入到以上表中。根据表中记载的信息,可以获得所有登录信息,用于审计用户的登陆是否许可。
5、监控所有DDL的触发器
当然,在此之前我们需要建立一张表,用来记录所有的DDL操作的信息。 create table DDL$TRACE
(
LOGIN_USER VARCHAR2(30),
AUDSID NUMBER,
IPADDRESS VARCHAR2(20),
SCHEMA_USER VARCHAR2(30),
SCHEMA_OBJECT VARCHAR2(30),
DDL_TIME DATE,
DDL_SQL VARCHAR2(4000)
)
更多精彩
赞助商链接