在使用 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: 用户 '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:无法创建池的初始连接。
其次是
java.sql.SQLException:I/O 错误:数据库服务器关闭连接。
权限信息:我无法修改 SQL Server 计算机上的任何内容,包括 SQL Server 中的任何配置。 “aUserName”帐户映射到 SQL Server 只读 Windows 身份验证用户。
最佳答案
当您使用 MS JDBC 驱动程序连接时,您没有为用户指定密码(至少没有在您提供的连接字符串中指定)。如果您打算使用集成安全性,您应该在连接字符串中指出这一点,但是您的进程必须已经针对不同的 DomainName\aUserName 进行身份验证
由于您的计划是从 linux 访问 SQL 服务器,我怀疑您能否为该场景进行集成安全性工作,因此您应该计划在连接字符串中提供密码。我不确定您是否可以在连接字符串中为域用户提供用户名/密码(我认为可以),但是如果您切换到具有 SQL Server 身份验证的用户,它肯定会起作用。这应该是一个后备选项,因为 SQL Server 身份验证不太安全。
关于sql-server - 通过 JDBC 连接到不同域上的 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36317203/