Usando a autenticação NTLM para se conectar ao SQL Server

Baixar driver JDBC

O Microsoft JDBC Driver para SQL Server permite que uma aplicação utilize a propriedade de ligação authenticationScheme para indicar que pretende ligar-se a uma base de dados utilizando a autenticação NTLM v2.

As seguintes propriedades também são usadas para autenticação NTLM:

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

Além de domínio, as outras propriedades são obrigatórias; o controlador emitirá um erro se alguma estiver em falta quando for utilizada a propriedade authenticationScheme NTLM.

Para obter mais informações sobre as propriedades da conexão, consulte Definindo as propriedades da conexão. Para obter mais informações sobre o protocolo de autenticação Microsoft NTLM, consulte Microsoft NTLM.

Observações

Consulte Segurança de rede: nível de autenticação do LAN Manager para obter uma descrição das configurações do SQL Server, que controlam o comportamento da autenticação NTLM.

Exploração Florestal

Um novo logger foi adicionado para oferecer suporte à autenticação NTLM: com.microsoft.sqlserver.jdbc.internals.NTLMAuthentication. Para obter mais informações, consulte Rastrear o funcionamento do controlador.

Fonte de dados

Ao usar uma fonte de dados para criar conexões, as propriedades NTLM podem ser programaticamente definidas usando setAuthenticationScheme, setDomain e (opcionalmente) 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));
    }
}

Nomes principais de serviço

Um SPN (nome da entidade de serviço) é o nome pelo qual um cliente identifica exclusivamente uma instância de um serviço.

Você pode especificar o SPN usando a propriedade de conexão serverSpn ou deixar o driver criá-lo para você (o padrão). Essa propriedade está na forma de: "MSSQLSvc/fqdn:port@REALM", onde fqdn é o nome de domínio totalmente qualificado, porta é o número da porta e REALM é o reino do SQL Server em letras maiúsculas. A parte do domínio desta propriedade é opcional, pois o domínio predefinido é o mesmo que o domínio do Servidor.

Por exemplo, seu SPN pode se parecer com: "MSSQLSvc/some-server.zzz.corp.contoso.com:1433"

Para obter mais informações sobre nomes de entidade de serviço (SPNs), consulte:

Observação

O atributo de conexão serverSpn só é suportado pelo Microsoft JDBC Drivers 4.2 e superior.

Antes da versão 6.2 do driver JDBC, você precisaria definir explicitamente o serverSpn. A partir da versão 6.2, o driver será capaz de construir o serverSpn por padrão, embora se possa usar serverSpn explicitamente também.

Riscos de segurança

O protocolo NTLM é um protocolo de autenticação antigo com várias vulnerabilidades, que representam um risco de segurança. Baseia-se num esquema criptográfico fraco e é vulnerável a ataques. O NTLM foi substituído pelo Kerberos, que é muito mais seguro e recomendado. A autenticação NTLM só deve ser usada em um ambiente seguro e confiável ou quando o Kerberos não puder ser usado.

O Microsoft JDBC Driver para SQL Server suporta apenas NTLM v2, que tem algumas melhorias de segurança em relação ao protocolo v1 original. Também é recomendado o uso da criptografia TLS para aumentar a segurança.

Para obter mais informações sobre como se conectar com criptografia, consulte:

Observação

Para a versão 7.4, não há suporte para habilitar a Proteção Estendida e a Criptografia.