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

Hibernate Envers审计未经审计的实体

赵英范
2023-03-14

我的项目中有几个类是由Hibernate处理的,有些是由Envers审核的,有些则不是。现在,当我试图保存某个未经审计的实体时,我得到了以下信息:

java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such table: audit_etc_etc)

有些人可能认为我的数据库中没有审计表,但是Envers甚至不应该试图寻找这个表,因为实体没有被审计。我的类看起来像这样:

@Entity
class A {
    /* some 'normal' attributes here */

    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
    AuditedEntity e;

    List<B> listOfBs;
}

@Entity
class B {
    /* more 'normal' attributes here */

    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
    AuditedEntity e; // and some more references to audited entities

    A anA;

    List<C> listOfCs;
}

@Entity
class C {
    /* more 'normal' attributes here */

    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
    AuditedEntity e; // and some more references to audited entities

    B anB;
}

因此,每个类都包含一个子类列表,其中包含对其父类的引用。这些类都没有用@Audited-注释标记,但它们引用了一些已审核的实体。然而,每个引用都用@Audited(targetAuditMode=RelationTargetAuditModel.NOT_Audited)-注释标记。

我在hibernate.cfg.xml文件中也没有发现什么异常,只有连接细节、envers选项、类映射和其他一些hibernate选项。

这里有什么问题,我如何解决保存时出现的问题?

(注意:我目前只对类A和B进行了测试,但我假设尝试保存C的实例会引发相同的异常)

更新:< br >当我尝试保存B实例时,启用< code>show_sql会显示以下信息:

Hibernate: update table_b set all_attributes=? where idB=?
Hibernate: insert into audit_description (timestamp, description) values (?, ?)
Hibernate: insert into audit_table_b (revision_type, attributes, moreAttributes, revision) values (?, ?, ?, ?)

共有3个答案

胡意致
2023-03-14

事实证明,@Audited(…)会导致Envers审计实体,从而尝试写入不存在的审计表。将@NotAudited添加到每个@Audited(..)中,为我解决了这个问题,也许您根本不需要这两个注释。

赵雅懿
2023-03-14

问题在于您放置了< code>@Audited注释来标记非审计关系。您应该将这些注释放在实体< code>E中与< code>A 、< code>B和< code>C的关系上,而不是放在实体< code>A 、< code>B和< code>C中。

换句话说:

@Entity
@Audited
public class E {
  @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
  private A a;
  @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
  private B b;
  @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)     
  private C c;
}

希望这能有所帮助。

裴俊雅
2023-03-14

问题是,您将yout属性标记为@Audited,以便envers尝试将它们作为它所属的类和intself类的一部分进行审核。您应该只使用@Audited标记您的类声明以及其中要审核的属性:

@Audited
@Entity
public class AuditedEntity{
  ...
}

和未审核的类

@Entity
class A {
    AuditedEntity e;
    ...
}

如果您在其他受审核实体中使用已审核实体:

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

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

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

  • 有许多选项可用于在审计扫描期间配置Burp Scanner的行为。这些可以在Burp启动扫描时即时配置,或是在 Burp 的配置库中修改其配置。 优化审计 通过这些设置,您可以调整审计的整体逻辑行为,来达到针对目标的一个更好的审计效果。 优化审计可以使用如下配置: 审计速度 - 此选项确定在检查漏洞时某些审计的深度。 快速(Fast)会进行较少的请求,检查某些漏洞时也只是做一个基础审计。 深入(T

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

  • Kubernetes 审计(Audit)提供了安全相关的时序操作记录,支持日志和 webhook 两种格式,并可以通过审计策略自定义事件类型。 审计日志 通过配置 kube-apiserver 的下列参数开启审计日志 audit-log-path:审计日志路径 audit-log-maxage:旧日志最长保留天数 audit-log-maxbackup:旧日志文件最多保留个数 audit-log-