Partilhar via


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

Baixar driver JDBC

O Microsoft JDBC Driver para SQL Server permite que um aplicativo use a propriedade de conexão authenticationScheme para indicar que deseja se conectar a um banco de dados usando a Autenticação NTLM v2.

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

  • domain = domainName (opcional)
  • usuário = userName
  • palavra-passe = palavra-passe
  • integratedSecurity = verdadeiro

Além do domínio, as outras propriedades são obrigatórias, o driver lançará um erro se algum estiver faltando quando a propriedade authenticationScheme NTLM for usada.

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 Operação do driver de rastreamento.

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 das entidades 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 realm dessa propriedade é opcional, pois o realm padrão é o mesmo que o realm do Server.

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.

Consulte também

Conectando-se ao SQL Server com o driver JDBC