Compartir vía


Empleo de autenticación NTLM para conectar con SQL Server

Descargar controlador JDBC

Permite que una aplicación use la propiedad de conexión authenticationScheme para indicar que desea conectarse a una base de datos mediante la autenticación NTLM v2. Microsoft JDBC Driver para SQL Server

También se usan las siguientes propiedades para la autenticación NTLM:

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

Salvo domain, las otras propiedades son obligatorias. El controlador generará un error si falta alguna al usarse la propiedad authenticationScheme NTLM.

Para más información sobre las propiedades de conexión, consulte Establecimiento de las propiedades de conexión. Para más información sobre el protocolo de autenticación NTLM de Microsoft, consulte Microsoft NTLM.

Observaciones

Consulte Seguridad de red: nivel de autenticación de LAN Manager para ver una descripción de la configuración de SQL Server, que controla el comportamiento de la autenticación NTLM.

Registro

Se ha agregado un nuevo registrador para admitir la autenticación NTLM: com.microsoft.sqlserver.jdbc.internals.NTLMAuthentication. Para obtener más información, vea Hacer un seguimiento del funcionamiento del controlador.

DataSource

Al usar un origen de datos para crear conexiones, las propiedades de NTLM se pueden establecer mediante programación con setAuthenticationScheme, setDomain, y (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));
    }
}

Nombres de entidades de seguridad de servicio

Un nombre principal de servicio (SPN) es el nombre por el que un cliente identifica de forma unívoca una instancia de un servicio.

Puede especificar el SPN con la propiedad de conexión serverSpn o dejar que el controlador lo genere automáticamente (el valor predeterminado). Esta propiedad tiene el formato "MSSQLSvc/fqdn:port@REALM", donde fqdn es el nombre de dominio completo, port es el número de puerto y REALM es el dominio de SQL Server en letras mayúsculas. La parte correspondiente al dominio Kerberos de esta propiedad es opcional, ya que el dominio Kerberos predeterminado es el mismo que el dominio Kerberos del servidor.

Por ejemplo, el SPN podría ser: "MSSQLSvc/some-server.zzz.corp.contoso.com:1433"

Para obtener más información sobre los nombres de entidad de seguridad de servicio (SPN), vea:

Nota:

El atributo de conexión serverSpn solo es compatible con Microsoft JDBC Driver 4.2 y superior.

Antes de la versión 6.2 del controlador JDBC, debe establecer serverSpn explícitamente. A partir de la versión 6.2, el controlador podrá compilar serverSpn de forma predeterminada, aunque también se puede usar serverSpn explícitamente.

Riesgos de seguridad

El protocolo NTLM es un protocolo de autenticación antiguo con diversas vulnerabilidades, que suponen un riesgo de seguridad. Se basa en un esquema criptográfico débil y es vulnerable a los ataques. NTLM se ha reemplazado por Kerberos, que es mucho más seguro y recomendable. La autenticación NTLM solo debe usarse en un entorno seguro y de confianza o en caso de que no se pueda utilizar Kerberos.

Microsoft JDBC Driver para SQL Server solo admite NTLM v2, que cuenta con algunas mejoras de seguridad con respecto al protocolo v1 original. También se recomienda habilitar la protección ampliada o usar el cifrado SSL para aumentar la seguridad.

Para obtener más información sobre cómo habilitar la protección ampliada, consulte:

Para más información sobre cómo conectarse con el cifrado, consulte:

Nota:

En la versión 7,4, no se admite la habilitación de la protección ampliada y el cifrado.

Consulte también

Conexión a SQL Server con el controlador JDBC