为了统计哪些用户在登录使用数据库,以及其他用途,需要记录登录数据库的信息,以及尝试登录数据库失败的信息,以下几个trigger可

为了统计哪些用户在登录使用数据库,以及其他用途,需要记录登录数据库的信息,以及尝试登录数据库失败的信息,以下几个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记录登录数据库失败哦信息到alert日志

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相关信息见Oracle 专题页面 ?tid=12

, 本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:php中文网

查看登录oracle信息,记录Oracle用户的登录信息相关推荐

  1. linux 查看用户操作日志,Linux下记录所有用户的登录和操作日志

    一般我们可以用history命令来查看用户的操作记录,但是这个命令不能记录是哪个用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的数据丢失,就很难查到是谁操作的. 在这里我们通 ...

  2. 在Linux下记录所有用户的登录和操作日志

    一般我们可以用history命令来查看用户的操作记录,但是这个命令不能记录是哪个用户登录操作的,也不能记录详细的操作时间,且不完整:所以误操作而造成重要的数据丢失,就很难查到是谁操作的.   在这里我 ...

  3. SQL:要求查询出用户信息,根据用户发表的信息个数对用户进行排序

    要求: 查询出用户信息,根据用户发表的信息个数对用户进行排序 /*用户表*/ CREATE TABLE `tb_user` (`userId` int(11) NOT NULL auto_increm ...

  4. java jdbc 删除不干净sa登录失败_JDBC连接数据库解决用户sa登录失败的问题

    JDBC连接数据库解决用户sa登录失败的问题 JDBC连接数据库,解决用户"sa"登录失败的问题!!! JDBC连接数据库,解决用户"sa"登录失败的问题!!! ...

  5. 微信小程序登录后再次使用判断用户是否登录

    小程序登录与否判断 小程序如果每次使用都需要用户登录势必会使用户体验感降低,如何进行判断用户是否登录了,很简单,只要调用一个API就行了 在小程序登录后的第一个page中的index.js文件的onL ...

  6. django和数据库交互,在微信小程序端把数据库的信息修改为用户输入的信息

    后端: 一.跟上文如何查询数据库中的数据:https://blog.csdn.net/ahc176/article/details/119080900?spm=1001.2014.3001.5501 ...

  7. oracle误删记录,oracle误删数据恢复方法小结

    如果用户误删/更新了数据后,作为用户并没有什么直接的方法来进行恢复,他们必须求助DBA来对数据库进行恢复,到了Oracle9i,这一个难堪局面有所改善.Or(www.)acle 9i中提供了一项新的技 ...

  8. oracle 锁定记录,oracle被锁定的记录解锁

    下面是我在开发中遇到的一个问题,通过以下的方法很好的解决了,下面部分是我从别的网页中摘下来的,以防自己忘记. Oracal数据库中的一个表的一条记录被锁定,既不能修改也不能删除(只看到沙漏,等一个小时 ...

  9. linux 没有权限登录,CentOS中让一个用户没有登录权限

    一.还未建立用户时,可以使用以下命令 1,groupadd groupname useradd -g groupname username -s /bin/false   #-s为默认shell,不给 ...

最新文章

  1. 将二进制流转换为图片
  2. 报告 | 野蛮数据时代,企业和从业者如何应对变革焦虑?
  3. 自学python要多久才能学会-怎么自学python,大概要多久?
  4. kafka的反序列化类KafkaDeserializationSchema的使用(还没整理完)
  5. java虚拟机 函数表_java虚拟机的基本结构如图
  6. spring cloud 调用接口间歇性返回http 500 - Internal Server Error的错误
  7. ssm框架requestmapping找不到_从MVC原理开始手敲一个MVC框架,带你体会当大神的乐趣...
  8. python3最新版下载_python3.9下载-Python下载v3.9.0 官方最新版【x86|x64】-西西软件下载...
  9. java数据库查询类
  10. 【安全】Web渗透测试(全流程)
  11. DJ Mix Pads 2 - Remix Version for Mac(独特DJ混音创作软件)
  12. 土地数据合集-土地出让数据2020版Globe30土地覆盖数据
  13. 花生壳域名申请、内网映射到树莓派及与微信公众号对接
  14. kilo meg giga tera peta exa zetta yotta
  15. unity 裙子摆动_【Unity Shader】摇摆的小草——顶点动画
  16. Windows屏幕工具(屏幕截图、贴图/屏幕取色/截图文字、表格识别/截图翻译、GIF录屏、GIF压缩)
  17. 计算机学院开学标语,大学开学迎新标语
  18. 三,天猫精灵SDK驱动开发板LED
  19. 爬虫爬数据时,post数据乱码解决办法
  20. uniapp安装npm依赖,导入,使用

热门文章

  1. 《通过Web远程浏览并控制Tiny6410上的usb摄像头》---实战篇
  2. oracle index contention,Index Contention等待
  3. python核心教程百度云_Python核心技术与实战 共44讲 中文pdf高清版
  4. SourceInsight 4.0 之一 设置项目的相对路径(可任意移动位置)
  5. 算法练习day14——190402(贪心:切金条、做项目、会议室安排)
  6. 分享篇--esp32直连天猫精灵
  7. apache poi 修改docx表格_一个excel(20M)就能干趴你的poi,你信吗(附源码)?
  8. mysql缓存 碎片_Mysql查询缓存碎片、缓存命中率及Nagios监控
  9. 系统升级页面html,页面访问界面升级
  10. python做自动化测试的优点_乐搏讲自动化测试-python语言特点及优缺点(5)