Mysql 要设置的强制液化更改日志参数

Mysql 要设置的强制液化更改日志参数,mysql,liquibase,Mysql,Liquibase,我的liquibase变更日志中也定义了grant语句。我还需要将用户和主机设置为变量,因此我使用changelog参数将其定义为: <changeSet id="exampleuser_grants_tbl_example" author="me"> <preConditions onFail="MARK_RAN"> <tableExists tableName="tbl_example" />

我的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>

授权插入、更新、删除
关于“tbl_示例”到“${grants.user}”@${grants.host}”;
然后,我可以在命令行中运行liquibase时定义参数:

-Dgrants.user=exampleuser-Dgrants.host=examplehost

但当我忘记定义这些参数时,它不会给出任何错误。 MySQL在GRANT语句中使用用户之前不需要用户存在吗? 我可以添加一个先决条件来检查用户是否存在,但这并不能完全解决问题,因为主机参数可能没有设置

在使用变更日志文件之前,有没有办法强制设置参数

编辑 好的,我修复了它,原因如下:

在我添加的变更日志文件的顶部

<preConditions>
    <changeLogPropertyDefined property="grants.user" />
    <changeLogPropertyDefined property="grants.host" />
</preConditions>

例如,如果未设置主机参数,则会出现以下错误:

1先决条件失败

…/changelog-master.xml:changelog属性“grants.host”不可用 设置


至于我的MySQL服务器在为名为${grants.user}@${grants.host}的用户创建授权时没有生成任何错误的问题:


看看此处定义的ChangeLogProperty。还有一个CustomPremission标记,这样您就可以在Java中实现任何自定义逻辑。

使用changelogs Premissions中定义的ChangeLogProperty实现了它,不知道我是如何发现的。谢谢