在 Liquibase xml 中的 sql 注入中使用环境变量

问题描述 投票:0回答:2

有人有正确的示例如何在 liquibase xml 文件中的 sql 注入中使用 env 变量吗?

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

 

    <changeSet id="customer-change-287" author="vkvsuser">
<comment>Grant permissions to secret user</comment>
<sql>
            GRANT SELECT ON TABLE email_audit TO ${app_db_user};
</sql>
<rollback>
<sql>
                REVOKE SELECT ON TABLE email_audit FROM ${app_db_user};
</sql>
</rollback>
</changeSet>

 

</databaseChangeLog>

如果我那样用我明白了

liquibase.exception.DatabaseException: Error executing SQL GRANT SELECT ON TABLE email_audit TO ${app_db_user}: ERROR: syntax error at or near "$"
liquibase
2个回答
1
投票

你做得对。这是有关 Liquibase 属性替换的文档:https://docs.liquibase.com/concepts/changelogs/property-substitution.html

如果找不到匹配的属性,

Liquibase 将保留原始

${property}
文本。您可以检查以确保大小写匹配,例如有一个名为
APP_DB_USER
的环境变量,但将其引用为
app_db_user
。您可能需要仔细检查您的操作系统环境实际存储的内容。

最后,它可能与Liquibase 4.21.1中的这个问题有关:https://github.com/liquibase/liquibase/issues/4129

这只发生在 4.21.1 版吗?如果您使用旧版本的 Liquibase,如 4.19,它是否有效?


0
投票

我们使用 Liquibase 和旧的 maven 插件(3.1.x)。当我们更新插件版本时,问题就解决了。

没有其他选择可以解决这个问题

必须使用3.10.3+版本

© www.soinside.com 2019 - 2024. All rights reserved.