如何使用CREATE SESSION命令追踪Oracle数据库登陆

 
   | |

导读:本文介绍了如何通过Oracle强大的数据审计功能,实现对登录数据库用户的追踪。

关键词:Oracle 数据库 数据审计 安全策略 SQL查询

正在加载数据... 【TechTarget中国原创】问:我正在寻找一种方法,能够识别那些一个月以上都没有登陆过的用户。我原以为Oracle会自带这个功能,现在好像需要用fnd logins写一个SQL查询是吗?

【TechTarget中国原创】问:我正在寻找一种方法,能够识别那些一个月以上都没有登陆过的用户。我原以为Oracle会自带这个功能,现在好像需要用fnd logins写一个SQL查询是吗?

  答:开箱即用,Oracle数据库对追踪来访用户的功能并不强大。但这并不意味着Oracle不能胜任这一任务。事实上,Oracle数据库审计功能十分强大、灵活并且易配置。适当并有效地使用数据库审计功能是拥有高效安全策略的基础。由于我们不可能阻止零时间漏洞攻击,所以同样重要的是检测对数据库的未授权访问动作。

  注意:我不知道你使用的是什么版本的Oracle关系型数据库管理系统,但一下的建议对9i-11g都有效,除非另有说明。

  针对特定性的需求,确定哪些用户在30天内都没有登录,我们将开始针对您的数据库进行审核(注意:您必须以特权账号身份登录数据库才能执行此操作):

  SQL> alter SYSTEM set audit_trail=DB scope=spfile;
  SQL> shutdown immediate
  SQL> startup
  SQL> show parameter audit_trail;

  这个动作只能在数据库重启之后生效,这就是我为什么要加上关闭和启动命令的原因。当参数被设置并重启数据库之后,你的数据库将不会自动开始审计用户操作,但是如果不再重启,它将在任何时候都有此功能。

  我之所以在DB中设置了一个audit_trail参数,是因为它可以在数据库内部的SYS.AUD$表中记录用户动作。它使得我们能够使用简单的SQL查询和Oracle提供的视图来轻松迅速地统计我们需要的信息。在OS的文件系统中,还有其它的选择可供我们扩大信息收集或存储不同格式的审计信息。Oracle审计追踪说明书为我们提供了所有选择的详尽说明。

  因为我们选择在数据库内部存储审计动作,所以我们需要为SYS.AUD$表设计一个最优方法。SYS.AUD$表随着我们收集和储存审计信息而增长,它是存在系统的表空间里,因此同时会造成表空间的增长。不幸的是,在系统表空间增长之后,的确没有一个比较好的办法来缩减它。而幸运的是,SYS.AUD$表是为数不多的SYS表,我们可以在数据库内部任意移动它而不造成任何问题。

  最优方法就是为SYS.AUD$表特别创建一个表空间。这使得表增长不会影响到系统表空间和相关数据文件。如果审计表和非系统表空间增长过大,我们有很多方法来将表内容存档并调整表空间大小,或直接将它移动到新的空间。另外利用具体的权限,这个表空间可以被隔离到不同的文件夹来加强我们的安全状况,甚至可以防止窜改审计信息。虽然这和原来的问题关系不大。

  下面提供一些关于达成最优方法的命令示例。首先为审计表创建一个表空间:

  SQL> CREATE BIGFILE TABLESPACE "AUDITING"
  DATAFILE '[Insert your path here without square brackets].AUDIT01.DBF'
  SIZE 10M
  AUTOEXTEND ON NEXT 1024K
  MAXSIZE UNLIMITED
  LOGGING
  EXTENT MANAGEMENT LOCAL
  SEGMENT SPACE MANAGEMENT AUTO;
  -- NOTE – 'BIGFILE' is only applicable to versions 10g & 11g, omit for 9i use

  然后我们把SYS.AUD$表移动到新的表空间:

  SQL> alter TABLE SYS.AUD$ move tablespace AUDITING;

  这将让你能够验证移动是否成功:

  SQL> select TABLE_NAME, TABLESPACE_NAME, STATUS
  from DBA_TABLES
  where TABLE_NAME like 'AUD$';

  下一步就开始审计动作,它能生成我们需要的数据,检测哪些用户在三十天内登陆了数据库,即CREATE SESSION。它将记录有谁登陆了,什么时候登录的还有是否成功登陆了。

  SQL> audit CREATE SESSION;

  任务完成!现在我们只需要使用SQL语句将过去三十天成功登陆的用户过滤掉。出于易用性和性能考虑,我强烈建议创建一个视图,选择所有成功登陆的用户,然后通过查询移除这些用户。这个查询还可以帮助你添加Oracle默认用户和没有登录的有效用户,这样他们就不会显示在最后的结果集中。

  

    SQL> create view LOGIN_LAST_THIRTY_DAYS_VIEW
  as
  select DISTINCT u.USERNAME
  from DBA_USERS u join DBA_AUDIT_SESSION a
  on u.USERNAME = a.USERNAME
  where a.RETURNCODE = 0
  and SYSDATE - a.TIMESTAMP between 0 and 30;
  SQL> select DISTINCT USERNAME
  from DBA_USERS
  where
  USERNAME not in
  (select * from LOGIN_LAST_THIRTY_DAYS_VIEW)
  and USERNAME not in
  ('SYS', 'SYSTEM', 'SYSMAN', 'DBSNMP', 'Add other oracle default schemas here as needed')
  order by USERNAME;

  这个操作看似很庞大,但实际上只是一些SQL命令和重启,因此不要被背景信息所吓倒。现在所有的基础工作都完成了,你在审计表中收集的信息同样可以用来检测暴力攻击,执行行为分析来突出可疑操作,生成使用状态仿形等等。

 
查看全文
 
 
 
 
 

Oracle可用性

 
Oracle公司的这种虚拟化授权策略与其它厂家如BEA或微软相比,是不太友好的。这些公司的虚拟化软件授权针对单个实例,而非每个物理服务器。
 
所有的数据库,不管是物理的还是逻辑的,都必须首先被创建为物理备用数据库。用来创建备用数据库的工具有:RMAN,数据卫士代理,Oracle网格控制。
 
设置数据卫士为不同的模式,有不同的配置,这需要适合硬件,也取决于可用的硬件,进程和最终业务需要。
 
数据卫士在Oracle 8i版本就以某种形式存在了;然而,通过11g中的二级数据库,可以在它处于以读取方式打开的情况下执行恢复。
 
我们可以通过Oracle企业管理器来管理自动存储管理实例,同时我们也可以在SqlPlus和ASMCMD(自动存储管理的命令行管理工具)中使用命令行来管理。
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录