【发布时间】:2016-07-18 22:49:03
【问题描述】:
从使用 SQL Server Management Studio (SSMS) 的 Windows 中,我只能连接到不同域中的 SQL Server,如下所示:
C:\> runas /netonly /user:differentDomainName\aUserName "C:\Program Files (x86
)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\Ssms.exe -S anIpAddress"
如何通过 JDBC 完成此连接?我尝试在 Microsoft 的 sqljdbc 4.2 驱动程序中使用以下连接字符串:
jdbc:sqlserver://anIpAddress:1433;database=MAIN;user=differentDomainName\\aUserName;password=pass
我收到以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'differentDomainName\aUserName'
如果我在不使用 runas 的情况下启动 SSMS 并在 SSMS 2012 的“连接到服务器”对话框中为登录名键入了 differentDomainName\aUserName,这与我收到的错误相同。
附加信息:JDBC 连接将在 Linux 上运行的应用程序中建立。因此,不幸的是,使用runas 运行应用程序不是一种选择。
另一个尝试: 我还尝试使用带有以下连接字符串的 jTDS 1.3.1:
jdbc:jtds:sqlserver://anIpAddress:1433;databaseName=MAIN;domain=differentDomainName;user=aUserName;password=pass
因为 aUserName 仅用于 Windows 身份验证。不幸的是,这会产生以下异常:
o.a.tomcat.jdbc.pool.ConnectionPool : Unable to create initial connections of pool.
其次是
java.sql.SQLException: I/O Error: DB server closed connection.
权限信息:我无法修改 SQL Server 机器上的任何内容,包括 SQL Server 中的任何配置。 “aUserName”帐户映射到 SQL Server 只读 Windows 身份验证用户。
【问题讨论】:
-
前段时间我为this answer做了类似的事情。也许它会给你一些想法来尝试其他的事情。
-
谢谢。我无法修改 SQL Server 机器上的任何内容,包括 SQL Server 中的任何配置。用户被设置为只读用户。我尝试使用您提供的代码 sn-p(替换为我的环境的 IP 地址、用户名和密码),但仍然收到 OP 中记录的相同 SQL 异常。
-
请参考这个SO post 描述windows 身份验证以及所需的.jar/.dll 文件。另外,考虑将用户名和密码作为参数传递(不在连接字符串中):
DriverManager.getConnection(connectionStr, user, password)。 -
@Parfait - 谢谢,但请在 OP 中注意,您引用的帖子中提供的解决方案将不起作用,原因有两个 1) 应用程序需要在 Linux 中运行。 2) 即使应用程序在 Windows 中运行(但不是),应用程序也需要使用与运行应用程序的用户不同的用户进行 DB 身份验证。
-
也许您可以在 Microsoft SQL Server JDBC 驱动程序中使用 Kerberos 身份验证?
标签: sql-server jdbc network-programming