如何记录用户对数据库的增删改查操作

2018-06-14 09:55:30 +08:00
 naix1573

主要是为了对登录的用户,记录他对数据库所做的操作。 要记录用户名,执行的 sql 语句,时间等信息。保存的位置的话,数据库或者是文件都可以。 试了 log4j 把日志存到数据库,但是 debug 的话记录实在太多了,对数据库是个负担,info 又精确不到用户的操作。 项目框架是 spring MVC。

3657 次点击
所在节点    问与答
15 条回复
a7a2
2018-06-14 10:00:19 +08:00
可使用时序数据库存放日志,很高效,不怕多。

执行 sql 放到 mq 中,消费的时候记录即可,日志 sql 并不与一般 sql 竞争,闲时执行
naix1573
2018-06-14 11:19:26 +08:00
@a7a2 谢谢 我水平有限,现在只能是在执行增删改的时候往数据库存一条 sql 语句,把用户名执行操作存起来了
letitbesqzr
2018-06-14 11:26:06 +08:00
orm 框架呢,如果使用了 hibernate 可以试试 Hibernate Envers https://docs.jboss.org/envers/docs/ 。我们用的 hibernate-jpa 实现,也是使用了 Hibernate Envers 做了增删改记录。

日志数据存在 InfluxDB
Aliencn
2018-06-14 11:46:23 +08:00
给你个骚操作。
把你要记录的信息用恒等式的写法写到 sql 语句的 where 条件里,例如 where user_a = user_a and 20180614=20180614

然后让数据库把所有查询记录到日志里,需要查的时候过滤一下就行了。
onion83
2018-06-14 11:59:51 +08:00
比 4 楼更骚的操作,是用注释符嵌入水印信息? 然后统一查
Mysql_query log?

SELECT xx from oo where ff=bb; /* TIME IP USER for WAHT */

https://dev.mysql.com/doc/refman/8.0/en/comments.html
jeffcott
2018-06-14 13:09:32 +08:00
我现在也在写这个功能,不过我是写 php 的...
noNOno
2018-06-14 13:44:09 +08:00
mysql 的话可以解析 binlog
naix1573
2018-06-14 14:13:14 +08:00
V 站果然大佬多,骚操作玩起来一个比一个溜。
naix1573
2018-06-14 14:21:21 +08:00
@Aliencn 这个好像很秀的样子。
请问把所有查询或编辑操作存到数据库是怎么做到的?我只查到数据库本身的日志。
naix1573
2018-06-14 14:22:24 +08:00
@onion83 请问这个是 mysql 独有的吗?项目数据库是 ms sqlserver。
Aliencn
2018-06-14 14:45:31 +08:00
@naix1573 SQL Server 的话你搜索一下“ SQL Server 审计”吧
naix1573
2018-06-14 15:16:32 +08:00
@Aliencn 哦~ 我想我明白这个你的意思了,这个功能确实很棒。
不过可能是我的表述有问题,其实我的意思是把用户在前台页面涉及到数据库的操作记录下来,比如用户在前台点击查询,或者对数据进行编辑之类的
onion83
2018-06-14 16:35:28 +08:00
@naix1573 我没用过 sql-server,刚才查了一下 应该是用 -- 符号
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/comment-transact-sql?view=sql-server-2017

另外搜了一下 这是它们的 Profile 工具,看着是能满足查询需求的


另外,我这种方案需要对数据库操作的类进行侵入性改造,要求项目做得比较规范。对数据库查询性能倒是无损,且可以记录更多业务上的东西。
whisperer
2018-06-14 18:13:58 +08:00
就是数据库审计
[数据库审计 - 阿里云]( https://www.aliyun.com/product/dbaudit)
wps353
2018-06-14 21:09:02 +08:00
消费 binlog

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/462975

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX