【问题标题】:Is there a way to connect to SQL server through windows authentication without using Integrated Security=true option from java有没有办法通过 Windows 身份验证连接到 SQL Server,而不使用 Java 中的 Integrated Security=true 选项
【发布时间】:2019-09-25 00:51:11
【问题描述】:

我想通过 Java eclipse 使用 windows 用户名和密码连接到 SQL 服务器

能够与 Integrated Security = true 连接。

但需要尝试其他域。

使用以下连接 URL 连接。

"jdbc:sqlserver://servername;databaseName=database;integratedSecurity=true"

Jar - MsSQL-jdbc-7.2.2.jre8.jar

此网址失败

"jdbc:sqlserver://servername;databaseName=database;user=domain\user;password=password"

错误信息

com.microsoft.sqlserver.jdbc.SQLServerException: 用户登录失败 '域\用户'。 ClientConnectionId:df0fd280-7727-446f-96e4-ce972fda26d7 在 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262) 在 com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:258) 在 com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:104) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:5036) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3668) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:94) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3627) 在 com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7194) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2935) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2456) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2103) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1950) 在 com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1162) 在 com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:735) 在 java.sql.DriverManager.getConnection(Unknown Source) 在 java.sql.DriverManager.getConnection(Unknown Source) 在 sql.Javaconnection.main(Javaconnection.java:27)

【问题讨论】:

  • 您在此处查找的内容称为模拟。使用集成身份验证时,您不能在连接字符串中提供用户名和密码;那是为了使用 SQL 身份验证。模拟在应用程序中处理,而不是连接管理器,因此您需要让人们知道您使用的代码库(C#、java?)并提供您用于创建/连接到 SQL 实例的代码。

标签: sql-server jdbc


【解决方案1】:

同样的选项也适用于 .NET。答案是不。

【讨论】:

  • 所以我在 .net 中模拟的应用程序是谎言?您不能单独在连接字符串中进行设置,但您仍然可以使用与自己不同的 AD 帐户进行连接;它只是有几个额外的步骤。
  • 如果我理解正确,问题是我们是否可以指定 AD 帐户而不在连接字符串中指定集成安全性。答案是不。我们可以模仿,但这不是问题的一部分。
  • 是的,但这很可能是因为问题本身就是一个 XY 问题。 OP 认为问题是他们不能使用Integrated Security = true,如果他们正确设置了模拟,他们可以使用。他们并没有说他们不能使用Integrated Security = true,只是他们想测试多个帐户。一旦他们配置了模拟,那么他们实际询问的问题就会消失。有时您需要在 OP 所要求的内容之间阅读,并尝试解决他们遇到的问题,而不是他们所问的问题。 :)
  • 例如,有人问“为什么这个动态 SQL 不起作用,出现无法转换为整数的错误?SET @SQL = 'SELECT * FROM ' + MyTable + ' WHERE ID = ' + @ID; EXEC @SQL;” 解决方案不是将 + @ID 更改为 + CONVERT(varchar(3),@ID)这是对查询进行参数化;但这不是问题所在。 ;)
  • 模拟与连接字符串无关。所以,答案是否定的。模拟是通过切换 WindowsIdentity 来完成的。
【解决方案2】:

通过Java eclipse ...能够连接Integrated Security = true ...但需要尝试其他域。

要使用无法在本地登录或模拟的帐户(即来自另一个域的帐户)使用 Windows 集成身份验证连接到 SQL Server,您可以使用RUNAS /NETONLY 或在 Windows 凭据中设置适当的凭据经理。

在任何一种情况下,您都可以配置一个凭据,该凭据将用于网络资源的 NTLM 身份验证,而无需使用这些凭据进行本地登录。您将使用 integratedSecurity=true 而不是在连接字符串中提供凭据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    相关资源
    最近更新 更多