【问题标题】:liquibase log table created under dbo schema Microsoft SQL Server在 dbo 架构 Microsoft SQL Server 下创建的 liquibase 日志表
【发布时间】:2021-07-05 16:38:24
【问题描述】:

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

<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 架构下创建的,但 DATABASECHANGELOG 和 DATABASECHANGELOGLOCK 表是在 dbo 架构下创建的。

我正在使用 Microsoft SQL Server 并使用以下 cmd 运行 liquibase 脚本

mvn liquibase:update

liquibase-maven-plugin.properties

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

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

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

首先,我没有将架构名称放在每个变更日志中,而是将其作为 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>

但我得到了这个错误

无法在 Microsoft SQL Server 上使用默认架构名称 CONF,因为当前用户 (dbo) 的登录架构不同,并且 SQL Server 不支持为每个会话设置默认架构

【问题讨论】:

    标签: sql-server liquibase


    【解决方案1】:

    作为一种解决方法,我在 DB 中创建了与架构同名的用户(也可以不同)。这些是命令:

    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 架构下创建所有表,包括更改日志表。

    【讨论】:

      【解决方案2】:

      我认为这更多的是权限问题。在您的 SQL Server 管理 Studio 中,进入 Security > Logins > Your User > 右键单击​​并进入 Properties > User Mapping 并检查用户是否具有默认架构为 CONF。如果没有,请进行必要的更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-17
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 2013-06-01
        • 1970-01-01
        相关资源
        最近更新 更多