基于Oracle的数据库审计系统

       通常,应用程序访问数据库,执行各种各样的业务SQL或者存储过程,都会对数据产生影响,为了使我们的数据库更加安全,都需要我们在对来访问的各种工具软件或者应用进行合理的管控或者授权,对他们所做的操作进行审计,这样才能增加数据库的安全性

       我们都知道,想要执行一条SQl,首先要做的就是先登录数据库,不管是匿名还是有帐户的,都是要登录,登录也可以采用不同的软件,有开源的客户端软件,有数据库官方的软件,也有自己开发的软件,还有客户的应用系统,只要知道了账号密码,基本都可以登录进去,根据账号权限的不同,进去之后能做的事情也不尽相同。

      那么问题来了,我们是否可以对数据库的登录进行控制呢?Oracle数据库提供了Logon Triger,在用户登录的时候会触发此事件,通过对此事件的重写,我们可以获取用户的基本信息,比如Ip地址,Username,登录时间,Appname等,这个可以为审计提供基础的数据信息,同时,在这个时段,也可以做一些权限控制,判断登录是否合法,不合法,也可以Kill掉这个Session。

     登录成功以后,接下来就是做操作了,DML,DDL,Select等,我们通过Oracle的VPD策略技术,可以实现对Sql指令的重写,当然这个是你觉得他无权这样做的情况下,同时做审计,记录基础的数据,包括SQl语句,绑定变量等等。

    通过以上两点,我们可以构建一个简单的数据库审计系统,这个有别于Oracle自身的系统日志,无法旁路掉,在此基础之上,我们可以对采集到审计数据进行分析,做报表,数据的查询量大的时候,我们都知道,首先建立索引,做表分区,但是当海量索引的时候,Oracle还是跑不动,可以采用全文搜索系统lucene,现在对其包装比较好的有Solr等。

    其实,在CS客户端连接Oracle数据库的过程中,V$session里面是可以看到很多客户端的信息的,但是这个时候看到的信息也不足以断定到底是哪个真正的人,可以结合现在比较流行的CA认证系统,做一个CA签发的Server,配合Usbkey,采用拨号的形式,传递身份信息到数据库的上下文,同时拨号客户端还可以对客户端应用是否合法进行验证,防止假冒应用程序登录数据库。

    既然这样,有人就会想先拨号上去,在杀掉我们的客户端监控程序,这样不就欺骗了服务端吗?所以,为了防止这一点,还需要有一套心跳系统,用来监控客户端的存活情况,可以借助Netty这个异步通信框架来帮助实现心跳功能。

   

  

    

   

相关推荐