V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
naix1573
V2EX  ›  问与答

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

  •  
  •   naix1573 · 2018-06-14 09:55:30 +08:00 · 3501 次点击
    这是一个创建于 2114 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言  ·  2018-06-14 15:18:59 +08:00
    不过可能是我的表述有问题,其实我的意思是把用户在前台页面涉及到数据库的操作记录下来,比如用户在前台点击查询,或者对数据进行编辑之类的。
    15 条回复    2018-06-14 21:09:02 +08:00
    a7a2
        1
    a7a2  
       2018-06-14 10:00:19 +08:00   ❤️ 1
    可使用时序数据库存放日志,很高效,不怕多。

    执行 sql 放到 mq 中,消费的时候记录即可,日志 sql 并不与一般 sql 竞争,闲时执行
    naix1573
        2
    naix1573  
    OP
       2018-06-14 11:19:26 +08:00
    @a7a2 谢谢 我水平有限,现在只能是在执行增删改的时候往数据库存一条 sql 语句,把用户名执行操作存起来了
    letitbesqzr
        3
    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
        4
    Aliencn  
       2018-06-14 11:46:23 +08:00   ❤️ 1
    给你个骚操作。
    把你要记录的信息用恒等式的写法写到 sql 语句的 where 条件里,例如 where user_a = user_a and 20180614=20180614

    然后让数据库把所有查询记录到日志里,需要查的时候过滤一下就行了。
    onion83
        5
    onion83  
       2018-06-14 11:59:51 +08:00   ❤️ 3
    比 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
        6
    jeffcott  
       2018-06-14 13:09:32 +08:00
    我现在也在写这个功能,不过我是写 php 的...
    noNOno
        7
    noNOno  
       2018-06-14 13:44:09 +08:00
    mysql 的话可以解析 binlog
    naix1573
        8
    naix1573  
    OP
       2018-06-14 14:13:14 +08:00
    V 站果然大佬多,骚操作玩起来一个比一个溜。
    naix1573
        9
    naix1573  
    OP
       2018-06-14 14:21:21 +08:00
    @Aliencn 这个好像很秀的样子。
    请问把所有查询或编辑操作存到数据库是怎么做到的?我只查到数据库本身的日志。
    naix1573
        10
    naix1573  
    OP
       2018-06-14 14:22:24 +08:00
    @onion83 请问这个是 mysql 独有的吗?项目数据库是 ms sqlserver。
    Aliencn
        11
    Aliencn  
       2018-06-14 14:45:31 +08:00
    @naix1573 SQL Server 的话你搜索一下“ SQL Server 审计”吧
    naix1573
        12
    naix1573  
    OP
       2018-06-14 15:16:32 +08:00
    @Aliencn 哦~ 我想我明白这个你的意思了,这个功能确实很棒。
    不过可能是我的表述有问题,其实我的意思是把用户在前台页面涉及到数据库的操作记录下来,比如用户在前台点击查询,或者对数据进行编辑之类的
    onion83
        13
    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
        14
    whisperer  
       2018-06-14 18:13:58 +08:00
    就是数据库审计
    [数据库审计 - 阿里云]( https://www.aliyun.com/product/dbaudit)
    wps353
        15
    wps353  
       2018-06-14 21:09:02 +08:00 via Android
    消费 binlog
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1135 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:37 · PVG 02:37 · LAX 11:37 · JFK 14:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.