【问题标题】:What minimum database privileges does spring.jpa.hibernate.ddl-auto=validate require?spring.jpa.hibernate.ddl-auto=validate 需要什么最低数据库权限?
【发布时间】:2020-06-21 14:48:43
【问题描述】:

我正在尝试将 Spring Boot 与 Oracle 数据库一起使用。在开发过程中,我们一直在使用休眠设置 spring.jpa.hibernate.ddl-auto=验证 但是现在我们正朝着生产版本迈进,我们想要锁定连接权限。 但是,即使在生产版本中,保留 hibernate validate 启动处理提供的健全性检查也会很好。

遗憾的是,当我尝试使用具有足够权限来运行 Spring Boot 应用程序的数据库连接来执行此操作时,休眠验证阶段在 bean 初始化期间失败,因为它说表丢失。 现在我知道这不是真的,所以我打赌 hibernate 使用额外的查询来验证模式并且这些查询需要额外的访问。如果我将该值设置为 none,则应用程序可以工作,但不会检查架构兼容性。如果我将 DBA 权限授予连接用户并且一切正常,包括验证。但我绝对不会在生产中的应用程序中提供这种级别的访问权限。

那么,有谁知道我可以添加到用户帐户的最低权限,以便我可以启用休眠验证?理想情况下,我只会在表上提供 SELECT、INSERT、UPDATE 和 DELETE,并在用户帐户上提供 CONNECT 权限,但这不足以启用验证。

我曾考虑在某处创建一个特殊的自动模式版本变量并在运行时对其进行验证,但它看起来很混乱。如果我能找到一个可接受的 Oracle 权限组合来启用验证步骤而无需过多打开连接,那么我更愿意使用这种方法。

我还可以在我们的持续集成服务器上定义一个特殊的作业,这样它就可以临时为一个作业启用所有数据库权限。但是我觉得这是一种大锤的方法,感觉不优雅。

感谢您的任何提示。

非常感谢, 乔纳森

【问题讨论】:

  • 我不知道;我不使用休眠。然而,只是为了鼓励你——在我看来,你选择了正确的方法。仅授予最低权限;如果事实证明您需要额外的,请稍后授予它们。另外,考虑不授予 CONNECT;它是一个预定义的角色,曾经非常流行(与 RESOURCE 一起)。如今,您宁愿逐个授予特权。而不是 CONNECT,您实际上会授予 CREATE SESSION。是的,我知道,这还不够,不,我不知道您还应该授予什么。如果您有任何错误可以分享,请分享。也许帮助会更容易
  • 该资源描述了使用 flywaydb 和 Spring Boot 的应用用户和数据用户之间的分离。 jcon.no/oracle/?p=1730

标签: oracle hibernate spring-boot hibernate-validator


【解决方案1】:

哎呀!

我将这个答案发布到我自己的问题,因为事实证明我犯了一个错误。由于我的 SQL 脚本中有一条隐藏得很好的错误消息,我实际上并没有将所有基本权限分配给表(以及其他类别,如索引)。但是我没有在应用程序中运行所有可以揭示这一点的工作流。一旦我解决了访问问题,这也为 Hibernate 验证处理步骤提供了足够的访问权限。

感谢所有查看我问题的人,答案是确保您实际上至少对 Oracle 模式中的所有内容具有读取访问权限(SELECT 特权)。 (Hibernate 在启动时检查它们,所以比我简单的手动测试更严格)。

【讨论】:

    猜你喜欢
    • 2017-10-13
    • 2020-08-02
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2012-09-06
    • 1970-01-01
    相关资源
    最近更新 更多