【问题标题】:Windows authentication with JDBC and SQL Server使用 JDBC 和 SQL Server 进行 Windows 身份验证
【发布时间】:2019-06-14 14:15:43
【问题描述】:

我需要使用 JDBC 连接到使用 Windows 身份验证的 SQL Server,我从连接字符串中提供用户名和密码。这可以通过 Windows 身份验证实现吗?

我在 JTDS 和 msql-jdbc 上都试过了,但无法让它工作

private  Connection getDBConnection() {
  Connection dbConnection = null;
  try {
         System.out.println("load driver");
         Class.forName("net.sourceforge.jtds.jdbc.Driver");
         log.info("loaded");

         String con = "jdbc:jtds:sqlserver://PNT00-PMP-SQL01:1433/iceware;domain=workgroup;userName=user;password=password";

         dbConnection = DriverManager.getConnection(con);

         log.info("got connection");

        return dbConnection;

   } catch (Exception e) {
         log.error(e.getMessage());
   }
   return dbConnection;
 }

我尝试了用户名和域的各种组合,但通常会得到类似的结果:

019-01-18 14:15:31 错误 com.pts.demo.service.JdbcService - 用户“/”登录失败。 ClientConnectionId:962eeab5-226c-4f85-9911-644a570529ab

非常感谢任何帮助

【问题讨论】:

  • 如果您使用 Windows 身份验证,则不必提供用户名和密码。
  • integratedSecurity=true 属性?
  • 您是否尝试从 Windows 客户端或其他平台进行连接?
  • 一个windows客户端

标签: sql-server jdbc jtds mssql-jdbc


【解决方案1】:

您必须在连接字符串useNTLMv2=truedomain=yourdomain 中包含属性

这可能是重复的:Sql Server - connect with windows authentication

还有另一种方式——https://thusithamabotuwana.wordpress.com/2012/07/19/connecting-to-sql-server-from-java/

您也可以尝试以下代码来获取 SQL JDBC 连接(用户名和密码在 props 文件中提供,而不是在连接字符串中指定它们)

............
String jdbcUrl = "jdbc:jtds:sqlserver://192.168.10.101:1433/dbName;charset=utf8";
System.setProperty("jsse.enableCBCProtection", "false"); // for SSL enabled MSSQL
Properties prop=new Properties();
prop.put("user",user);
prop.put("password",passWord);
prop.put("domain",domain);
prop.put("useNTLMv2","true");

dbConnection = DriverManager.getConnection(jdbcUrl , prop);
........

【讨论】:

  • 谢谢
  • 我试过了,我首先得到一个错误“未加载本机 SSPI 库。”。我为 JTDS 1.3.0 下载了“ntlmauth.dll”并将其放在 JAVA\Bin 文件夹中,然后再次运行 jar。现在我得到 I/O 错误:数据库服务器关闭连接。这对我来说意味着服务器上的配置问题,而不是身份验证错误。对吗?
  • 通过在数据库上启用混合模式身份验证并使用 SQL 用户进行访问,我已经克服了我的直接问题。我仍然想知道是否可以使用 Windows Auth 并通过连接字符串或至少通过登录用户以外的其他方式提供用户凭据
  • @gtfisher27 - 更新了答案,请检查这是否适用于您的环境。
  • 我不再推荐使用 jTDS。自 2013 年以来,该项目没有更新。这意味着它不正式支持 Sql server 2014 及更高版本。
最近更新 更多