通过JDBC

时间:2016-03-30 18:45:32

标签: sql-server jdbc network-programming

从Windows使用SQL Server Management Studio(SSMS),我只能连接到不同域上的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并在"连接到服务器"中为登录名输入了differentDomainName \ aUserName,则会收到同样的错误。 SSMS 2012的对话框。

附加信息:将在Linux上运行的应用程序中建立JDBC连接。因此,遗憾的是,使用runas运行应用程序不是一种选择。

另一种尝试: 我还试图将jTDS 1.3.1与以下连接字符串一起使用:

jdbc:jtds:sqlserver://anIpAddress:1433;databaseName=MAIN;domain=differentDomainName;user=aUserName;password=pass

因为仅为Windows身份验证设置了aUserName。不幸的是,这会产生以下异常:

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身份验证用户。

1 个答案:

答案 0 :(得分:0)

当您使用MS JDBC驱动程序连接时,您不需要为用户指定密码(至少不在您提供的连接字符串中)。如果您的目的是使用集成安全性,则应在连接字符串中指明此内容,但是您必须已针对differentDomainName \ aUserName

对进程进行身份验证

综合安全& JDBC: https://msdn.microsoft.com/en-us/library/ms378428%28v=sql.110%29.aspx?f=255&MSPPError=-2147217396#Connectingintegrated

由于您的计划是从Linux访问SQL服务器,我怀疑您是否可以为该方案进行集成安全性工作,因此您应该计划在连接字符串中提供密码。我不确定您是否可以在连接字符串中为域用户提供用户名/密码(我认为您可以),但如果您切换到具有SQL Server身份验证的用户,它肯定会有效。这应该是一个后备选项,因为SQL Server auth不太安全。