naix1573
V2EX  ›  问与答

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

  •  
  •   naix1573 · Jun 14, 2018 · 4138 views
    This topic created in 2984 days ago, the information mentioned may be changed or developed.

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

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

    执行 sql 放到 mq 中,消费的时候记录即可,日志 sql 并不与一般 sql 竞争,闲时执行
    naix1573
        2
    naix1573  
    OP
       Jun 14, 2018
    @a7a2 谢谢 我水平有限,现在只能是在执行增删改的时候往数据库存一条 sql 语句,把用户名执行操作存起来了
    letitbesqzr
        3
    letitbesqzr  
       Jun 14, 2018
    orm 框架呢,如果使用了 hibernate 可以试试 Hibernate Envers https://docs.jboss.org/envers/docs/ 。我们用的 hibernate-jpa 实现,也是使用了 Hibernate Envers 做了增删改记录。

    日志数据存在 InfluxDB
    Aliencn
        4
    Aliencn  
       Jun 14, 2018   ❤️ 1
    给你个骚操作。
    把你要记录的信息用恒等式的写法写到 sql 语句的 where 条件里,例如 where user_a = user_a and 20180614=20180614

    然后让数据库把所有查询记录到日志里,需要查的时候过滤一下就行了。
    onion83
        5
    onion83  
       Jun 14, 2018   ❤️ 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  
       Jun 14, 2018
    我现在也在写这个功能,不过我是写 php 的...
    noNOno
        7
    noNOno  
       Jun 14, 2018
    mysql 的话可以解析 binlog
    naix1573
        8
    naix1573  
    OP
       Jun 14, 2018
    V 站果然大佬多,骚操作玩起来一个比一个溜。
    naix1573
        9
    naix1573  
    OP
       Jun 14, 2018
    @Aliencn 这个好像很秀的样子。
    请问把所有查询或编辑操作存到数据库是怎么做到的?我只查到数据库本身的日志。
    naix1573
        10
    naix1573  
    OP
       Jun 14, 2018
    @onion83 请问这个是 mysql 独有的吗?项目数据库是 ms sqlserver。
    Aliencn
        11
    Aliencn  
       Jun 14, 2018
    @naix1573 SQL Server 的话你搜索一下“ SQL Server 审计”吧
    naix1573
        12
    naix1573  
    OP
       Jun 14, 2018
    @Aliencn 哦~ 我想我明白这个你的意思了,这个功能确实很棒。
    不过可能是我的表述有问题,其实我的意思是把用户在前台页面涉及到数据库的操作记录下来,比如用户在前台点击查询,或者对数据进行编辑之类的
    onion83
        13
    onion83  
       Jun 14, 2018
    @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  
       Jun 14, 2018
    就是数据库审计
    [数据库审计 - 阿里云]( https://www.aliyun.com/product/dbaudit)
    wps353
        15
    wps353  
       Jun 14, 2018 via Android
    消费 binlog
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2853 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 14:43 · PVG 22:43 · LAX 07:43 · JFK 10:43
    ♥ Do have faith in what you're doing.