可以记录数据库的操作记录当作业务日志吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
stillyu
V2EX    数据库

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

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

    帮朋友做的一个约课系统,后端使用了 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 来做。
    td width="10" valign="top">
    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     Solana     2831 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 13:56 PVG 21:56 LAX 05:56 JFK 08:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86