V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
stillyu
V2EX  ›  数据库

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

  •  
  •   stillyu · 2019-09-27 04:43:02 +08:00 · 2562 次点击
    这是一个创建于 1645 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

    @MeteorCat 感谢提醒,这个还真的没想到,不过密码不是明文,也不用处理了吧
    Lax
        8
    Lax  
       2019-09-27 15:20:28 +08:00
    @stillyu 就怕会有“DBA”直接操作数据库,就很难说清了。
    利用 ORM 上的 hook,直接写日志文件就好了,(万一)补数据也更可行(当数据库挂掉的时候,操作往数据库写会失败,导致故障期间的日志不可查)。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   943 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:29 · PVG 05:29 · LAX 14:29 · JFK 17:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.