Oracle中通过触发器追踪用户活动
2007-05-05 12:03:30 来源:WEB开发网最后的程序—用户在注销时执行的最后一个程序的名称。
最后的活动—用户在会话种执行的最后一个活动。
最后的模块—用户在注销前访问的最后一个模块的名称。
注销时间—一个和用户实际注销时间一样的一个Oracle时间数据类型,精确到0.001秒。
现在,我们知道了登陆和注销的信息,那么我们如何搜集这些信息,并管理它们呢?让我们来看看可用的选择。
用户表的标准化
因为用户的登陆/注销触发器是两个分离的实体,所以我们在设计支持存放这些信息的表的时候就可以有多种选择。我们可以设计两个隔离的表格:一个用户登陆表和一个用户注销表。如果我们这样做了,那么在把这两个表连接起来的时候和判断哪个用户的登陆引起了哪个用户的注销等等事情的时候就会有困难。这个投机取巧的方法可能会给错误的产生制造机会。诸如,用户24在登陆前是如何注销的?等等。
现在,让我们考虑一个更好的选择。为了很好的使用表的信息,我们可以创建一个数据库,它里面包含一个单一的表,用于记录登陆和注销时间信息。这个方法就省去了连接表和关联数据的麻烦。另外,我们还将创建一个区域,用于计算每个用户在特定会话中所用去的时间。这个计算预先由触发器做好,这样就可以节省时间,并且可以创建一个丰富的报表,这个我们后面会提到。
设计一个登陆触发器
一旦表格设计好了以后,接下来的步骤就是创建一个系统级的登陆触发器,它可以在发生登陆时间的时候记录尽可能多的信息。我创建的登陆审计触发器。正像你看到的一样,我在这个表中创建了一些在登陆时可以使用到的信息值:
用户—建立Oracle会话的Oracle用户ID
会话ID—使用Oracle的SYS context功能从v$session 表中直接获取Oracle的会话ID。主机—使用Oracle的SYS context功能,在Oracle会话被创建的时候获取主机名。请注意,对于使用Oracle并行服务器或者实际应用群的时候,获取主机名是非常重要的,因为我们可能同时和许多不同的远程主机都有会话连接。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››通过远程管理更改ESXi主机root用户密码
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
更多精彩
赞助商链接