第40期 通过dbms_system.ksdwrt把日志写到alter文件中

来源:这里教程网 时间:2026-03-03 21:53:12 作者:

有时候我们需要把自己的一些信息记录到oracle的alter告警日志中,我有一个这样的场景,要记录那些客户端ip地址访问了数据库服务器,并把这些信息记录到alter告警日志。定义一个存储过程,记录数据库的白名单信息,实现只有是白名单的客户,才能访问数据库,并且把访问的客户信息记录到alter告警日志中。在alter告警日志中,记录只有10.10.30.85的客户端才能访问数据库,并在alter告警日志中记录客户端是什么时候哪个用户访问的。 CREATE OR REPLACE PROCEDURE check_client_access AS   v_ip_address VARCHAR2(150);   message      varchar2(400); BEGIN   SELECT SYS_CONTEXT('USERENV', 'IP_ADDRESS') INTO v_ip_address FROM dual;   IF v_ip_address = '10.10.30.85' THEN     message := to_char(sysdate, 'Mon dd HH24:MI:SS YYYY') ||                ' logon success from ' || v_ip_address || ' ' ||                ' user: PT_QUERY;';     sys.dbms_system.ksdwrt(2, message);   ELSE     RAISE_APPLICATION_ERROR(-20001,                             'Access denied for client IP address: ' ||                             v_ip_address);   END IF; END; /定义一个触发器,当客户端登陆数据库时进行验证。 CREATE OR REPLACE TRIGGER restrict_client_access   AFTER LOGON ON DATABASE DECLARE   STR_SCHEMANAME   VARCHAR2(40);   STR_OSUSER       VARCHAR2(40);   STR_PROGRAM      VARCHAR2(60);   STR_DATABASEROLE VARCHAR2(40); BEGIN   select DATABASE_ROLE INTO STR_DATABASEROLE from V$DATABASE;   IF STR_DATABASEROLE = 'PRIMARY' THEN     SELECT USERNAME, OSUSER, PROGRAM       INTO STR_SCHEMANAME, STR_OSUSER, STR_PROGRAM       FROM V$SESSION      WHERE audsid = USERENV('SESSIONID');     IF STR_SCHEMANAME = 'PT_QUERY' THEN       check_client_access;     END IF;   END IF; END; /

相关推荐

热文推荐