A partir del Controlador Microsoft JDBC 4.0 para SQL Server, una aplicación puede usar la propiedad de conexión authenticationScheme para indicar que desea conectar con una base de datos usando la autenticación integrada Kerberos de tipo 4. Vea Establecer las propiedades de conexión para obtener más información sobre las propiedades de conexión. Para obtener más información sobre Kerberos, vea Complemento técnico de Kerberos para Windows y Microsoft Kerberos.
Cuando se usa la autenticación integrada con el Krb5LoginModule de Java, puede configurar el módulo mediante Class Krb5LoginModule.
El Controlador Microsoft JDBC para SQL Server establece las propiedades siguientes para las máquinas virtuales Java de IBM:
useDefaultCcache = true
moduleBanner = false
El Controlador Microsoft JDBC para SQL Server establece las propiedades siguientes para todas las demás máquinas virtuales Java:
useTicketCache = true
doNotPrompt = true
Notas
Antes del Controlador Microsoft JDBC 4.0 para SQL Server, las aplicaciones podían especificar la autenticación integrada (usando Kerberos o NTLM, dependiendo de lo que hubiera disponible) mediante la propiedad de conexión integratedSecurity y por referencia a sqljdbc_auth.dll, como se describe en Generar URL de conexión.
A partir del Controlador Microsoft JDBC 4.0 para SQL Server, una aplicación puede usar la propiedad de conexión authenticationScheme para indicar que desea conectar con una base de datos usando la autenticación integrada Kerberos con la implementación Kerberos pura de Java:
Si desea usar la autenticación integrada mediante Krb5LoginModule, debe seguir especificando la propiedad de conexión integratedSecurity=true. Entonces, también tiene que especificar la propiedad de conexión authenticationScheme=JavaKerberos.
Para seguir usando la autenticación integrada con sqljdbc_auth.dll, basta con especificar la propiedad de conexión integratedSecurity=true (y opcionalmente authenticationScheme=NativeAuthentication).
Si especifica authenticationScheme=JavaKerberos pero no integratedSecurity=true, el controlador omitirá la propiedad de conexión authenticationScheme y esperará hasta que encuentre las credenciales de nombre de usuario y contraseña en la cadena de conexión.
Cuando se usa un origen de datos para crear conexiones, se puede establecer mediante programación el esquema de autenticación mediante setAuthenticationScheme.
Se ha agregado un nuevo registrador para admitir la autenticación Kerberos: com.microsoft.sqlserver.jdbc.internals.KerbAuthentication. Para obtener más información, vea Hacer un seguimiento del funcionamiento del controlador.
Las directrices siguientes le ayudarán a configurar Kerberos:
Establezca AllowTgtSessionKey en 1 en el Registro de Windows. Para obtener más información, vea Entradas del Registro del protocolo Kerberos y claves de configuración del KDC en Windows Server 2003.
Asegúrese de que la configuración de Kerberos (krb5.conf en entornos UNIX) apunta al dominio Kerberos y al KDC correctos para su entorno.
Inicialice la memoria caché del TGT mediante kinit o iniciando sesión en el dominio.
Cuando una aplicación que usa authenticationScheme=JavaKerberos se ejecuta en los sistemas operativos Windows Vista o Windows 7, debe emplear una cuenta de usuario estándar. Sin embargo, si ejecuta la aplicación en una cuenta de administrador, la aplicación debe ejecutarse con privilegios de administrador.
Nombres de entidad de seguridad de servicio
Un nombre de entidad de seguridad de servicio (SPN) es el nombre por el cual un cliente identifica de manera única una instancia de un servicio. Para obtener más información sobre los nombres de entidad de seguridad de servicio (SPN), vea:
Crear un archivo de configuración de un módulo de inicio de sesión
Si lo desea, puede especificar un archivo de configuración de Kerberos. Si no se especifica ningún archivo de configuración, se usarán las configuraciones siguientes:
Si decide crear un archivo de configuración de un módulo de inicio de sesión, el archivo debe seguir este formato:
<name> { <LoginModule> <flag> <LoginModule options>; <optional_additional_LoginModules, flags_and_options>; };
Un archivo de configuración de inicio de sesión consta de una o varias entradas, cada una de las cuales especifica qué tecnología de autenticación subyacente se debe usar para una o varias aplicaciones determinadas. Por ejemplo,
SQLJDBCDriver { com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true doNotPrompt=true; };
Cada entrada de un archivo de configuración de un módulo de inicio de sesión consta de un nombre seguido de una o varias entradas específicas del módulo, donde cada una de estas entradas termina con un signo de punto y coma y todo el grupo de entradas específicas del módulo está entre llaves. Cada entrada del archivo de configuración termina con un signo de punto y coma.
Además de permitir al controlador adquirir credenciales de Kerberos usando las configuraciones especificadas en el archivo de configuración del módulo de inicio de sesión, el controlador puede emplear credenciales existentes. Esto puede resultar útil cuando la aplicación necesite crear conexiones usando credenciales de más de un usuario.
El controlador intentará usar credenciales existentes si están disponibles, antes de intentar el inicio de sesión usando el módulo de inicio de sesión especificado. Así, cuando se usa el método Subject.doAs para ejecutar código bajo un contexto determinado, se creará una conexión con las credenciales pasadas a la llama a Subject.doAs.
Para obtener más información, vea Archivo de configuración de inicio de sesión JAAS y Clase Krb5LoginModule.
Crear un archivo de configuración de Kerberos
Para obtener más información sobre los archivos de configuración de Kerberos, vea Requisitos de Kerberos.
A continuación se muestra un archivo de configuración de dominio de ejemplo, donde YYYY e ZZZZ son nombres de dominio de su sitio.
[libdefaults] default_realm = YYYY.CORP.CONTOSO.COM dns_lookup_realm = false dns_lookup_kdc = true ticket_lifetime = 24h forwardable = yes [domain_realm] .yyyy.corp.contoso.com = YYYY.CORP.CONTOSO.COM .zzzz.corp.contoso.com = ZZZZ.CORP.CONTOSO.COM [realms] YYYY.CORP.CONTOSO.COM = { kdc = krbtgt/YYYY.CORP. CONTOSO.COM @ YYYY.CORP. CONTOSO.COM default_domain = YYYY.CORP. CONTOSO.COM } ZZZZ.CORP. CONTOSO.COM = { kdc = krbtgt/ZZZZ.CORP. CONTOSO.COM @ ZZZZ.CORP. CONTOSO.COM default_domain = ZZZZ.CORP. CONTOSO.COM }
Habilitar el archivo de configuración de dominio y el archivo de configuración del módulo de inicio de sesión
Puede habilitar un archivo de configuración de dominio con -Djava.security.krb5.conf. Puede habilitar un archivo de configuración de módulo de inicio de sesión con -Djava.security.auth.login.config.
Por ejemplo, al iniciar la aplicación podría usar esta línea de comandos:
Java.exe -Djava.security.auth.login.config=SQLJDBCDriver.conf -Djava.security.krb5.conf=krb5.ini <APPLICATION_NAME>
Comprobar que se puede obtener acceso a SQL Server mediante Kerberos
Ejecute la consulta siguiente en SQL Server Management Studio:
select auth_scheme from sys.dm_exec_connections where session_id=@@spid
Asegúrese de que tiene el permiso necesario para ejecutar esta consulta.