En muchos escenarios se nos presenta la necesidad de usar autenticación integrada para acceder a los orígenes de datos necesarios para alimentar nuestro sistema analítico. Con el uso cada vez más extendido de Azure, como al menos parte de nuestra infraestructura, algunos de estos orígenes van a estar alojados en bases de datos en Azure. En este caso vamos hablar de un error real que hemos tenido en la configuración y uso de la autenticación integrada contra bases de datos Azure con SSIS.

Microsoft te referencia hacía esta documentación para tratar de entender el paradigma de la autenticación integrada con Azure, y como configurar y administrar la autenticación de Azure Active Directory con SQL Database, una Instancia administrada o SQL Data Warehouse: https://docs.microsoft.com/es-es/azure/sql-database/sql-database-aad-authentication-configure.

 Azure_AD_Authentication_with_SQL_V12_DB.jpg

Sin entrar en detalle de la configuración de la Base de datos, y otros puntos a nivel de infraestructura para poder configurar correctamente el uso de AAD en nuestra empresa, nos vamos a centrar en el uso de la autenticación AAD para consumir información mediante SSIS desde Bases de datos Azure. Es decir, ¿qué debemos configurar desde el lado cliente para poder conectarnos desde SSIS OnPremise a una instancia SQL Azure Database y consumir información mediante un usuario AAD?

Según la propia documentación de Microsoft es necesario lo siguiente:

  • .NET Framework 4.6 o posterior desde https://msdn.microsoft.com/library/5a4x27ek.aspx.
  • La Biblioteca de autenticación de Azure Active Directory para SQL Server (ADALSQL.DLL) está disponible en varios idiomas (x86 y amd64) en el centro de descarga en la sección Biblioteca de autenticación de Microsoft Active Directory para Microsoft SQL Server.

 

Como podréis ver en la documentación se detalla la versión de .NET Framework necesaria pero no así la versión de la biblioteca de Autenticación para SQL Server ADALSQL.DLL. Además, tanto en el enlace de la documentación como en una búsqueda sobre esta librería te lleva al siguiente enlace: https://www.microsoft.com/en-us/download/details.aspx?id=48742 el cual se puede descargar la versión 13.0.200.152 de la misma:

Details SQL Server Version 13.0.200.152

En este caso hemos utilizado el componente ADO NET Source (SqlClient Data Provider) para hacer la autenticación integrada con una cuenta AAD.

Una vez tenemos la librería descargada e instalada y el .Net Framework en su última versión creamos un paquete SSIS conectado mediante ADO NET a la base de datos de Azure usando una cadena de conexión del siguiente estilo (código de ejemplo):

Data Source=n9lxnyuzhv.database.windows.net; Authentication=Active Directory Integrated; Initial Catalog=testdb;

Ahora bien, una vez ejecutamos este paquete desde OnPremise obtenemos el siguiente error:

ADO NET Source has failed to acquire the connection {EB918ABB-4C3C-4F23-9C9A-2BE58CA444A6} with the following error message: “Failed to authenticate the user NT Authority\Anonymous Logon in Active Directory (Authentication=ActiveDirectoryIntegrated). Error code 0xCAA9001F; state 10 Integrated Windows authentication supported only in federation flow.”

Tras verificar que hemos seguido los pasos del artículo mencionado anteriormente para dar acceso al usuario con en la base de datos Azure, y hacer muchas pruebas llegamos a la conclusión que el problema radica en la versión de la librería ADALSQL.DLL. Y es que con la instalación de la última versión publicada no es suficiente, y se debe instalar una versión posterior. El “problema” está en que esta versión de la librería no está liberada de forma independiente y se debe instalar el SSMS 17.x (en su última versión a ser posible) para lograr tener dicha librería actualizada a su versión. Tras abrir un caso con Microsoft no nos logró reportar la librería ADALSQL.DLL de forma aislada y nos recomendó la instalación de la última versión disponible en ese momento (17.7) en el entorno de UAT y PRO para solucionar el problema y lograr tener la última versión de la librería instalada.

Como conclusión para un correcto funcionamiento de la autenticación integrada desde SSIS contra una base de datos en Azure recomendamos seguir los siguientes pasos:

  1. Seguir los pasos del artículo https://docs.microsoft.com/es-es/azure/sql-database/sql-database-aad-authentication-configure para que el usuario AAD que utilicemos desde SSIS tenga los permisos suficientes sobre la base de datos, ya que se tratan de una pasos diferentes a darles permisos a un usuario AD sobre una base de datos OnPremise.
  2. Tener al menos la versión de .NET Framework 4.6.
  3. Tener la última versión SSMS instalada (al menos las 17.7) para lograr tener la versión correcta del ADALSQL.DLL instalada.
  4. Utilizar un origen de datos ADO NET Source (SqlClient Data Provider y Odbc Data Provider) con una cadena de conexión con la siguiente estructura, nótese que no admite el SSPI: Data Source=n9lxnyuzhv.database.windows.net; Authentication=Active Directory Integrated; Initial Catalog=testdb;
  5. Utilizar una cuenta proxy desde la llamada al paquete de SSIS que lo ejecute con las credenciales a las que se les haya dado permiso en la base de datos Azure.