使用 NTLM 驗證連線到 SQL Server

下載 JDBC 驅動程式

Microsoft JDBC Driver for SQL Server 可讓應用程式使用 authenticationScheme 連線屬性來表示該應用程式想要使用 NTLM v2 驗證連線至資料庫。

下列屬性也用於 NTLM 驗證:

  • domain = domainName (選擇性)
  • user = userName
  • password = password
  • integratedSecurity = true

除了 domain 之外,其他屬性是必要的,如果使用 NTLM authenticationScheme 屬性時缺少任一個屬性,驅動程式將會擲回錯誤。

如需連接屬性的詳細資訊,請參閱設定連接屬性。 如需 Microsoft NTLM 驗證通訊協定的詳細資訊,請參閱 Microsoft NTLM \(英文\)。

備註

請參閱網路安全性:LAN Manager 驗證等級 \(部分機器翻譯\),以取得 SQL 伺服器設定 (控制 NTLM 驗證行為) 的描述。

記錄

新增了新的記錄器以支援 Kerberos 驗證:com.microsoft.sqlserver.jdbc.internals.NTLMAuthentication。 如需詳細資訊,請參閱追蹤驅動程式作業

DataSource

使用資料來源建立連線時,可以使用 setAuthenticationSchemesetDomain 和 (選擇性) 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 領域。 這個屬性的領域部分是選擇性的,因為預設領域與伺服器的領域相同。

例如,您的 SPN 可能看起來如下:"MSSQLSvc/some-server.zzz.corp.contoso.com:1433"

如需有關服務主要名稱 (SPN) 的詳細資訊,請參閱:

注意

只有 Microsoft JDBC Driver 4.2 以上 (含) 版本支援 serverSpn 連線屬性。

在 JDBC 驅動程式 6.2 版之前,您必須明確地設定 serverSpn。 從 6.2 版本開始,驅動程式預設將能夠建置 serverSpn,不過,您也可以明確地使用 serverSpn

安全性風險

NTLM 通訊協定是舊的驗證通訊協定,具有各種弱點,因此會造成安全性風險。 其是以較弱的密碼編譯配置為基礎,且容易遭受攻擊。 NTLM 已由 Kerberos 取代,其為更安全且建議的方法。 NTLM 驗證僅會用於安全且信任的環境中,或在無法使用 Kerberos 時使用。

Microsoft JDBC Driver for SQL Server 只支援 NTLM v2,其相較於原始 v1 通訊協定做了一些安全性改善。 也建議您啟用擴充保護,或使用 SSL 加密來提高安全性。

如需如何啟用擴充保護的詳細資訊,請參閱:

如需使用加密進行連線的詳細資訊,請參閱:

注意

7\.4 版不支援同時啟用擴充保護和加密。

另請參閱

使用 JDBC 驅動程式連線到 SQL Server