Herstellen von Verbindungen mit SQL Server mit NTLM-Authentifizierung
In Microsoft JDBC-Treiber für SQL Server können Anwendungen mithilfe der Verbindungseigenschaft authenticationScheme angeben, dass eine Verbindung mit einer Datenbank unter Verwendung der NTLM v2-Authentifizierung hergestellt werden soll.
Nachfolgend sind Eigenschaften aufgeführt, die ebenfalls für die NTLM-Authentifizierung verwendet werden:
- domain = domainName (optional)
- user = userName
- password = password
- integratedSecurity = true
Mit Ausnahme von domain müssen diese Eigenschaften angegeben werden. Wenn die Eigenschaften bei Verwendung der authenticationScheme-Eigenschaft NTLM fehlen, gibt der Treiber einen Fehler aus.
Weitere Informationen zu Verbindungseigenschaften finden Sie unter Festlegen von Verbindungseigenschaften. Weitere Informationen zum Microsoft NTLM-Authentifizierungsprotokoll finden Sie unter Microsoft NTLM.
Bemerkungen
Unter Netzwerksicherheit: LAN-Manager-Authentifizierungsebene sind die SQL-Server-Einstellungen beschrieben, die das Verhalten der NTLM-Authentifizierung steuern.
Protokollierung
Zur Unterstützung der NTLM-Authentifizierung wurde eine neue Protokollierung hinzugefügt: com.microsoft.sqlserver.jdbc.internals.NTLMAuthentication. Weitere Informationen finden Sie unter Tracing Driver Operation (Ablaufverfolgung für Treibervorgänge).
DataSource
Bei Verwendung einer Datenquelle zum Herstellen von Verbindungen können die NTLM-Eigenschaften programmgesteuert über setAuthenticationScheme, setDomain und (optional) setServerSpn festgelegt werden.
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));
}
}
Dienstprinzipalnamen
Ein Dienstprinzipalname (SPN, Service Principal Name) ist der Name, über den ein Client eine Instanz eines Diensts eindeutig identifiziert.
Sie können den SPN mithilfe der Verbindungseigenschaft serverSpn angeben oder ihn vom Treiber erstellen lassen (Standardeinstellung). Diese Eigenschaft kann in der Form „MSSQLSvc/fqdn:port@REALM“ angegeben werden, wobei „fqdn“ den vollqualifizierten Domänennamen, „port“ die Portnummer und „REALM“ den Bereich des SQL Server-Computers in Großbuchstaben darstellen. Der Abschnitt für den Bereich ist bei dieser Eigenschaft optional, da der Standardbereich dem Bereich des Servers entspricht.
Nachfolgend ist ein Beispiel Ihres Dienstprinzipalnamens gezeigt: MSSQLSvc/some-server.zzz.corp.contoso.com:1433
Weitere Informationen zu Dienstprinzipalnamen (SPNs) finden Sie in folgendem Thema:
Hinweis
Das Verbindungsattribut „serverSpn“ wird nur vom Microsoft JDBC-Treiber 4.2 und höher unterstützt.
Vor Release 6.2 des JDBC-Treibers mussten Sie den serverSpn explizit festlegen. Ab Release 6.2 kann der Treiber den serverSpn standardmäßig erstellen. Sie können den serverSpn jedoch auch weiterhin explizit angeben.
Sicherheitsrisiken
Das NTLM-Protokoll ist ein älteres Authentifizierungsprotokoll, das mit einer Reihe von Sicherheitsrisiken einhergeht. Es basiert auf einem schwachen Kryptografieschema und ist anfällig für Angriffe. NTLM wurde durch Kerberos ersetzt, das viel sicherer ist und empfohlen wird. Die NTLM-Authentifizierung sollte ausschließlich in einer vertrauenswürdigen Umgebung bzw. in Szenarien verwendet werden, in denen Kerberos nicht verwendet werden kann.
Microsoft JDBC-Treiber für SQL Server unterstützt lediglich die NTLM-Version v2, die gegenüber der ursprünglichen Version v1 eine höhere Sicherheit bietet. Für eine verbesserte Sicherheit wird außerdem empfohlen, den erweiterten Schutz zu aktivieren oder die TSL-Verschlüsselung zu verwenden.
Weitere Informationen zur Aktivierung des erweiterten Schutzes finden Sie hier:
Weitere Informationen zum Herstellen einer Verbindung mit Verschlüsselung finden Sie unter:
Hinweis
Bei Release 7.4 ist es nicht möglich sowohl den erweiterten Schutz als auch die Verschlüsselung zu aktivieren.