使用 NTLM 身份验证连接到 SQL Server

下载 JDBC 驱动程序

Microsoft JDBC Driver for SQL Server 允许应用程序使用 authenticationScheme 连接属性,以指明要使用 NTLM v2 身份验证连接到数据库。

以下属性也用于 NTLM 身份验证:

  • domain = domainName(可选)
  • 用户 = 用户名
  • 密码 = 密码
  • integratedSecurity = true

除了 domain 以外,其他属性都是必需的;使用 NTLM authenticationScheme 属性时,如果缺少任何必需属性,驱动程序都会抛出错误。

若要详细了解连接属性,请参阅设置连接属性。 若要详细了解 Microsoft NTLM 身份验证协议,请参阅 Microsoft NTLM

备注

请参阅网络安全:LAN Manager 身份验证级别,了解控制 NTLM 身份验证行为的 SQL Server 设置。

日志记录

新增了一个记录程序以支持 NTLM 身份验证:com.microsoft.sqlserver.jdbc.internals.NTLMAuthentication。 有关详细信息,请参阅跟踪驱动程序操作

数据源

使用数据源创建连接时,可以使用 setAuthenticationScheme、setDomain 和 setServerSpn(可选)以编程方式设置 NTLM 属性。

SQLServerDataSource ds = new SQLServerDataSource();
ds.setServerName("<server>");
ds.setPortNumber(1433); // change if necessary
ds.setIntegratedSecurity(true);
ds.setAuthenticationScheme("NTLM");
ds.setDomain("<domainName>");
ds.setUser("<userName>");
ds.setPassword("<password>");
ds.setDatabaseName("<database>");
ds.setServerSpn("<serverSpn");

try (Connection c = ds.getConnection(); Statement s = c.createStatement();
        ResultSet rs = s.executeQuery("select auth_scheme from sys.dm_exec_connections where session_id=@@spid")) {
    while (rs.next()) {
        System.out.println("Authentication Scheme: " + rs.getString(1));
    }
}

服务主体名称

服务主体名称 (SPN) 是客户端用来唯一标识服务实例的名称。

可以使用 serverSpn 连接属性指定 SPN 或让驱动程序生成它(默认)。 此属性采用“MSSQLSvc/fqdn:port@REALM”的形式,其中 fqdn 是完全限定的域名,port 是端口号,REALM 是 SQL Server 的领域(采用大写形式)。 此属性的领域部分是可选的,因为默认领域与 SQL Server 领域相同。

例如,SPN 可能如下所示:“MSSQLSvc/some-server.zzz.corp.contoso.com:1433”

有关服务主体名称 (SPN) 的详细信息,请参阅:

备注

serverSpn 连接属性仅受 Microsoft JDBC Driver 4.2 及更高版本支持。

在 JDBC 驱动程序 6.2 版本发布之前,您需要显式设置 serverSpn 参数。 自 6.2 版本起,驱动程序默认情况下将能够构建 serverSpn,不过也可以显式指定 serverSpn。

安全风险

NTLM 协议是一种老旧的身份验证协议,存在各种造成安全风险的漏洞。 它基于弱加密方案,容易受到攻击。 NTLM 已被 Kerberos 取代,后者更安全且更推荐使用。 NTLM 身份验证应仅在安全的受信任环境中使用,或在无法使用 Kerberos 时使用。

Microsoft JDBC Driver for SQL Server 只支持 NTLM v2,它比原来的 v1 协议有一些安全改进。 还建议使用 TLS 加密来提高安全性。

有关使用加密进行连接的详细信息,请参阅:

备注

对于版本 7.4,不支持同时启用扩展保护和加密。