【问题标题】:Keeping a log of user changes in web application在 Web 应用程序中记录用户更改
【发布时间】:2013-08-22 05:00:32
【问题描述】:
在我的 Web 应用程序 (java/tomcat/struts/mysql) 中记录用户更改的最佳方式是什么?我提供帐户,每个帐户都有多个用户。我希望帐户管理员能够在任何给定时间查看谁做了什么。我希望能够访问所有这些。首先,我需要一种方法来了解哪些字段已更改,然后我需要将每个帐户的更改记录在他们可以看到的地方。显然,我不想减慢应用程序的速度。我在此站点上阅读了一个答案,建议保留数据库日志-在发送每个查询后查询数据库以进行更改。不知道该怎么做。
【问题讨论】:
标签:
java
mysql
tomcat
struts-1
【解决方案1】:
这取决于您的网络应用程序的性质。假设您的 Web 应用程序是一个电子商务系统,它允许用户添加新产品或更新现有产品。当用户执行特定操作(例如添加新产品)时,基本目标是捕获他的用户名、操作和时间戳。更新产品也是如此,您可能希望跟踪他更新了哪些值、旧值是什么以及他何时更改。
要做到这一点,首先你需要
-
创建审核表
-
每当执行一些更改/操作时,创建一个日志记录机制。
- 执行此操作的方法很少,您可以通过应用程序执行此操作,也可以将所有内容留给数据库触发器。我建议使用触发器来检测数据库中的任何创建/更新/删除事件,并要求触发器捕获详细信息并写入审计表。我认为这是最干净且维护更少的方式。但是,如果您想使用应用程序进行日志记录,则必须更改代码,创建新方法以将详细信息捕获到您的操作类中的审核表中。
更多关于 MYSQL 触发器的信息here
【解决方案2】:
我正在寻找一种类似的“方法”来记录我的网络应用程序中的交易和其他内容。就在浏览谷歌时,我发现了这个链接:
https://www.owasp.org/index.php/Logging_Cheat_Sheet 讲述两种可能的日志记录方式:在数据库或文件系统上的某些日志文件...
使用文件系统时,最好使用单独的
分区比操作系统,其他应用程序使用的分区
文件和用户生成的内容对于基于文件的日志,应用严格
关于哪些用户可以访问目录的权限,以及
目录中文件的权限 在 Web 应用程序中,
日志不应暴露在 Web 可访问的位置,如果这样做了
所以,应该限制访问并使用纯文本配置
MIME 类型(不是 HTML) 使用数据库时,最好
使用仅用于写入日志的单独数据库帐户
数据,它具有非常严格的数据库、表、函数和
命令权限 使用标准格式而不是安全协议
记录并将事件数据或日志文件发送到其他系统,例如常见的
日志文件系统 (CLFS)、基于 syslog 的通用事件格式 (CEF)、
未来可能会出现共同事件表达(CEE);标准格式
促进与集中式日志记录服务的集成
他们很好地解释了我们可以记录的可能方式,应该记录什么,也应该避免什么。
希望对你有用。