如何配置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连接的空字符串。 我不确定这是否可行,但它是发送凭据的另一种方式。
- 每次从Ldap连接池返回新连接时
- 使用JAAS LdapLoginModule通过ActiveDirectory进行身份validation时遇到FailedLoginException
- 校验和失败:Kerberos / Spring / Active Directory(2008)
- 安全Java SOAP Web服务 – Active Directory身份validation信任
- 具有错误的Active Directory Ldap凭据的会话/ Redis序列化错误的Spring启动
- 用户解锁后,Windows机器上的Kerberos缓存票证无法重新生成
- 使用LDAP / Java启用Active Directory用户
- 将Ldap用户与使用Java的组关联
- 使用Spnego解密kerberos票