JDBC SQLServerException: “Este controlador no está configurado para la autenticación integrada”.

8 minutos de lectura

Avatar de usuario de Shaul Behr
Shaul Behr

Estoy escribiendo una “extensión del lado del servidor” para Servidor SmartFox (SFS). En mi secuencia de comandos de inicio de sesión, necesito establecer una conexión con MS SQL Server, lo que intento hacer con JDBC. He probado el código JDBC en mi entorno de depuración y funciona bien.

PERO

Cuando coloco la extensión del lado del servidor en la carpeta de “extensiones” de SFS (según las especificaciones), obtengo un com.microsoft.sqlserver.jdbc.SQLServerException:

“Este controlador no está configurado para la autenticación integrada”.

Busqué en Google este error y descubrí que generalmente se debe a que el archivo sqljdbc_auth.dll no está en la ruta del sistema; He copiado este archivo en una carpeta en la ruta de mi sistema, ¡y todavía no funciona!

¿Cualquier otra sugerencia?

Al utilizar la seguridad integrada de autenticación de Windows

  1. Descargar el sqljdbc_6.0.8112.100_enu.exe del sitio de Microsoft
  2. Instale el exe (lea las instrucciones en la ruta zip)
  3. copie sqljdbc_4.0/enu/auth/x64/sqljdbc_auth.dll a

    Java/jre7/bin y para

    Java/jre7/lib

Después de esto, debería poder conectarse a las herramientas de hibernación para extraer la base de datos en Herramientas de datos

  • Copiar al directorio bin de Java es suficiente

    – isapir

    13 de junio de 2018 a las 17:27

  • Para mí, poner en jdk/bin y jre/bin correspondientes fue suficiente.

    – zigimanto

    19 de abril de 2020 a las 13:15

  • Copié ese archivo EN TODAS PARTES. Necesitaba esto para usar Oracle DataModeler, así que abrí C:\Program Files\OracleDataModeler y copié este archivo en .\jdk\lib, .\jdk\jre\bin, .\jdk\jre\lib, .\jdbc\liby .\jlib. ¡Y funciona!

    – Sr. TA

    10 de marzo de 2021 a las 15:09

  • NOTA: A partir de la versión 8 del controlador JDBC de Microsoft, el archivo sqljdbc_auth.dll ha sido renombrado a mssql-jdbc_auth-xxxxxx.dll mientras que el JDK/JRE todavía puede querer el sqljdbc_auth.dll nombre. También asegúrese de copiar los archivos de la carpeta adecuada. Si tiene un JDK/JRE de 32 bits, necesita el dll en x86; de lo contrario, debe copiar el dll en x64

    – Bemipefe

    26 abr a las 13:15

  • Asegúrese de que la versión de su .dll coincida exactamente con la versión del archivo sqljdbc.jar. Perdió una hora por un error de 0.1.

    – Hermano Martillo.

    hace 10 horas


Avatar de usuario de Luke Woodward
Lucas Woodward

Hay diferentes versiones de sqljdbc_auth.dll para diferentes arquitecturas de procesador (x86/x64/ia64). ¿Cuál estás usando en tu servidor SFS?

Debe elegir el que coincida con la arquitectura de la JVM en la que se ejecuta SFS. Entonces, si está ejecutando Java de 32 bits en una máquina de 64 bits, necesitará la versión x86, no la versión x64.

No he usado SFS antes, así que no sé si escribe algún registro en alguna parte. Si es así, podría valer la pena echar un vistazo a estos registros para ver si se les ha escrito algo útil.

EDITAR: No puedo estar 100% seguro de que SFS esté usando Java de 64 bits solo porque se queda sin C:\Archivos de programa en lugar de C:\Archivos de programa (x86).

Encontré la siguiente línea en el documentos SFS en Introducción > Requisitos e instalación. Si bien esta línea se aplica solo a Linux en lugar de Windows, podría sugerir que SFS en Windows también usa Java de 32 bits:

Desde la versión 1.5 SmartFoxServer viene con su propio Sun Java Runtime x86 de 32 bits.

Una forma rápida de determinar qué versión(es) de Java ha instalado es dar el siguiente comando en su cmd: Java -version

Mostrará lo siguiente en la consola:

C:\Users\967097>java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Aquí puede ver el tipo de bit de la versión de Java instalada.

¿Funciona su aplicación si usa la versión x86 de sqljdbc_auth.dll en lugar de la versión x64? Si de repente comienza a funcionar con la DLL x86, entonces SFS debe estar usando Java de 32 bits.

¿Se utiliza un archivo por lotes para iniciar SFS? Si es así, leer eso podría ayudar a señalar desde dónde SFS está ejecutando Java. También esté atento a cualquier cambio en el PATH. Java solo puede cargar archivos DLL en el java.library.path propiedad del sistema, y ​​en Windows, esto se establece en el valor de la PATH Variable ambiental.

Si aún no puede determinar si SFS usa Java de 32 bits o de 64 bits, intente usar Process Explorer para observar el entorno con el que se inició el proceso java.exe que ejecuta SFS.

  • Todo es de 64 bits; la instalación de SFS se está quedando sin mi carpeta “Archivos de programa” (como opp a “Archivos de programa (x86)”). ¿Puedo suponer que la JVM también es de 64 bits? ¿Cómo podría saberlo?

    – Shaul Behr

    22 de mayo de 2011 a las 12:55

  • Dios mío, esto es salvaje. Experimenté y copié la versión x86 de la DLL en la carpeta de extensiones, ¡y funcionó! Eso es totalmente salvaje: supuestamente un servidor de 64 bits, ¡pero está ejecutando una versión de 32 bits de la JVM! (En otras palabras, ¡ganaste el premio gordo!)

    – Shaul Behr

    22 de mayo de 2011 a las 13:03


  • @Shaul: me alegro de que lo hayas descubierto. Estaba en el proceso de agregar más información a mi respuesta para ayudarlo, ¡pero parece que no lo necesitaba! 🙂

    – Lucas Woodward

    22 de mayo de 2011 a las 13:27

En mi caso, hice lo siguiente para resolver:

Descargado el controlador JDBC de Microsoft 8.2 para SQL Server (zip) (que se encuentra aquí – https://learn.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15).

Luego, en el archivo zip, entré en las siguientes carpetas:

sqljdbc_8.2 > enu > autenticación > x64

y el “mssql-jdbc_auth-8.2.2.x64.dll” copiado en C:\Program Files\Java\jdk-12.0.1\bin

  • Esta es, de hecho, la respuesta más fácil y correcta también.

    – juanchavezlive

    6 de agosto de 2021 a las 22:17

  • Encontré esto muy útil para resolver el error de SSL al conectar Oracle Data Modeler a un mssql que rechaza las conexiones que no son SSL.

    – glezo

    7 abr a las 12:12

Coloque el archivo .dll en su carpeta JRE: –

También estaba enfrentando el mismo problema y luego coloqué sqljdbc_auth.dll (x86 o x64) dependiendo de su sistema operativo en la carpeta JRE, es decir, jre7/bin/file.dll y luego ejecuté mi application.jar y funcionó perfectamente. Esto funcionó para mí, también puedes probar esto, puede que esto también te ayude 🙂

me había enfrentado al mismo problema para la siguiente cadena de autenticación de Windows

jdbc:sqlserver://host:1433;integratedSecurity=true

el esquema de autenticación predeterminado = autenticación nativa, por lo que podría depender de algunos dlls de Microsoft. Para solucionarlo, actualice el esquema de autenticación como NTLM como se muestra a continuación

jdbc:sqlserver://host:1433;authenticationScheme=NTLM;integratedSecurity=true;domain=myDomain

Nota: el nombre de usuario proporcionado no tenía dominio

  • Lo que necesitaba era agregar authenticationScheme=NTLM para que las herramientas de JPA funcionaran en Eclipse con la autenticación integrada de Windows (WIA). Luego se requiere ID de usuario y contraseña, pero la autenticación es con WIA. Nada más funcionó.

    – Tony B.

    25 de febrero de 2021 a las 22:04

  • ¿Qué es “myDomain” en la cadena de conexión?

    – Ansari danés

    3 de agosto de 2021 a las 16:26

  • dominio para el nombre de usuario de Windows

    – U_R_Naveen UR_Naveen

    4 de agosto de 2021 a las 13:20

  • ¡Excelente! No necesitaba el NTLM pero esto (junto con la copia de sqljdbc_auth.dll en la ruta adecuada, en mi caso /libswt para Pentaho Data Integration como dice la documentación) hizo el trabajo.

    – Raúl Moreno

    10 de septiembre de 2021 a las 12:18

  • Pude conectarme a una base de datos de SQL Server utilizando Erwin Data Modeler, ingeniería inversa. No necesitaba el dominio, pero necesitaba autenticaciónScheme=NTLM e IntegratedSecurity=true. ¡Gracias!

    – Shanemeister

    1 de diciembre de 2021 a las 22:39

Avatar de usuario de CLUTCHER
EMBRAGUE

Descargue el controlador jdbc (ver 7.2) de Microsoft y copie el sqljdbc_auth.dll a la carpeta C:\Program Files\Java\jre\bin y C:\Program Files\Java\jdk\bin. Iría a la carpeta Archivos de programa (x86) si está ejecutando Java de 32 bits.

  • Lo que necesitaba era agregar authenticationScheme=NTLM para que las herramientas de JPA funcionaran en Eclipse con la autenticación integrada de Windows (WIA). Luego se requiere ID de usuario y contraseña, pero la autenticación es con WIA. Nada más funcionó.

    – Tony B.

    25 de febrero de 2021 a las 22:04

  • ¿Qué es “myDomain” en la cadena de conexión?

    – Ansari danés

    3 de agosto de 2021 a las 16:26

  • dominio para el nombre de usuario de Windows

    – U_R_Naveen UR_Naveen

    4 de agosto de 2021 a las 13:20

  • ¡Excelente! No necesitaba el NTLM pero esto (junto con la copia de sqljdbc_auth.dll en la ruta adecuada, en mi caso /libswt para Pentaho Data Integration como dice la documentación) hizo el trabajo.

    – Raúl Moreno

    10 de septiembre de 2021 a las 12:18

  • Pude conectarme a una base de datos de SQL Server utilizando Erwin Data Modeler, ingeniería inversa. No necesitaba el dominio, pero necesitaba autenticaciónScheme=NTLM e IntegratedSecurity=true. ¡Gracias!

    – Shanemeister

    1 de diciembre de 2021 a las 22:39

avatar de usuario de raj
raj

tuve un problema similar y coloqué la ubicación del archivo .dll en pom.xml debajo

-Djava.library.path=”C:\*\\**”

y eso funciono para mi

¿Ha sido útil esta solución?