Java 如何在JBoss中配置SQL Server数据源以使用特定的Active Directory用户进行连接?
JBoss以Active Directory用户身份运行Java 如何在JBoss中配置SQL Server数据源以使用特定的Active Directory用户进行连接?,java,sql-server,jdbc,jboss,active-directory,Java,Sql Server,Jdbc,Jboss,Active Directory,JBoss以Active Directory用户身份运行ABC\appuser。我想以AD用户身份连接到MS SQL Server 8.0数据库ABC\dbuser。使用参数integratedSecurity=true,除非我指定user=ABC\dbuser;password=dbpass在连接url上,系统将尝试以服务广告用户身份进行连接,ABC\appuser 根据,我已确认,当以ABC\appuser的身份运行应用程序时,通过使用以下url,我可以以ABC\dbuser的身份连接到数据
ABC\appuser
。我想以AD用户身份连接到MS SQL Server 8.0数据库ABC\dbuser
。使用参数integratedSecurity=true
,除非我指定user=ABC\dbuser;password=dbpass
在连接url上,系统将尝试以服务广告用户身份进行连接,ABC\appuser
根据,我已确认,当以ABC\appuser
的身份运行应用程序时,通过使用以下url,我可以以ABC\dbuser
的身份连接到数据库:
jdbc:sqlserver://MYHOSTNAME:1433;DatabaseName=MyDatabaseName;integratedSecurity=true;user=ABC\dbuser;password=dbpass
不幸的是,当我在JBoss配置xml(JBoss\JBoss-eap-6.1.0\standalone\configuration\standalone.xml
)中设置数据源的url时,如下所示:
<datasource jndi-name="java:jboss/datasources/MyDatabaseName" pool-name="MyPoolName" enabled="true" use-java-context="true">
<connection-url>jdbc:sqlserver://MYHOSTNAME:1433;DatabaseName=MyDatabaseName;integratedSecurity=true;user=ABC\dbuser;password=dbpass</connection-url>
<driver>sqlserver</driver>
<pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>10</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name></user-name>
<password></password>
</security>
</datasource>
设置用户名
和密码
XML条目的值会创建类似的故障警告
我当前的解决方案似乎是:
连接url
值的自定义类,或者ABC\dbuser
身份运行,或这些变通办法都不是可取的;必须有一个更优雅、更被接受的解决方案。如何解决此问题?首先,我甚至不确定您使用的连接字符串是如何工作的。如果指定受信任连接和用户/过程组合,则应返回一个错误,因为无法同时使用这两个组合。您可以使用当前帐户上下文或特定的用户名/密码组合进行连接,而不是同时使用两者。即便如此,SQL Server也不会存储AD密码,也不会将用户/密码组合作为SQL Server登录以外的任何东西进行身份验证 其次,我不确定您是否真的指的是SQL Server 8.0 RC@,因为RC2意味着8.0版的候选版本2,即SQL Server 2000。如果是这样的话,那根本不受支持,我建议迁移到2012年或2014年 现在,我并不完全精通JBoss,但在我看来,您有两种不同的选择
我很惊讶连接字符串正在工作。我的理解是,Microsoft提供的JDBC驱动程序中的integratedSecurity属性与等效.NET连接字符串中的Integrated Security或Trusted Connection属性的工作方式相同 也就是说,将integratedSecurity设置为true会使JDBC驱动程序有效地忽略提供的用户和密码,并尝试以应用程序运行时的用户身份登录 我没有Microsoft SQL Server驱动程序的解决方案,但这个问题可以使用开源解决 在很大程度上,您应该能够交换JDBC驱动程序JAR文件,并调整连接XML,使其看起来像这样:
<datasource jndi-name="java:jboss/datasources/MyDatabaseName" pool-name="MyPoolName" enabled="true" use-java-context="true">
<connection-url>jdbc:jtds:sqlserver://MYHOSTNAME:1433/MyDatabaseName;domain=ABC</connection-url>
<driver>jtds</driver>
<pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>10</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>dbuser</user-name>
<password>dbpass</password>
</security>
</datasource>
net.sourceforge.jtds.jdbc.Driver
这是可行的,但我们最终还是选择了(我喜欢的)“变通”路线,将服务运行时的广告用户“appuser”添加到一个可以访问SQL Server数据库的广告组中。这很好,因为服务广告用户“appuser”是DB广告用户“dbuser”的唯一消费者。
<datasource jndi-name="java:jboss/datasources/MyDatabaseName" pool-name="MyPoolName" enabled="true" use-java-context="true">
<connection-url>jdbc:jtds:sqlserver://MYHOSTNAME:1433/MyDatabaseName;domain=ABC</connection-url>
<driver>jtds</driver>
<pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>10</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>dbuser</user-name>
<password>dbpass</password>
</security>
</datasource>
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="net.sourceforge.jtds">
<resources>
<resource-root path="jtds-1.3.1.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
<drivers>
<driver name="jtds" module="net.sourceforge.jtds">
<driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
</driver>
</drivers>