Я перенесла веб-приложение, работающее на Wildfly 9, с использованием аутентификации SQL для проверки подлинности Windows. Мне также нужно обновить утилиту java, которая выполняет некоторые задачи обслуживания непосредственно в базе данных. Веб-приложение отлично работает, но, похоже, утилита игнорирует настройку схемы по умолчанию в конфигурации спящего режима. Трассировка на SQL Server показывает, что запросы, поступающие от wildfly, имеют myschema.<table name>
, но запросы от моей утилиты имеют только <table name>
.Почему схема по умолчанию игнорируется при использовании встроенной безопасности SQL Server?
На SQL Server существует логин (DOMAIN \ myservice) для учетной записи домена, в которой работает служба wildfly, и я запускаю утилиту в качестве той же учетной записи.
Вход в систему сопоставляется с пользователем в базе данных с тем же именем (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>
войны 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
<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
- Hibernate 3.5.6-Final
- Microsoft SQL JDBC 4.1
- SQL Server 2014
- JRE 7u67