Uso dell'autenticazione NTLM per la connessione a SQL Server

Scaricare il driver JDBC

Microsoft JDBC Driver per SQL Server consente a un'applicazione di usare la proprietà di connessione authenticationScheme per indicare che la connessione a un database deve essere effettuata usando l'autenticazione NTLM v2.

Per l'autenticazione NTLM vengono usate anche le proprietà seguenti:

  • domain = domainName (facoltativo)
  • user = userName
  • password = password
  • integratedSecurity = true

Ad eccezione di domain, le altre proprietà sono obbligatorie. Nel caso in cui non siano presenti, il driver genera un errore quando viene usata la proprietà authenticationScheme di NTLM.

Per altre informazioni sulle proprietà di connessione, vedere Impostazione delle proprietà delle connessioni. Per altre informazioni sul protocollo di autenticazione NTLM di Microsoft, vedere Microsoft NTLM.

Osservazioni:

Vedere la sezione: Sicurezza di rete: livello di autenticazione di LAN Manager per la descrizione delle impostazioni di SQL Server, che controllano il comportamento dell'autenticazione NTLM.

Registrazione

È stato aggiunto un nuovo logger per supportare l'autenticazione NTLM: com.microsoft.sqlserver.jdbc.internals.NTLMAuthentication. Per altre informazioni, vedere Creazione di tracce.

Origine dati

Quando si usa un'origine dati per creare connessioni, le proprietà NTLM possono essere impostate a livello di codice usando setAuthenticationScheme, setDomain e, facoltativamente, setServerSpn.

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));
    }
}

Nomi dell'entità servizio

Un nome dell'entità servizio (SPN) è il nome con cui un client identifica in modo univoco un'istanza di un servizio.

È possibile specificare il nome dell'entità servizio usando la proprietà di connessione serverSpn o lasciare che sia il driver a crearlo automaticamente (impostazione predefinita). Questa proprietà usa il formato: "MSSQLSvc/fqdn:porta@AREADIAUTENTICAZIONE", dove fqdn è il nome di dominio completo, porta è il numero di porta e AREADIAUTENTICAZIONE è l'area di autenticazione di SQL Server in lettere maiuscole. La parte dell'area di autenticazione di questa proprietà è facoltativa perché l'area di autenticazione predefinita è la stessa di quella del server.

Ad esempio, il nome dell'entità servizio potrebbe essere simile al seguente: "MSSQLSvc/some-server.zzz.corp.contoso.com:1433"

Per ulteriori informazioni sui nomi dell'entità servizio (SPN), vedere:

Nota

L'attributo di connessione serverSpn è supportato solo da Microsoft JDBC Driver 4.2 e versioni successive.

Per le versioni precedenti alla 6.2 del driver JDBC, è necessario impostare serverSpn in modo esplicito. A partire dalla versione 6.2, il driver può compilare serverSpn per impostazione predefinita, sebbene sia possibile usare serverSpn in modo esplicito.

Rischi per la sicurezza

Il protocollo NTLM è un protocollo di autenticazione obsoleto con diverse vulnerabilità, che rappresentano un rischio per la sicurezza. Si basa su uno schema crittografico debole ed è vulnerabile agli attacchi. Il protocollo NTLM è stato sostituito da Kerberos, che è molto più sicuro e consigliato. L'autenticazione NTLM deve essere usata solo in un ambiente attendibile sicuro oppure quando non è possibile usare Kerberos.

Microsoft JDBC Driver per SQL Server supporta solo NTLM v2, che offre alcuni miglioramenti per la sicurezza rispetto al protocollo v1 originale. È consigliabile anche abilitare la protezione estesa oppure usare la crittografia TLS per una maggiore sicurezza.

Per altre informazioni su come abilitare la protezione estesa, vedere:

Per altre informazioni sulla connessione con la crittografia, vedere:

Nota

Per la versione 7.4, l'abilitazione di entrambe, protezione estesa e crittografia, non è supportata.

Vedi anche

Connessione a SQL Server con il driver JDBC