liquibase 日志 table 在 dbo 模式 Microsoft SQL 服务器下创建

liquibase log table created under dbo schema Microsoft SQL Server

我在每个更改日志中指定架构,如下所示

<changeSet author="xyz" id="create_app_table">
    <createTable tableName="app" schemaName="CONF">
        <column name="application" type="varchar(100)"/>
        <column name="profile" type="varchar(100)"/>            
    </createTable>
<changeSet>

所有用户定义的表都是在 CONF 模式下创建的,但是 DATABASECHANGELOGDATABASECHANGELOGLOCK 表是在 dbo 模式下创建的。

我正在使用 Microsoft SQL 服务器和 运行 liquibase 脚本,命令如下

mvn liquibase:update

liquibase-maven-plugin.properties

url=jdbc:sqlserver://xyz:1433;database=TEST
username=****
password=****
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver

我在单个数据库下有多个模式,我希望两个日志表都限制在自己的模式中。

我尝试了几个选项,但 none 有帮助。

首先,我没有将架构名称放在每个更新日志中,而是将其放在 属性 文件中,因为 liquibaseSchemaName=CONF 它不起作用,所有表都是在 dbo 架构下创建的

其次,我将架构名称放在 pom 文件中,如下所示

       <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <configuration>
                <propertyFile>src/main/resources/liquibase/liquibase-maven-plugin.properties</propertyFile>
                <changeLogFile>src/main/resources/changelog/changelog.xml</changeLogFile>
                <defaultSchemaName>CONF</defaultSchemaName>
            </configuration>
        </plugin>

但是我得到这个错误

Cannot use default schema name CONF on Microsoft SQL Server because the login schema of the current user (dbo) is different and SQL Server does not support setting the default schema per session

我认为这更多是权限问题。在您的 SQL Server management Studio 中,进入“安全”>“登录”>“您的用户”> 右键单击​​并进入“属性”>“用户映射”并检查用户是否具有默认架构作为 CONF。如果不是,请进行必要的更改。

作为解决方法,我在数据库中创建了与模式名称相同的用户(也可以不同)。这些是命令:

CREATE user CONF with password='xyz';
ALTER USER CONF WITH DEFAULT_SCHEMA = CONF;
GRANT CONTROL ON SCHEMA :: CONF TO CONF ;
GRANT CONTROL TO CONF ;

liquibase.properties

的内容
url=jdbc:sqlserver://***
username=***
password=***
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
liquibaseSchemaName=CONF

还在每个更新日志中添加了 schemaName。

<changeSet author="xyz" id="create_app_table">
    <createTable tableName="app" schemaName="CONF">
        <column name="application" type="varchar(100)"/>
        <column name="profile" type="varchar(100)"/>            
    </createTable>
<changeSet>

有了这个,我能够在 CONF 架构下创建所有表,包括变更日志表。