当前位置:  数据库>oracle

记录Oracle用户的登录信息

    来源: 互联网  发布时间:2017-04-24

    本文导语: 为了统计哪些用户在登录使用数据库,以及其他用途,需要记录登录数据库的信息,以及尝试登录数据库失败的信息,以下几个trigger可以搞定。创建记录用户信息的tableCREATE TABLE oram.LOGIN_LOG(AUDSID       NUMBER,SID          NU...

为了统计哪些用户在登录使用数据库,以及其他用途,需要记录登录数据库的信息,以及尝试登录数据库失败的信息,以下几个trigger可以搞定。
创建记录用户信息table
CREATE TABLE oram.LOGIN_LOG
(
AUDSID       NUMBER,
SID          NUMBER,
SERIAL#      NUMBER,
LOGIN_TIME   DATE,
LOGOUT_TIME  DATE,
USERNAME     VARCHAR2(30 BYTE),
MACHINE      VARCHAR2(64 BYTE),
IP           VARCHAR2(20 BYTE),
PROGRAM      VARCHAR2(48 BYTE)
);
通过trigger记录Oracle用户的登录信息
CREATE OR REPLACE TRIGGER login_on_info
/*******************************************************
author:dbabc.net
time  :2011/12/14
功能:记录登录数据库的用户信息
说明:要以sys用户创建触发器insert 的表可以是任意用户的
********************************************************/
AFTER LOGON
ON DATABASE
BEGIN
INSERT INTO oram.login_log
SELECT   audsid,
SID,
serial#,
SYSDATE,
NULL,
username,
machine,
SYS_CONTEXT ('USERENV', 'IP_ADDRESS'),
program
FROM   v$session
WHERE       SID IN (SELECT   SID
FROM   v$mystat
WHERE   ROWNUM = 1)
AND audsid = SYS_CONTEXT ('USERENV', 'SESSIONID')
AND program NOT LIKE 'JDBC%'
AND username <> 'SYSMAN'
AND TYPE <> 'BACKGROUND';
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;
/
通过trigger更新用户登出数据库的时间
CREATE OR REPLACE TRIGGER login_off_info
/*******************************************************
author:dbabc.net
time  :2011/12/14
功能:更新用户登出数据库的时间
说明:要以sys用户创建触发器
********************************************************/
BEFORE LOGOFF
ON DATABASE
BEGIN
UPDATE   oram.login_log
SET   LOGOUT_TIME = SYSDATE
WHERE       audsid = USERENV ('SESSIONID')
AND SID = (SELECT   SID
FROM   v$session s
WHERE   SID IN (SELECT   SID
FROM   v$mystat
WHERE   ROWNUM = 1))
AND serial# = (SELECT   serial#
FROM   v$session s
WHERE   SID IN (SELECT   SID
FROM   v$mystat
WHERE   ROWNUM = 1));
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;
/
通过trigger记录登录数据库失败哦信息到alertrs能不能返回当前记录集的记录数 iis7站长之家
CREATE OR REPLACE TRIGGER logon_denied_to_alert
/*******************************************************
author:dbabc.net
time  :2011/12/14
功能:记录登录数据库失败哦信息到alert日志中
说明:要以sys用户创建触发器
********************************************************/
AFTER SERVERERROR
ON DATABASE
DECLARE
MESSAGE     VARCHAR2 (120);
IP          VARCHAR2 (15);
v_os_user   VARCHAR2 (80);
v_module    VARCHAR2 (50);
v_action    VARCHAR2 (50);
v_pid       VARCHAR2 (10);
v_sid       NUMBER;
BEGIN
if (ora_is_servererror (1017))
THEN
IF SYS_CONTEXT ('userenv', 'network_protocol') = 'tcp'
THEN
IP := SYS_CONTEXT ('userenv', 'ip_address');
ELSE
SELECT   DISTINCT sid INTO v_sid FROM sys.v_$mystat;
SELECT   p.SPID
INTO   v_pid
FROM   V$PROCESS p, V$SESSION v
where   p.addr = v.paddr and v.sid = v_sid;
END IF;
v_os_user := SYS_CONTEXT ('userenv', 'os_user');
DBMS_APPLICATION_INFO.READ_MODULE (v_module, v_action);
MESSAGE :=
TO_CHAR (SYSDATE, 'Dy Mon dd HH24:MI:SS YYYY')
|| ' logon denied from '
|| NVL (IP, v_pid)
|| ' '
|| v_os_user
|| ' with '
|| v_module
|| ' '
|| v_action;
sys.DBMS_SYSTEM.ksdwrt (2, MESSAGE);
END IF;
END;
/
通过trigger将登录失败的信息记录到表中,先创建table,当然也可以用上面的table,这里新建了一个表跟上面区分
CREATE TABLE USER_LOGIN_AUDIT
(
  SESSION_ID    NUMBER(10),
  SESSION_USER  VARCHAR2(30 BYTE),
  HOST          VARCHAR2(30 BYTE),
  IP            VARCHAR2(30 BYTE),
  CLIENT        VARCHAR2(50 BYTE),
  OS_USER       VARCHAR2(50 BYTE),
  STATUS        CHAR(1 BYTE),
  LOGIN_TIME    DATE
);
通过trigger记录登录数据库失败哦信息到table中
CREATE OR REPLACE TRIGGER TRI_USER_LOGIN_DENIED_AUDIT
   AFTER SERVERERROR
   ON DATABASE
BEGIN
   IF (ora_is_servererror (1017))
   THEN
      INSERT INTO oram.user_login_audit
        VALUES   (SYS_CONTEXT ('USERENV', 'SESSIONID'),
                  SYS_CONTEXT ('USERENV', 'SESSION_USER'),
                  SYS_CONTEXT ('USERENV', 'HOST'),
                  SYS_CONTEXT ('USERENV', 'IP_ADDRESS'),
                  SYS_CONTEXT ('USERENV', 'MODULE'),
                  SYS_CONTEXT ('USERENV', 'OS_USER'),
                  '9',
                  SYSDATE);
   END IF;
END TRI_USER_LOGIN_DENIED_AUDIT;
/



























































































































































更多Oracle相关信息见 专题页面


    
 
 

您可能感兴趣的文章:

  • 如何消除用root登录后的记录
  • HP unix下哪里有记录用户登录信息
  • SQLSERVER记录登录用户的登录时间(自写脚本)
  • 用来记录登录后使用命令的shell脚本
  • LINUX下如果记录登录用户的操作和操作结果
  • 请问能不能记录下一个用户输入的命令到单独的日志文件
  • 通过jsp或servlet如何记录用户关闭浏览器时的时间
  • 求助:如何实时记录用户的命令行命令?谢谢
  • Oracle 当前用户下所有表的记录总数
  • 请问SCO 下的用户登陆记录在那里
  • 如何查看某用户的操作历史记录?
  • 在tomcat下,如何记录用户已经关闭浏览器了,并完成处理?
  • 用户通过mozilla访问页面文件,提交的参数要记录到系统的配置文件中去,如何来实现这个接口?
  • 我用的是ssh来登陆我的机器,我的机器是redhat9.0,请问在什么文件上记录拉用户的登陆情况?
  • 请问如何将root用户的执行的所有操作记录到日志中
  • 统计sql server用户数据表大小(记录总数和空间占用情况)的代码
  • 使用php记录用户通过搜索引擎进网站的关键词
  • 求助呀,我们的HP-UNIX的服务器经常发现有文件被恶意删除。有查询用户执行命令的记录日志吗,感谢了!
  • PHP运行SVN命令显示某用户的文件更新记录的代码
  • 关于MYSQL中每个用户取1条记录的三种写法(group by xxx)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 删除数据库中重复记录方法介绍及代码参考
  • 删除重复的记录,并保存第一条记录或保存最后一条记录
  • 将ResultSet结果集中的记录映射到Map对象中
  • 谁知道如何取小于一条记录的后十条记录
  • Jsp能不能直接调用记录集中的第一条记录阿?
  • 怎样直接定位到记录集的第n条记录呢?
  • 如何得到记录集的最后一笔记录
  • sqlserver下将数据库记录的列记录转换成行记录的方法
  • 如何判断记录集一条记录也没有
  • 请问如何知道ResultSet中是否有记录和记录的总数,有什么方法吗?
  • rs能不能返回当前记录集的记录数
  • DNS域表中的rmx记录和rns记录指什么?
  • sql语句怎么写:将table中字段name='string1'的记录都改为name='string2'的记录
  • SQL语句去掉重复记录,获取重复记录
  • 续刚才的问题:返回的记录集不能rs.last?那我怎么去记录数呢?
  • 用PreparedStatement ps 在数据库中插入记录,但还未提交事务,此时再用Delete语句为什么删除不了用 ps刚才插入的记录,如何可以删除未这
  • linux服务器清空MySQL的history历史记录 删除mysql操作记录
  • 鼠标经过表格时,表格的记录颜色变化,如何每条记录定义onclick事件?
  • 如何用shell实现依文件1某个域到文件2查找满足条件记录并统计记录数后修改文件1
  • sql 查询记录数结果集某个区间内记录
  • mysql合并多条记录的单个字段去一条记录编辑


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,