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

时间:2014-07-11 16:09:56

标签: java sql-server jdbc sql-server-2008-r2 active-directory

服务器“HOSTNAME”上托管的MS SQL Server 2008 R2数据库“dbname”可由域“ABC”中的Active Directory用户访问,让我们称他为“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"
);

删除标记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访问数据库,或者将< em>“ABC \ appuser”进入AD组并授予该AD组访问数据库的权限。我没有提供配置数据库的权限;我只能提供建议/指导。

1 个答案:

答案 0 :(得分:2)

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

  

用户= YYY;密码= XXX

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