总览

若干合规性要求(例如PCI-DSS和SOX)要求审核公司数据库上的特定活动,并可以将其分配给负责相应活动的人员。 同时,当前的应用程序越来越承担着对用户本身进行身份验证和授权的责任,而不是将其留给数据库。 在这种情况下,在数据库级别上几乎不可能将数据库上的各个操作追溯到负责特定活动的应用程序用户。 现有的且通常是专有的方法依赖于数据库功能,例如重新认证或受信任的上下文,从而允许应用程序切换拥有数据库连接的用户,从而实现适当的监视。

通常,重新认证和受信任的上下文都是特定于供应商的,并且经常要求数据库知道重新认证的用户。 随着越来越多的应用程序用户,尤其是对于可能有大量用户的Web应用程序,这种方法变得越来越不切实际,并且如上所述,在应用程序开发中越来越少地使用它。

本文为所有不需要更改现有应用程序的WebSphere Application Server应用程序提供了一种通用方法,该方法使数据库活动监视工具(如InfoSphere Guardium)能够可靠地将应用程序前端用户与其相应的数据库活动进行匹配,而无需进行身份验证和授权分别对应用程序或应用程序容器进行更改,最后,对所有大型关系数据库管理系统仅进行了少量修改即可使用。

挑战

在典型的应用程序(例如J2EE应用程序)中,容器维护着一个数据库连接池,这些连接通过正在运行的应用程序的技术用户进行身份验证。 应用程序用户仅对应用程序进行身份验证,而不对数据库进行身份验证,其最终结果是,驻留在数据库服务器上的任何数据库日志记录或监视方法都将丢失有关应用程序用户的信息,如图1所示。

图1.典型的应用程序拓扑,其中应用程序用户信息在数据库层丢失

为什么这很重要?

诸如PCI-DSS和SOX之类的一些合规性法规都包含着重于数据治理的要求,并且可能需要在数据库上启用监视功能,以查看何时以及由谁访问了哪些数据。 此外,内部需求可能要求对特权用户进行监视,以保护数据免遭未经授权的访问,并使DBA的工作更加透明。

在PCI-DSS方案中,监视重点在于对信用卡信息的所有访问。 为了监视通过使用池化连接的应用程序对信用卡信息的访问,有必要确定连接到数据库的技术用户背后的实际应用程序用户。 如前所述,随着数据访问和用户管理的分离,此任务变得任意复杂。

本文的方法

总览

本文的方法是将应用程序用户信息作为元数据传达给数据库,以便数据库活动监视工具可以提取此信息。

同时,数据库管理系统(DBMS)会忽略此传输的元信息,因此DBMS(包括DB活动,其许可权系统,认证和授权方案)以及WebSphere Application Server(包括其连接)都将被忽略。共用设施)不会受到影响,并且会像以前一样高效地工作。 此外,由于此方法对应用程序无干扰,因此不必更改应用程序本身。

这是通过实现一个定制的DataStoreHelper类来实现的,该类拦截每个事务并负责标识应用程序用户并将其传输到Guardium系统以进行监视和评估。

先决条件

为了使这种方法起作用,必须满足以下先决条件。

  1. 应用程序必须使用在WAS中配置并通过JNDI名称提供给应用程序的WebSphere连接池。 这样可以确保以后开发的DataStoreHelper可以非侵入式地添加到应用程序中。
  2. 该应用程序使用WebSphere应用程序安全性,因为代码依赖于从com.ibm.websphere.security.auth.WSSubject类API静态检索的应用程序用户。

实作

配置数据源以将其与您的应用程序一起使用时,WebSphere Application Server允许您指定数据存储帮助程序类。

该帮助程序弥合了数据库供应商特定代码与通用javax.sql.DataSource接口之间的鸿沟。 通常,不需要指定定制的帮助程序类,因为WebSphere Application Server为最常用的数据库提供了默认的数据存储帮助程序类。

在本文的案例中,这代表了将应用程序用户身份传输到Guardium系统的完美插入点,因为DataStoreHelper接口定义了一个doConnectionSetupPerTransaction(...)方法,允许您在使用每个事务之前拦截该连接。 这个想法是检索当前登录用户的名称,并将其包含在连接上执行的特殊SQL语句中,然后再用于执行与实际应用程序相关的语句。

Guardium系统可以轻松地监视以下虚拟SQL语句,并使连接与负责当前事务中已执行语句的应用程序用户相关联,如清单1所示。

清单1.每个事务传输当前的应用程序用户名
public void doConnectionSetupPerTransaction(Subject subject, String user,Connection conn, boolean reauth,Object properties) throws SQLException {StringBuffer sql = new StringBuffer();sql.append("SELECT 'GuardAppEvent:Start','GuardAppEventUserName:");sql.append(WSSubject.getCallerPrincipal());sql.append("' FROM SYSIBM.SYSDUMMY1");Statement stmt = conn.createStatement();stmt.execute(sql.toString());
}

乍一看,通过静态调用WSSubject从线程中检索主体名称似乎很奇怪,因为已经有一个主题甚至一个用户名都传入了。但是再看一遍,这就是主题所使用的主题。 J2C层(技术用户),用于对数据库进行身份验证。

在大多数情况下,传入的用户为null。 仅在应用程序使用基于组件的身份验证直接提供用户名和密码的情况下才设置该身份,而后者又将是技术用户。

通过实现doConnectionCleanup(Connection conn) ,您还可以在释放与当前用户关联的连接时通知Guardium系统。 唯一的区别是,伪SQL语句发送的是“ GuardAppEvent:Released”而不是“ GuardAppEvent:Start”,如清单2所示。

清单2.在清除连接时发送当前应用程序用户名
public boolean doConnectionCleanup(Connection conn) throws SQLException {StringBuffer sql = new StringBuffer();
sql.append("SELECT 'GuardAppEvent:Released','GuardAppEventUserName:");
sql.append(WSSubject.getCallerPrincipal());
sql.append("' FROM SYSIBM.SYSDUMMY1");Statement stmt = conn.createStatement();
stmt.execute(sql.toString());
return super.doConnectionCleanup(conn);
}

组态

  1. 编译并震撼DataStoreHepler之后,将jar放入WAS安装的/lib文件夹中。
  2. 登录到WAS管理控制台。
  3. 在DataSource的配置页面中,选择指定用户定义的数据存储帮助器 ,然后提供DataStoreHelper类的完整包和类名,如图2所示。
    图2.指定一个定制的DataSourceHelper类
  4. 保存设置并重新启动WebSphere Application Server。 DataStore帮助程序配置已完成并可以使用。

结果

在本文中,通过打开两个浏览器窗口对配置进行了测试,并且该应用程序使用了两个不同的用户marcsven登录 。 应用程序本身通过技术用户连接到数据库,因为在大多数情况下,通常不建议使用实例所有者将应用程序连接到数据库。 然后,应用程序查询一个敏感表。 从图3中可以看到,所有查询都来自使用相同技术用户的同一数据库会话(3719)。

图3. Guardium活动日志,将前端用户分配给数据库查询

另外,请注意,前端/应用程序用户已在“ 事件用户名”列中明确标记,并为其分配了在其(应用程序)会话中执行的语句。 任务完成。

可能的扩展

由于针对SYSIBM.SYSDUMMY1发出了虚拟选择,因此正在传输到数据库的当前元数据适用于DB2数据库系统。 对于其他数据库系统,必须修改此语句以反映各个DBMS随附的虚拟表。 示例包括以下内容。

  1. DB2:从SYSIBM.SYSDUMMY1中选择“ GuardAppEvent:Start”,“ GuardAppEventUserName:[插入用户名]”
  2. Oracle:从DUAL中选择“ GuardAppEvent:Start”,“ GuardAppEventUserName:[插入用户名]”
  3. MS-SQL:SELECT'GuardAppEvent:Start','GuardAppEventUserName:[插入用户名]'
  4. PostgreSQL:SELECT'GuardAppEvent:Start','GuardAppEventUserName:[插入用户名]'

替代解决方案

您可以使用以下替代解决方案来应对这一挑战。

  • 应用程序日志记录。
  • 重新认证/可信上下文。
  • 日志收集和基于时间戳的合并。

应用日志

由于该应用程序对所有对应用程序的访问进行身份验证和授权,因此看来该应用程序本身将是监视和记录所有数据访问的明智之地。

但是,这种方法有几个缺点。 首先,应用程序日志记录必须保持一致。 例如,如果在开发期间日志记录需求发生变化,或者如果开发意外地省略了日志记录过程,则生成的日志将没有太大用处。 同样,准确记录需要审核的内容也不是一件容易的事,因为每个记录的数据库访问都需要包括应用程序用户,并且应用程序需要自行确定哪些数据库访问需要审核。

其次,将数据库活动监视直接留给数据库服务器上的专用解决方案还有一个好处,即在应用程序外部进行的访问(例如通过特权用户进行的控制台访问或通过JDBC或ODBC桥的访问)仍将由这些访问者进行监视。基于代理的解决方案。 大多数法规遵从性要求使用一种全面的审计解决方案来监视所有数据库访问的100%。

重新认证和可信上下文

当前的数据库系统支持用于设置数据库连接的有效所有者的机制。 使用DB2,开发人员可以选择重新认证连接(这通常比打开新连接更有效),或者利用所谓的可信上下文(例如数据库信任(先前)连接的能力)来进行选择。所有者来认证其他用户并用该其他用户替换自己。

两种方法都将满足数据库活动应可追溯到特定用户的要求,因为它们是特定于供应商的,并且通常会引起额外的管理和配置。 即使对于较小的应用程序,这通常也不可行。

日志收集和基于时间戳的合并

此方法旨在通过比较时间戳合并来自不同来源(例如数据库和应用程序服务器)的活动。

由于这只能是一种启发式方法,因此它本质上将无法以100%的置信度匹配源。 因此,本文将不进一步阐述其优缺点,因为它对于前面概述的严格合规方案不是可行的方法。

针对不同方法概述的缺点需要另一种方法,该方法专门针对合规性方案而量身定制,例如,每笔交易将应用程序用户作为元数据传输到数据库。

该元数据被数据库忽略,并且不影响数据库管理系统或应用程序服务器上的数据库连接池。 但是,这是由数据库活动监视系统(例如InfoSphere Guardium数据库活动监视器)监视的。

结论

本文为您提供了一种用于WebSphere Application Server应用程序的通用方法,该方法使您能够启用数据库活动监视解决方案(例如InfoSphere Guardium),从而可靠地将应用程序用户分配给数据库活动,而无需更改各个应用程序。


翻译自: https://www.ibm.com/developerworks/data/library/techarticle/dm-1208monitordbactivity/index.html

使用Guardium和WebSphere Application Server监视应用程序用户的数据库活动相关推荐

  1. 为WebSphere Application Server开发企业OSGi应用程序

    与软件开发相关的绝大多数成本与新应用程序的初始设计,开发和测试无关-尽管这些成本可能很高-但与此后应用程序的维护和发展无关. 通过仅通过定义明确的接口访问的一致,版本化,可重用的模块设计和构建应用程序 ...

  2. WebSphere Application Server性能调整工具包

    IBM已发布了WebSphere Application Server性能调整工具包 ,该工具包具有从Eclipse工作区*监视多个 WebSphere Application Server的功能. ...

  3. IBM WebSphere Application Server 诊断和调优

    近段时间,我们项目中用到的WebSphere应用服务器(WAS),但在客户的production环境下极不稳定,经常宕机.给客户造成非常不好的影响,同时,也给项目组很大压力.为此,我们花了近一个月时间 ...

  4. WebSphere Application Server v6中的问题诊断以及日志策略

    WebSphere Application Server 是一个基于 Java 的 Web 应用程序服务器,它构建在开放标准的基础之上,能帮助您部署与管理从简单的 Web 站点到强大的电子商务解决方案 ...

  5. WebSphere Application Server 5.0在Linux平台上中文界面乱码问题的解决

    第一部分:问题描述 当WebSphere Application Server(以下简称为WAS)安装到中文Linux平台时,经常出现中文被显示为方块的情况,如下图所示: 图 1 应用程序组装工具乱码 ...

  6. websphere application server的垃圾清理

    websphere application server用的时间久了,启动的时候就会很慢.清理一下垃圾文件就可以了.D:\Program Files\IBM\WID61\pf\wps\wstempD: ...

  7. 在Intellij IDEA里面配置Tomcat和Websphere Application Server

    1, Tomcat 在Edit Configuration里面选择Tomcat Server --> Local, 配置如下 添加Artifact带有exploded的话就可以实时更新war包里 ...

  8. 安装WebSphere Application Server

    2 WebSphere Application Server 2.1 安装WebSphere Application Server 2.1.1 使用imcl安装WebSphere Applicatio ...

  9. IBM WebSphere Application Server与IBM Java V8官方帮助文档资源汇总

    对于从事To C领域的工作小伙伴来说,日常使用的可能就是Oracle的Java和Tomcat,然而对于从事To B行业,尤其是银行业的小伙伴来说(笔者目前从事To B行业),可能在开发完项目以后,在客 ...

最新文章

  1. java继承详解加练习题
  2. 064_html音频
  3. vim设置显示行号,vim跳转到文件头,文件尾
  4. 2019年湘潭大学程序设计竞赛(重现赛)F.Truthman or Fakeman(并查集)
  5. 临汾移动搜索引擎推广_竞价信息流移动搜索推广分析!
  6. springboot 上传文件_基于SpringBoot的文件上传
  7. java listutils_Java的list自定义工具类ListUtils
  8. 2021年母婴行业洞察报告
  9. 查询服务器硬件配置的命令
  10. stm8单片机内部存储EEPROM字节读写实例解析
  11. Cytoscape.js 学习
  12. java实现倒计时_Java实现倒计时代码
  13. chrome绿色版浏览器
  14. python中class 'int'什么意思_#python3type(1)class,'int'为什么和python核心编程里的不一样?...
  15. 解除360对默认浏览器的检测与修改
  16. 软考A计划-试题模拟含答案解析-卷三
  17. 洛谷P1365 WJMZBMR打osu! / Easy——期望DP
  18. iOS设备屏幕分辨率分布
  19. 史上最全的Waymo自动驾驶出租车体验来了!
  20. 共享单车登录显示服务器未响应,ofo共享单车不能登陆使用结算怎么回事 如何解决不能登陆使用结算的问题...

热门文章

  1. Qt QDcokWidget 最大化
  2. java信徒齐(七)步走
  3. 2022年各大高校最新博士薪资汇总~
  4. 《教学设计》考试内容
  5. 多方面看IP地址与常见的端口号~华山论剑
  6. 虚拟机无法启用 虚拟化引擎 Inter VT-x/EPT,mumu模拟器报错Hyper-v 开启,无法启动模拟器
  7. C++分糖果-真题红太阳幼儿园有n个小朋友,你是其中之一。保证n≥2。有一天你在幼儿园的后花园里发现无穷多颗糖果,你打算拿一些糖果回去分给幼儿园的小朋友们。由于你只是个平平无奇的幼儿园小朋友,
  8. Otter.ai创始人Sam Liang:智能记录你的生活对话
  9. 2012年读书感悟2013读书计划
  10. unity虚拟仿真PC端需要掌握的技术