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

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

  •  
  •   stillyu · 71 天前 · 1717 次点击
    这是一个创建于 71 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

    @MeteorCat 感谢提醒,这个还真的没想到,不过密码不是明文,也不用处理了吧
        8
    Lax   70 天前
    @stillyu 就怕会有“DBA”直接操作数据库,就很难说清了。
    利用 ORM 上的 hook,直接写日志文件就好了,(万一)补数据也更可行(当数据库挂掉的时候,操作往数据库写会失败,导致故障期间的日志不可查)。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2289 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 05:25 · PVG 13:25 · LAX 21:25 · JFK 00:25
    ♥ Do have faith in what you're doing.