服务器“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组访问数据库的权限。我没有提供配置数据库的权限;我只能提供建议/指导。
答案 0 :(得分:2)
连接字符串包含用户和密码的参数。
用户= YYY;密码= XXX
也许尝试通过连接字符串设置凭据,并将用户/密码参数保留为ABC \ dbuser连接的空字符串。我不确定这是否有效,但它是另一种发送凭证的方式。