当前位置: 首页 > 知识库问答 >
问题:

高效的审计方法

梁骞仕
2023-03-14

我正在尝试为我的spring boot应用程序实现一个审计层。到目前为止,我尝试了两种方法。

1) 创建了1个审核表,其中包含字段user\u name、table\u name、column\u name、old\u value、new\u value、uuid、event\u type。

每当保存任何更改时,填充审计实体并将其保存。

>

易于管理,因为只有一个审计表

>

  • 有时,它涉及太多从业务实体到审计实体的映射

    必须从db获取旧值以填充审计实体

    2) 用于审计的Javer

    >

  • 审计实体的自动创建和更新

    要管理的表数减少

    不需要旧值检索

    • 由于交易量大,花费的时间太多

    处理20列(字段)的表(实体)中的10行,

    使用方法1所用时间:24328 ms=

    使用方法2所用时间:311292毫秒=

    3) 没有使用Hibernate envers,因为创建的表数量会很高

    有没有人能提出一个更好的审计方法来考虑以上的利弊呢。我们的目标是,,

    >

  • 要管理的表数目较少

    响应时间更短

    模块化审计层,即自动化多于手动

    每个表中有10到25列的计数。

  • 共有3个答案

    太叔高义
    2023-03-14

    显然,你没有正确使用Javers,你的数据不可靠。也许您正在为每个提交创建新的Javers实例?

    Javers是最快的审计工具。Javers只需为更改的对象创建快照并将其插入数据库。每个快照一个数据库记录/文档。

    因此,如果您更改一个对象,通常Javers会执行一次数据库读取以获取其先前的快照,并执行一次数据库插入以写入新快照。

    沈英勋
    2023-03-14

    我将采取这种做法:

    1) 在低优先级的后台线程中进行审核

    2) 使用带注释的SpringAOP将BU与审计分开

    3)每次插入或更新一个实体时,用UID将完整的jsonize对象写入NOSQL数据库文档中;旧值也没有用,因为你可以在运行简单查询的实体上回溯更改

    冯通
    2023-03-14

    如您所说,创建审计跟踪的常见方法是应用程序端库,如envers或Javers。这些是挂在持久性库中的,它们会在数据表中维护特定的列(“createdBy”、“lastUpated”等)。),和/或将早期的记录版本复制到某种形式的历史表中。

    不过,这也有一些缺点:

    >

  • 作为联机事务处理的一部分,在历史表中写入记录会增加事务中执行语句的数量-

    支持批量更新和删除

    无法跟踪直接在数据库中进行的更改

    1. 捕获更改数据
    2. 将更改数据转换为目标数据库支持的上传格式
    3. 将数据上载到目标数据库

    另一种技术是数据库触发器。无论是从应用程序还是数据库本身发出,它们都不会错过任何操作。批量语句也将被处理。基于触发器的CDC的另一个优点是,应用程序不知道您已经添加了整个审计层。缺点是,作为OLTP事务的一部分执行触发器时,仍然存在延迟增加的问题。

    触发器的替代解决方案(此处为Postgresql):使用逻辑复制将数据库更改(解码的WAL消息)通过WAL从主服务器传输到从服务器,并启用审核触发器以捕获对从服务器上复制表的更改。

    当利用事务日志作为审核源,并使用变更数据捕获来检索变更信息并将其发送到消息代理或基于持久日志(如Apache Kafka)时,上述问题不存在。通常认为更改数据捕获的最佳方法,但不是最简单的设置解决方案。

    异步运行时,CDC进程可以提取更改数据,而不会影响联机事务处理。

    每当发生数据更改时,都会将一个条目添加到事务日志中。

    大容量操作中更新或删除的每个记录都有一个日志条目,因此可以为每个记录生成一个更改事件。

    问题仍然是CDC如何访问元数据,如执行数据更改的应用程序用户、他们的IP地址、跟踪范围id或任何类型的correlationID。

    一种方法是使用一个单独的表来存储元数据。应用程序可以为每个事务在此表中存储一条记录,其中包含特定的transactionId。数据更改事件将包含链接到更改的transactionID,因此可以关联数据更改事件和元数据记录。

  •  类似资料:
    • 我的项目中有几个类是由Hibernate处理的,有些是由Envers审核的,有些则不是。现在,当我试图保存某个未经审计的实体时,我得到了以下信息: 有些人可能认为我的数据库中没有审计表,但是Envers甚至不应该试图寻找这个表,因为实体没有被审计。我的类看起来像这样: 因此,每个类都包含一个子类列表,其中包含对其父类的引用。这些类都没有用-注释标记,但它们引用了一些已审核的实体。然而,每个引用都用

    • 一旦Spring Security发挥作用,Spring Boot Actuator就有一个灵活的审计框架,可以发布事件(默认情况下,“身份验证成功”,“失败”和“访问被拒绝”例外)。 此功能对于报告和基于身份验证失败实施锁定策略非常有用。 要自定义已发布的安全事件,您可以提供自己的AbstractAuthenticationAuditListener和AbstractAuthorizationA

    • 不是每个问题都有技术性的答案。我曾经诊断过一台服务器,它对 ping、SSH 或控制台连接均无响应。 我不能确定这到底是硬件故障还是软件故障。 当我电话询问主机所在位置的站点客服时,奥秘最终被揭开了。他们告诉我: 先期抵达的两名不明身份的男子,进入大厦直奔服务器机房,拔下了机器,并轻易地将机器带出了大厦。 后来我们发现,在机房所在的地区(Missouri,M.O.)曾发生过一连串的电脑失窃案。 从

    • 问题内容: 想象一下设有 分支机构的 教育中心。该教育中心的 课程 对所有分支机构都是通用的。 分行 *管理员生成的每个课程的每个分支中的 *房间 。例如,管理员输入数学课程的房间数。系统生成3个房间。换句话说,它们受到计数的限制。 每个房间每天有5个可用的教学时间。换句话说,每个教学小时(共5个)将有1个不同的学生组。 学生 -也按分支分组。每个学生都喜欢按周计划()上中学。 一周的1、3、5天

    • 日志审计支持查看平台上的所有操作日志以及公有云的操作日志等。 操作日志 操作日志用于显示系统中所有操作信息。 云上日志 将公有云操作日志同步到云联壹云平台上统一查看。

    • 该账号及其子账号的所有操作记录和登录日志,便于在发生问题时用户及时查看。 操作日志 登录历史 操作日志 记录用户及其子用户在页面的所有操作行为,可对操作行为进行追溯,并按照功能模块、操作行为等进行查询。 登录历史 记录用户及其子用户的所有登录行为,包括登录时间、登录IP、用户名、浏览器版本、登录方式等。