如何配置JDBC连接以使用与当前用户不同的AD用户?

服务器“HOSTNAME”上托管的MS SQL Server 2008 R2数据库“dbname”可由Active Directory用户从域“ABC”访问 ,让我们称他为“dbuser”“ABC \ dbuser”

我们以AD用户“ABC \ appuser”运行我们的应用程序。 “appuser”“dbuser”位于不同的AD组中。

当由在“ABC \ appuser”下运行的服务运行时,连接使用用户“ABC \ appuser”连接到数据库:

DriverManager.getConnection( "jdbc:sqlserver://HOSTNAME:1433;databaseName=dbname;integratedSecurity=true", "", "" ); 

使用相同的连接字符串并提供“ABC \ dbuser”和密码“dbpass” ,连接将忽略这些值,而是再次尝试使用服务正在运行的AD信息“ABC \ appuser”

 DriverManager.getConnection( "jdbc:sqlserver://HOSTNAME:1433;databaseName=dbname;integratedSecurity=true", "ABC\\dbuser", "dbpass" ); 

删除flag integratedSecurity=true ,连接将“ABC \ dbuser”视为SQL帐户而不是AD帐户,抛出SQLServerException

 DriverManager.getConnection( "jdbc:sqlserver://HOSTNAME:1433;databaseName=dbname", "ABC\\dbuser", "dbpass" ); 

 com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'ABC\dbuser'. 

到目前为止,我将假设这是不可能的,并且我将让数据库团队提供对数据库的“ABC \ appuser” AD访问,或者将“ABC \ appuser”放入AD组并给予该AD组访问数据库。 我没有提供配置数据库的权限; 我只能提供建议/指导。

连接字符串包含用户和密码的参数。

用户= YYY;密码= XXX

也许尝试通过连接字符串设置凭据,并将用户/密码参数保留为ABC \ dbuser连接的空字符串。 我不确定这是否可行,但它是发送凭据的另一种方式。