可以记录数据库的操作记录当作业务日志吗?

2019-09-27 04:43:02 +08:00
 stillyu

帮朋友做的一个约课系统,后端使用了 typeorm,利用 typeorm 的钩子函数,将每次的数据操作(增、删、改)都再保存到一个 log 表里面。

log 表主要就四个字段:操作用户、操作类型(增、删、改)、原数据(新增的话为空)、修改后的数据(删除的话为空)。

这样以后业务上有什么问题的话,可以查表撕逼。

但感觉这个实现很不优雅,查了一下好像也没有这样的做法。

本人后端小白,请大神指点一下。

2676 次点击
所在节点    数据库
8 条回复
ech0x
2019-09-27 06:29:23 +08:00
为什么不用 trigger ?
raynor2011
2019-09-27 07:16:54 +08:00
一般来说是记用户的行为日志,你这 sql 也体现不了用户的行为啊,可能 sql 本身就是错的
Lax
2019-09-27 07:21:08 +08:00
用这个不好撕,如楼上说的 sql 本身就是错的。
“明明选了 A 课,怎么变成 B 课了?你看这日志里是 B,也说明你程序给弄错啦!”
tomczhen
2019-09-27 07:24:34 +08:00
数据库自带 CDC,没有 CDC 就通过 binlog 来做。
MeteorCat
2019-09-27 08:24:29 +08:00
没啥问题,不过注意一些敏感数据处理下,比如手机号要改成 1340000****这样,还有密码之类的啥的
yidinghe
2019-09-27 08:36:06 +08:00
如果用户做了操作但是没有对应的数据库操作呢,比如用户做了查询但结果是从缓存得到的。
stillyu
2019-09-27 11:27:36 +08:00
@ech0x typeorm 的钩子函数,就是一个 trigger 吧

@tomczhen 这个好像比较难和当前登录用户结合起来吧

@raynor2011 @Lax 这种错误,在测试的时候就能测出来,就算没测出来,上线了也很快就能发现,我担心业务出错的地方是,会员卡的剩余课程数错了,因为后台的续费做的比较野蛮,可以直接改剩余次数。

@MeteorCat 感谢提醒,这个还真的没想到,不过密码不是明文,也不用处理了吧
Lax
2019-09-27 15:20:28 +08:00
@stillyu 就怕会有“DBA”直接操作数据库,就很难说清了。
利用 ORM 上的 hook,直接写日志文件就好了,(万一)补数据也更可行(当数据库挂掉的时候,操作往数据库写会失败,导致故障期间的日志不可查)。

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

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

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

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

© 2021 V2EX