Artículo
· 19 hr atrás Lectura de 4 min

Conexión de JDBC a MS Azure SQL a través de Microsoft Entra y autenticación con contraseña de Active Directory

No estoy seguro de que haya muchos que se conecten a MS SQL para ejecutar consultas, procedimientos almacenados, etc., pero nuestro sistema de salud tiene muchas bases de datos diferentes basadas en MS SQL que usamos en el entorno de interoperabilidad por diversas razones.

Con el impulso de movernos de on-premises a la nube, nos encontramos con algunas dificultades con nuestras conexiones SQL Gateway y cómo configurarlas para usar Microsoft Entra para la autenticación de Active Directory.

Hay muchos artículos en la web, pero ninguno nos dio la respuesta completa sobre lo que necesitábamos hacer, y Microsoft no fue de mucha ayuda.
Pensé en escribir esto, por si pudiera ayudar a otros.


Contexto
Actualmente estamos ejecutando RedHat 8.10 y openjdk versión "1.8.0_432". Usamos SQL Gateway para conectarnos a MS SQL con el controlador mssql-jdbc-12.2.0.jre8.jar utilizando una cuenta de servicio de Active Directory.
jdbc:sqlserver://<server>:<port>;database=<database>;trustServerCertificate=true;integratedSecurity=true;authenticationScheme=NTLM;domain=<domain>;authentication=NotSpecified

 

Cuando la base de datos se trasladó a Azure SQL, me proporcionaron una nueva URL que incluía
jdbc:sqlserver://<server>:<port>;databaseName=<database>;domain=<domain>;encrypt=true;trustServerCertificate=true;hostNameInCertificate=<server name>;Authentication=ActiveDirectoryPassword

 

Cuando hice click en Test Connection (Probar conexión) obtuve: 
Remote JDBC error: com.microsoft.sqlserver.jdbc.SQLServerException: Failed to load MSAL4J Java library for performing ActiveDirectoryPassword authentication..

Intenté actualizar el controlador MS SQL JDBC a mssql-jdbc-12.8.1.jre8.jar, pero obtuve el mismo error, así que algo seguía faltando.

Luego intenté conectarme usando DBeaver y, después de algunos ajustes en la cuenta, finalmente lo logré. Descargué el archivo de clase que DBeaver estaba utilizando y subí los archivos jar a mi servidor.

Trabajando con WRC, actualicé mi %JDBC Server para usar la ruta hacia los archivos jar adicionales y dejé mi controlador como la Class Path en mi cadena de conexión de SQL Gateway.

Sin embargo, la prueba de conexión seguía arrojando un error.


Instalando Maven

Microsoft me recomendó actualizar Maven, pero no tenía idea de qué era ni cómo usarlo. Intenté descargar manualmente msal4j.jar, pero seguía encontrándome con error tras error. El repositorio de Maven listaba dependencias, así que intenté descargar manualmente todos los archivos jar de dependencia, pero aún así no lograba que funcionara.

Hay muchas maneras de instalar Maven, pero usé el artículo How to Install Maven on Windows, Linux, and Mac | Baeldung para descubrir cómo descargarlo para mi servidor, ya que el comando “yum install maven” no encontraba el repositorio para descargarlo.

Una vez descargado e instalado, tuve que agregar las variables $JAVA_HOME, $M2_HOME y $MAVEN_HOME a mi archivo .profile.


Descarga e instalación del archivo jar necesario y sus dependencias

En mi proceso de solución de problemas para conectarme a Azure SQL, seguía recibiendo un mensaje de error relacionado con msal4j.jar.
Usando Maven desde la línea de comandos, ejecuté:


:>mvn dependency:get -Dartifact=com.microsoft.azure:msal4j:1.18.0

Lo que hizo fue descargar msal4j.jar y todas sus dependencias en el repositorio .m2 del servidor local.
Desde ahí, quería obtener los archivos jar y copiarlos a la estructura de directorios que había configurado para IRIS. Así que ejecuté:


:>mvn dependency:copy-dependencies -f /archive/.m2/repository/com/microsoft/azure/msal4j/ -DoutputDirectory=/nfs/data/drivers/java/

Pero usando Maven, aún tienes que copiar el msal4j.jar, así que copié manualmente ese archivo jar desde la estructura del repositorio .m2 a /nfs/data/drivers/java/

Actualizando %JDBC Server y la cadena de conexión de SQL Gateway

Para conectarme con éxito, tuve que asegurarme de que todos los archivos jar adecuados estuvieran definidos dentro de las rutas de clase.

Entonces, en el %JDBC Server, establecí la ruta de clase a /nfs/data/drivers/java/*, que contenía el msal4j.jar y todas sus dependencias.
Dentro de la conexión de SQL Gateway, tuve que verificar que el usuario tuviera el dominio adecuado definido, volví a ingresar la contraseña, hice clic en Test Connection y pude obtener una "Conexión exitosa".


Al final, lo más difícil fue saber cómo descargar msal4j.jar y sus dependencias para asegurar que la autenticación adecuada a través de Microsoft Entra se llevara a cabo.

Así que, con suerte, esto ayudará a alguien en el futuro cuando intente conectarse a Azure SQL Server utilizando la autenticación de contraseña de Active Directory a través de Microsoft Entra.

Comentarios (0)1
Inicie sesión o regístrese para continuar