1:审计功能介绍
由于oracle TNS协议不开源,所以做一个oracle的proxy是非常困难的,下面展示下oneproxy-for-oracle的效果.
首先看一下配置文件:
一个xml文件,非常简洁,和onecache和onevalue是一样的(onecache是redis的高性能proxy,onevalue是可持久化高性能kv数据库,在github上都是开源的,童鞋们可以直接下源码).
其中backend就是后端oracle数据库,根据sid的不同,可以分别路由到不同的后端,所以想配置多个后端的时候,这个sid是不可以相同的.为了更加安全,客户端在登录的时候,用户名必须在backend下的users中配置了才行,没有配置的用户名通过proxy登录时,proxy将直接给客户端返回错误信息,并断开连接:
ORA-50002,是我们自定义的一个错误码.
每个user后面都可以配置一个login_time_limit和workingday_only,分别表示允许客户端登录的时间和是否只能工作日登录,如果不在范围内,则proxy将直接给客户端返回错误信息,并断开连接,如下:
backend中的safe_tables属性配置的是这个后端的一些安全表,也就是安全等级比较高禁止访问的,如果访问,报错如下:
然后来看一下sql审计功能:
log_allsql配置1表示会将所有sql保存到文件, sqllog_dir是记录的路径,文件大小超过maxlogsize将换一个文件写入;log2db表示将数据保存到db,db地址为root属性中的sourcedb. Rule节点是根据配置的规则记录sql, SQLLength表示sql语句超过配置的长度则记录; SQLRegex就是根据配置的正则表达式来记录sql.
文件内容如下:
其中[-]开头的是符合rule规则被记录下来的, [A]开头的是记录的所有sql,也就是log_allsql="1"起的作用.
简单分析下其中的一条记录:
[-][2017-02-2819:43:09][192.168.7.234:64844][orcl.localdomain][WORKGROUP\5XUXVWKBLYZTEQL][Administrator][00000][9][1278021928][8]select * from test1
[2017-02-28 19:43:09]: sql执行的时间点
[192.168.7.234:64844]: 客户端ip和port
[orcl.localdomain]: 客户端登录的sid
[WORKGROUP\5XUXVWKBLYZTEQL]: 客户端的主机名
[Administrator]: 客户端主机的用户名
[00000]:sql的错误码(select一个不存在的表,则是00942)
[9]: 执行sql影响的行数
[1278021928] :hash值,根据这个hash值可以在http的页面中找到相应的sql(还有一个http页面,待会介绍)
[8]: sql执行的时间,单位毫秒
select * from test1: 就是本次执行是sql了
2:http页面介绍
在配置文件root节点下的monitor_port属性配置的是监控页面的端口,可以直接在浏览器访问,地址oneproxy-for-oracle所在主机的ip+monitor_port, 如下:
其中statspack记录的是所有数据,realtime(10s) 是最近10秒的一些记录,10s是可以配置的.
这里的第一列就是hash值,前文sqllog文件中的hash值和这个值是一致的,可以通过Statspack下的FindSQL,输入hash值就可以找到sql了:
下面这个是table state,记录了所有表被执行了哪些sql,SQLs列中的数字都是带链接的,直接点击就可以跳到这个表所对应的sql了 .
3:前后端密码分离
支持jdbc 11gr2的前后端密码分离,可以在proxy配置一个非后端真实密码,客户端连接时只要使用这个密码就行.
由于oci暂不支持,所以暂不多介绍.
4:注意点
1. 目前支持的oracle版本为11g-r2和10g r2
2. 后端主机是HPUX的,暂不支持审计
3. 上面测试结果基于linux下oracle版本11g-r2和10g r2 ,客户端win下11g和10g-r2 64位oci ,11g-r2 jdbc
5:联系我们
QQ群:578757716 http://www.onexsoft.com/