【问题标题】:Why is default schema being ignored when using SQL Server integrated security?为什么在使用 SQL Server 集成安全性时忽略默认架构?
【发布时间】:2016-03-02 02:26:44
【问题描述】:

我已将在 Wildfly 9 上运行的 Web 应用程序从使用 SQL 身份验证迁移到使用 Windows 身份验证。我还需要更新一个直接在数据库上执行一些维护任务的 java 实用程序。 Web 应用程序运行良好,但该实用程序似乎忽略了休眠配置中的默认模式设置。 SQL Server 上的跟踪显示来自 wildfly 的查询有 myschema.<table name>,但来自我的实用程序的查询只有 <table name>

在 SQL Server 上有一个登录 (DOMAIN\myservice) 用于运行 wildfly 服务的域帐户,我以同一帐户运行 util。

登录名映射到数据库上同名的用户 (DOMAIN\myservice)。

用户的默认架构为 dbo。

util-hibernate.cfg.xml

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</property>
        <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
        <property name="hibernate.connection.url">jdbc:sqlserver://sqlhost\INSTANCE:1433;databaseName=MYAPP;integratedSecurity=true</property>
        <property name="hibernate.connection.pool_size">5</property>
        <property name="hibernate.default_schema">myschema</property>
        <property name="hibernate.show_sql">true</property>

        <mapping resource="....hbm.xml"/>
        <mapping resource="...hbm.xml"/>
        ...
    </session-factory>
</hibernate-configuration>

war-hibernate.cfg.xml

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.datasource">jdbc/MYAPP</property>
        <property name="hibernate.default_schema">myschema</property>

        <mapping resource="....hbm.xml"/>
        <mapping resource="...hbm.xml"/>
        ...
    </session-factory>
</hibernate-configuration>

wildfly 数据源

<datasource jndi-name="java:jdbc/MYAPP" pool-name="MyDataSource" enabled="true">
    <connection-url>jdbc:sqlserver://sqlhost\INSTANCE;databaseName=MYAPP;integratedSecurity=true</connection-url>
    <driver>sqljdbc4.jar</driver>
    <pool>
        <max-pool-size>10</max-pool-size>
    </pool>
    <validation>
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker" />
        <validate-on-match>false</validate-on-match>
        <background-validation>true</background-validation>
        <background-validation-millis>30000</background-validation-millis>
    </validation>
</datasource>

在我的实用程序的日志记录中,我看到:

SettingFactory:222 - Default schema: myschema

但再往下看,我看到了错误:

com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name '<table name>'

表在 myschema 中的位置。

我尝试使用以下命令更新休眠映射文件:

<hibernate-mapping schema="myschema">
    <class name="MyType" table="table_name">

还有

<hibernate-mapping>
    <class name="MyType" schema="myschema" table="table_name">

但这也没有用。

事物的不同版本

  • Wildfly 9.0.2.Final
  • 休眠 3.5.6-Final
  • Microsoft SQL JDBC 4.1
  • SQL Server 2014
  • JRE 7u67

【问题讨论】:

    标签: sql-server hibernate sql-server-2014 mssql-jdbc sqljdbc


    【解决方案1】:

    事实证明,该实用程序正在使用我没有注意到的 SQLQuery,而且似乎 hibernate 不会自动将默认模式名称附加到该名称。

    【讨论】:

      猜你喜欢
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多