Spring boot JHipster H2 DB非管理员用户
我试图用一个非管理员用户运行我的spring boot/liquibase/H2数据库,但在理解如何运行时遇到了一些问题 首先,我看到了一些信息,并试图通过这种方式设置我的application.ymlSpring boot JHipster H2 DB非管理员用户,spring-boot,jhipster,h2,liquibase,Spring Boot,Jhipster,H2,Liquibase,我试图用一个非管理员用户运行我的spring boot/liquibase/H2数据库,但在理解如何运行时遇到了一些问题 首先,我看到了一些信息,并试图通过这种方式设置我的application.yml 数据源: 类型:com.zaxxer.hikari.HikariDataSource url:jdbc:h2:mem:test 用户名:USERLIMITED 密码:user_limited_密码 液化: 上下文:dev,faker 用户:LiquibaSeuser 密码:liquibsepas
数据源:
类型:com.zaxxer.hikari.HikariDataSource
url:jdbc:h2:mem:test
用户名:USERLIMITED
密码:user_limited_密码
液化:
上下文:dev,faker
用户:LiquibaSeuser
密码:liquibsepassword
还要将这些sql语句放在changelog中运行,以便创建我想要的用户并提供适当的访问控制:
删除存在的用户USERLIMITED
创建用户USERLIMITED密码“USER\u limited\u PASSWORD”
将应用程序上的所有内容授予USERLIMITED
尝试启动应用程序时,出现以下错误:
2020-10-21 14:41:18.532调试8704---[restartedMain]c.c.config.Liquibase配置:配置Liquibase
2020-10-21 14:41:18.617警告8704---[test-task-1]i.g.j.c.liquibase.asynchronicspringluibase:异步启动liquibase时,您的数据库可能不可用
启动时准备好!
2020-10-21 14:41:20.226错误8704---[restartedMain]com.zaxxer.hikari.pool.HikariPool:hikari-池初始化期间出现异常。
org.h2.jdbc.jdbcsqlvalidauthorizationspecexception:用户名或密码错误[28000-200]
有趣的是,如果我将LiquibaseConfiguration
文件更改为使用同步DB配置而不是异步配置,那么默认情况下我不会得到错误
//如果您不希望Liquibase异步启动,请用以下内容替代:
SpringLiquibase liquibase=SpringLiquibaseUtil.createSpringLiquibase(liquibasSource.getIfAvailable(),LiquibasProperties,dataSource.getIfUnique(),dataSourceProperties);
//SpringLiquibase-liquibase=SpringLiquibaseUtil.createAsynchSpringLiquibase(this.env,executor,LiquibasAtasource.getIfAvailable(),LiquibasProperties,dataSource.getIfUnique(),dataSourceProperties);
然后,如果我转到H2控制台并执行查询以查看我的用户,我只有一个管理员用户(应该是非管理员)
尝试以我在yml中设置的liquibase用户身份登录
用户:LiquibaSeuser
密码:liquibsepassword
不存在,我得到了错误的用户名或密码[28000-200]
错误
这让我相信,这与应用程序如何启动以及异步任务执行优先级有关
非常感谢您的帮助 如果您认为异步liquibase是原因,您是否尝试过禁用它,如LiquibaseConfiguration.java中所述?是的,我当前正在同步运行它,并且在生成时没有收到错误,但它不会同时创建两个帐户。我只有一个管理员帐户“USERLIMITED”,它是一个管理员,而liquibase帐户不存在。我认为这是一个事件顺序问题,即使是同步加载,但我可能在这里的设置中遗漏了一些东西。您可以在jdbc URL中指定的初始化脚本中创建您的用户,请参见旁注,使用与prod和testcontainers中相同的数据库替换h2会更容易