我的liquibase变更日志中也定义了grant语句。我还需要用户和主机是可变的,所以我使用changelog参数定义如下:
<changeSet id="exampleuser_grants_tbl_example" author="me">
<preConditions onFail="MARK_RAN">
<tableExists tableName="tbl_example" />
</preConditions>
<sql>
GRANT INSERT, UPDATE, DELETE
ON `tbl_example` TO '${grants.user}'@'${grants.host}';
</sql>
</changeSet>
然后,我可以在命令行中运行liquibase时定义参数:
-拨款。user=exampleuser-Dgrants.host=示例主机
但是,当我忘记定义这些参数时,它不会给出任何错误。
在GRANT语句中使用MySQL之前,是否不需要用户存在?
我可以添加一个前提条件来检查用户是否存在,但这并不能完全解决问题,因为主机参数可能没有设置。
在使用变更日志文件之前,有没有办法强制设置参数?
编辑
好的,所以我修复了它,感谢下面的答案:
在我添加的更改日志文件的顶部
<preConditions>
<changeLogPropertyDefined property="grants.user" />
<changeLogPropertyDefined property="grants.host" />
</preConditions>
现在,如果未设置主机参数,则会出现以下错误:
1个前提条件失败
…/changelog主机。xml:Changelog属性'授权。主机“”不是
设置
至于为什么我的MySQL服务器在为名为${grants.user}@${grands.host}的用户创建授权时没有生成任何错误的问题:
http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_auto_create_user