Compartir vía


Uso de Microsoft Entra ID con el controlador ODBC

Descargar controlador ODBC

Nota:

Aunque Microsoft Entra ID es el nuevo nombre de Azure Active Directory (Azure AD), para evitar interrumpir los entornos existentes, Azure AD sigue estando en algunos elementos codificados de forma rígida como campos de interfaz de usuario, proveedores de conexiones, códigos de error y cmdlets. En este artículo, los dos nombres son intercambiables.

Fin

La versión 13.1 de Microsoft ODBC Driver for SQL Server o superior permite que las aplicaciones ODBC se conecten a la base de datos de Azure SQL o Azure SQL Managed Instance mediante identidades en Microsoft Entra ID. La autenticación se puede realizar con un nombre de usuario y una contraseña, un token de acceso de Microsoft Entra, una identidad administrada de Microsoft Entra (17.3 y versiones posteriores) o autenticación integrada de Windows en un entorno federado unido a un dominio (17.6 y versiones posteriores en Linux/macOS). Para la versión 13.1 del controlador ODBC, la autenticación del token de acceso de Microsoft Entra es solo Windows. La versión 17 del controlador ODBC y versiones posteriores admiten esta autenticación en todas las plataformas (Windows, Linux y macOS). Un nuevo método de autenticación interactiva de Microsoft Entra, que admite la autenticación multifactor, se presenta en la versión 17.1 del controlador ODBC para Windows. Se agregó un nuevo método de autenticación de identidad administrada de Microsoft Entra en la versión 17.3.1.1 del controlador ODBC para las identidades asignadas por el sistema e identidades administradas asignadas por el usuario. Todas estas opciones se logran mediante el uso de nuevas palabras clave de cadena de conexión y DSN, y atributos de conexión.

Para usar la autenticación de Microsoft Entra, debes configurar el origen de datos de Azure SQL. Para obtener más información, consulte Configuración y administración de la autenticación de Microsoft Entra con Azure SQL.

Nota:

El controlador ODBC en Linux y macOS anterior a la versión 17.6 solo admite la autenticación de Microsoft Entra directamente en Microsoft Entra ID. Si vas a usar la autenticación de nombre de usuario o contraseña de Microsoft Entra desde un cliente Linux o macOS, y la configuración de Microsoft Entra requiere que el cliente se autentique sobre un punto de conexión de Servicios de federación de Microsoft Entra, se puede producir un error en la autenticación. Esta limitación se ha quitado a partir de la versión 17.6 del controlador.

Palabras clave de cadena de conexión y DSN nuevas y/o modificadas

Se puede usar la palabra clave Authentication al conectarse con un DSN o una cadena de conexión para controlar el modo de autenticación. El valor definido en la cadena de conexión reemplaza al del DNS, si se proporciona. El valor de atributo anterior del parámetro Authentication es el valor calculado a partir de la cadena de conexión y los valores de DSN.

Nombre Valores Valor predeterminado Descripción
Authentication (sin establecer), (cadena vacía), SqlPassword, ActiveDirectoryPassword, ActiveDirectoryIntegrated, ActiveDirectoryInteractive, ActiveDirectoryMsi, ActiveDirectoryServicePrincipal (sin establecer) Controla el modo de autenticación.
ValueDescripción
(sin establecer)Modo de autenticación determinado por otras palabras clave (opciones de conexión heredadas existentes).
(cadena vacía)(Solo cadena de conexión) Invalide y anule un valor de Authentication establecido en el DSN.
SqlPasswordAutentícate directamente en una instancia de SQL mediante un nombre de usuario y una contraseña.
ActiveDirectoryPasswordAutentícate con una identidad de Microsoft Entra mediante un nombre de usuario y una contraseña.
ActiveDirectoryIntegratedWindows y Linux/Mac con la versión 17.6 y posteriores, solo controlador. Autentícate con una credencial de Windows federada a través de Microsoft Entra ID con autenticación integrada.
ActiveDirectoryInteractiveSolo controlador de Windows. Autentícate con una identidad de Microsoft Entra mediante la autenticación interactiva.
ActiveDirectoryMsiAutentícate con una identidad administrada de Microsoft Entra. En el caso de una identidad asignada por el usuario, establezca UID en el identificador de cliente de la identidad para Azure App Service o Azure Container Instance; de lo contrario, use su identificador de objeto. En el caso de la identidad asignada por el sistema, no se requiere UID.
ActiveDirectoryServicePrincipal(17.7 y versiones posteriores) Autentícate como entidad de servicio de Microsoft Entra. UID se establece en el identificador de cliente de la entidad de servicio. PWD se establece en el secreto de cliente.
Encrypt (no establecido), Yes/Mandatory(18.0+), No/Optional(18.0+), Strict(18.0+) (consulte la descripción) Controla el cifrado de una conexión. Si el valor de atributo anterior del parámetro Authentication no es none en el DSN o en la cadena de conexión, el valor predeterminado es Yes. El valor predeterminado también es Yes en las versiones 18.0.1 y posteriores. De lo contrario, el valor predeterminado es No. Si el atributo SQL_COPT_SS_AUTHENTICATION invalida el valor de atributo anterior de Authentication, establezca explícitamente el valor de Encryption en el DSN, la cadena de conexión o el atributo de conexión. El valor de atributo anterior de Encryption es Yes si el valor se establece en Yes en el DSN o en la cadena de conexión.

Atributos de conexión nuevos o modificados

Se han incorporado o modificado los siguientes atributos de conexión anteriores a la conexión para admitir la autenticación de Microsoft Entra. Cuando un atributo de conexión tiene una cadena de conexión o una palabra clave de DSN correspondientes y se establece, el atributo de conexión tiene prioridad.

Atributo Tipo Valores Valor predeterminado Descripción
SQL_COPT_SS_AUTHENTICATION SQL_IS_INTEGER SQL_AU_NONE, SQL_AU_PASSWORD, SQL_AU_AD_INTEGRATED, SQL_AU_AD_PASSWORD, SQL_AU_AD_INTERACTIVE, SQL_AU_AD_MSI, SQL_AU_AD_SPA, SQL_AU_RESET (sin establecer) Consulte la descripción de la palabra clave Authentication anteriormente. SQL_AU_NONE se proporciona para reemplazar de forma explícita un valor Authentication establecido en el DSN o la cadena de conexión, mientras SQL_AU_RESET desactiva el atributo si se ha establecido, lo que permite que el valor de la cadena de conexión o DSN tenga prioridad.
SQL_COPT_SS_ACCESS_TOKEN SQL_IS_POINTER Puntero a ACCESSTOKEN o NULL NULL Si no es NULL, especifica el token de acceso de Microsoft Entra que se va a usar. Es un error especificar un token de acceso y también las palabras clave de cadena de conexión UID, PWD, Trusted_Connection o Authentication, o bien sus atributos equivalentes.
NOTA: La versión 13.1 del controlador ODBC solo admite este valor en Windows.
SQL_COPT_SS_ENCRYPT SQL_IS_INTEGER SQL_EN_OFF, SQL_EN_ON (consulte la descripción) Controla el cifrado de una conexión. SQL_EN_OFF y SQL_EN_ON deshabilitan y habilitan el cifrado, respectivamente. Si el valor de atributo anterior del valor Authentication no es none , o bien SQL_COPT_SS_ACCESS_TOKEN está establecido y Encrypt no se ha especificado en el DSN o en la cadena de conexión, el valor predeterminado es SQL_EN_ON. De lo contrario, el valor predeterminado es SQL_EN_OFF. Si el atributo de conexión SQL_COPT_SS_AUTHENTICATION se establece en no none , establezca de forma explícita SQL_COPT_SS_ENCRYPT en el valor deseado si no se ha especificado Encrypt en el DSN o la cadena de conexión. El valor efectivo de este atributo controla si se utiliza el cifrado para la conexión.
SQL_COPT_SS_OLDPWD - - - No se admite con Microsoft Entra ID, ya que los cambios de contraseña en las entidades de seguridad de Microsoft Entra no se pueden realizar a través de una conexión ODBC.

La expiración de contraseñas para la autenticación de SQL Server se incorporó en SQL Server 2005. Se ha agregado el atributo SQL_COPT_SS_OLDPWD para permitir que el cliente especifique la contraseña antigua y la nueva contraseña para la conexión. Cuando esta propiedad está establecida, el proveedor no usará el grupo de conexiones para la primera conexión o para conexiones posteriores, ya que la cadena de conexión contiene la "contraseña antigua", que ahora ha cambiado.
SQL_COPT_SS_INTEGRATED_SECURITY SQL_IS_INTEGER SQL_IS_OFF,SQL_IS_ON SQL_IS_OFF En desuso; en su lugar, use SQL_COPT_SS_AUTHENTICATION establecido en SQL_AU_AD_INTEGRATED.

Fuerza el uso de la autenticación de Windows (Kerberos en Linux y macOS) para la validación de acceso en el inicio de sesión del servidor. Cuando se usa la autenticación de Windows, el controlador omite el identificador de usuario y los valores de contraseña proporcionados como parte del procesamiento de SQLConnect, SQLDriverConnect o SQLBrowseConnect.

Adiciones de UI para Microsoft Entra ID (solo driver de Windows)

Las UI de conexión e instalación de DSN del controlador se han mejorado con más opciones necesarias para usar la autenticación con Microsoft Entra ID.

Creación y edición de nombres de orígenes de datos (DSN) en la interfaz de usuario

Es posible usar las nuevas opciones de autenticación de Microsoft Entra al crear o editar un DSN existente mediante la UI de instalación del controlador:

Authentication=ActiveDirectoryIntegrated para la autenticación integrada de Microsoft Entra en Azure SQL

La pantalla de creación y edición de DSN con la autenticación integrada de Microsoft Entra seleccionada.

Authentication=ActiveDirectoryPassword para la autenticación del nombre de usuario o contraseña de Microsoft Entra para Azure SQL

La pantalla de creación y edición de DSN con la autenticación de contraseña de Microsoft Entra seleccionada.

Authentication=ActiveDirectoryInteractive para la autenticación interactiva de Microsoft Entra para Azure SQL

La pantalla de creación y edición de DSN con la autenticación interactiva de Microsoft Entra seleccionada.

Nota:

A partir de la versión 17.9 del controlador, el comportamiento de autenticación interactiva ha cambiado. Siempre se solicitarán credenciales a los usuarios a menos que el controlador tenga un token de acceso válido almacenado en caché. Este cambio impide que los usuarios de dispositivos unidos a Microsoft Entra omitan el símbolo del sistema e inicien sesión automáticamente con credenciales almacenadas en caché al usar la autenticación ActiveDirectoryInteractive.

Authentication=SqlPassword para la autenticación de nombre de usuario o contraseña en SQL Server y Azure SQL

La pantalla de creación y edición de DSN con la autenticación de SQL Server seleccionada.

Trusted_Connection=Yes para la autenticación integrada SSPI heredada de Windows

La pantalla de creación y edición de DSN con la autenticación integrada de Windows seleccionada.

Authentication=ActiveDirectoryMsi para la autenticación de identidades administradas de Microsoft Entra

La pantalla de creación y edición de DSN con la autenticación de Managed Service Identity seleccionada.

Authentication=ActiveDirectoryServicePrincipal para la autenticación de entidad de servicio de Microsoft Entra

Pantalla de creación y edición de DSN con la autenticación de la entidad de servicio de Microsoft Entra seleccionada.

Las siete opciones corresponden a Trusted_Connection=Yes (autenticación integrada existente solo con SSPI para Windows heredado) y Authentication= ActiveDirectoryIntegrated, SqlPassword, ActiveDirectoryPassword, ActiveDirectoryInteractive, ActiveDirectoryMsi y ActiveDirectoryServicePrincipal, respectivamente.

Solicitud de SQLDriverConnect (solo controlador de Windows)

El cuadro de diálogo de solicitud que muestra SQLDriverConnect cuando solicita información necesaria para completar la conexión contiene cuatro nuevas opciones para la autenticación de Microsoft Entra:

Cuadro de diálogo de inicio de sesión de SQL Server que se muestra en SQLDriverConnect.

Estas opciones se corresponden con las mismas seis disponibles en la interfaz de usuario de instalación de DSN anterior.

Ejemplos de cadena de conexión

  1. Autenticación de SQL Server: sintaxis heredada. No se valida el certificado de servidor y el cifrado solo se usa si el servidor lo exige. El nombre de usuario/contraseña se pasa en la cadena de conexión.

    server=Server;database=Database;UID=UserName;PWD=Password;Encrypt=no;TrustServerCertificate=yes;

  2. Autenticación de SQL: nueva sintaxis. El cliente solicita el cifrado (el valor predeterminado de Encrypt es true) y se valida el certificado de servidor, con independencia del valor de cifrado (a menos que TrustServerCertificate se establezca en true). El nombre de usuario/contraseña se pasa en la cadena de conexión.

    server=Server;database=Database;UID=UserName;PWD=Password;Authentication=SqlPassword;

  3. Autenticación integrada de Windows (Kerberos en Linux y macOS) mediante SSPI (para una IaaS de SQL Server o SQL): sintaxis actual. El certificado del servidor no se valida, a menos que el servidor requiera cifrado.

    server=Server;database=Database;Trusted_Connection=yes;Encrypt=no;

  4. (Solo controlador de Windows). Autenticación integrada de Windows mediante SSPI (si la base de datos de destino se encuentra en SQL Server o SQL Server en las VM de Azure): nueva sintaxis. El cliente solicita el cifrado (el valor predeterminado de Encrypt es true) y se valida el certificado de servidor, con independencia del valor de cifrado (a menos que TrustServerCertificate se establezca en true).

    server=Server;database=Database;Authentication=ActiveDirectoryIntegrated;

  5. Autenticación de nombre de usuario o contraseña de Microsoft Entra (si la base de datos de destino está en la base de datos de Azure SQL o Azure SQL Managed Instance). Se valida el certificado de servidor, con independencia del valor de cifrado (a menos que TrustServerCertificate se establezca en true). El nombre de usuario/contraseña se pasa en la cadena de conexión.

    server=Server;database=Database;UID=UserName;PWD=Password;Authentication=ActiveDirectoryPassword;Encrypt=yes;

  6. (Windows y Linux/macOS con la versión 17.6 y posteriores, solo controlador). Autenticación integrada de Windows mediante ADAL o Kerberos, que implica el canje de credenciales de cuenta de Windows para un token de acceso emitido por Microsoft Entra, suponiendo que la base de datos de destino esté en Azure SQL. Se valida el certificado de servidor, con independencia del valor de cifrado (a menos que TrustServerCertificate se establezca en true). En Linux o macOS, es necesario que haya disponible un vale de Kerberos adecuado. Para obtener más información, vea la sección siguiente sobre Cuentas federadas y Uso de la autenticación integrada.

    server=Server;database=Database;Authentication=ActiveDirectoryIntegrated;Encrypt=yes;

  7. (Solo controlador de Windows.) La autenticación interactiva de Microsoft Entra puede utilizar la tecnología de autenticación multifactor de Microsoft Entra para establecer la conexión. En este modo, al proporcionar el Id. de inicio de sesión, se desencadena un cuadro de diálogo de autenticación de Azure que permite al usuario introducir verificación adicional para completar la conexión. El nombre de usuario se pasa en la cadena de conexión.

    server=Server;database=Database;UID=UserName;Authentication=ActiveDirectoryInteractive;Encrypt=yes;

    Interfaz de usuario de autenticación de Windows Azure al usar la autenticación interactiva de Active Directory.

  8. La autenticación de identidad administrada de Microsoft Entra puede usar una identidad administrada asignada por el sistema o asignada por el usuario. En el caso de una identidad asignada por el usuario, establezca UID en el identificador de cliente de la identidad para Azure App Service o Azure Container Instance; de lo contrario, use su identificador de objeto. En el caso de la identidad asignada por el sistema, no se requiere UID.

    Para la identidad asignada por el sistema:

    server=Server;database=Database;Authentication=ActiveDirectoryMsi;Encrypt=yes;

    Para la identidad asignada por el usuario cuyo Id. de objeto es igual a myObjectId:

    server=Server;database=Database;UID=myObjectId;Authentication=ActiveDirectoryMsi;Encrypt=yes;

  9. Autenticación de entidad de servicio de Microsoft Entra

server=Server;database=Database;UID=clientId;PWD=clientSecret;Authentication=ActiveDirectoryServicePrincipal;Encrypt=yes;

Comentarios

  • Al usar las nuevas opciones de Microsoft Entra con el controlador ODBC de Windows anterior a la versión 17.4.2, asegúrate de que se ha instalado la Biblioteca de autenticación de Active Directory para SQL Server. Al usar los controladores de Linux y macOS, asegúrese de que se ha instalado libcurl. En el caso de la versión de controlador 17.2 y versiones posteriores, esta no es una dependencia explícita, ya que no es necesaria para los otros métodos de autenticación u operaciones de ODBC.

  • Cuando la configuración de Microsoft Entra incluye directivas de acceso condicional y el cliente es Windows 10 o Server 2016 o posteriores, puede producirse un error en la autenticación integrada o de nombre de usuario o contraseña. Las directivas de acceso condicional requieren el uso del Administrador de cuentas web (WAM), que es compatible con la versión 17.6 o posteriores del controlador para Windows. Para usar WAM, cree un nuevo valor de cadena denominado ADALuseWAM en HKLM\Software\ODBC\ODBCINST.INI\ODBC Driver 17 for SQL Server, HKCU\Software\ODBC\ODBC.INI\<your-user-DSN-name> o HKLM\Software\ODBC\ODBC.INI\<your-system-DSN-name> para la configuración global, de DSN de usuario o de ámbito DSN del sistema, respectivamente, y establézcalo en un valor de 1. Tenga en cuenta que la autenticación con WAM no admite la ejecución de la aplicación como un usuario diferente con runas. Los escenarios que requieren directivas de acceso condicional no se admiten en Linux o macOS.

  • Para conectarse con un nombre de usuario y una contraseña de la cuenta de SQL Server, ahora puede usar la nueva opción SqlPassword, que se recomienda especialmente para Azure SQL, ya que esta opción habilita los valores predeterminados de conexión más seguros.

  • Para conectarte con un nombre de usuario y una contraseña de la cuenta de Microsoft Entra, especifica Authentication=ActiveDirectoryPassword en la cadena de conexión y las palabras clave UID y PWD con el nombre de usuario y la contraseña, respectivamente.

  • Para conectarte mediante la autenticación integrada de Windows o Microsoft Entra (Windows y Linux/macOS con la versión 17.6 y posteriores, solo controlador), especifica Authentication=ActiveDirectoryIntegrated en la cadena de conexión. El controlador elegirá automáticamente el modo de autenticación correcto. Para las versiones de controlador 17.7 o anteriores, UID y PWD no se deben especificar. A partir de la versión 17.8 del controlador, UID y PWD se omiten.

  • Para conectarte con autenticación interactiva de Microsoft Entra (solo controlador de Windows), debes especificar UID. Para las versiones de controlador 17.7 y anteriores, PWD no se debe especificar. A partir de la versión 17.8 del controlador, PWD se omite.

  • A partir de la versión 18.1, Trusted_Connection=Yes ya no usa la autenticación federada de Microsoft Entra ID de manera predeterminada y usa SSPI integrada en su lugar. Para usar Microsoft Entra ID para esta opción, debe configurarse TrustedConnection_UseAAD=Yes.

  • Las versiones 17.7 y anteriores del controlador ODBC tienen un problema conocido con el tiempo de espera de la conexión cuando la autenticación de Microsoft Entra y Force Encryption están habilitados en una instancia de SQL Server. El registro de errores de SQL Server puede contener mensajes de error como: "Error: 33155, Gravedad: 20, Estado: 1. Se ha generado un evento de desconexión cuando el servidor espera el token de autenticación federada. Esto podría deberse al cierre del cliente o a que el tiempo de espera del servidor ha expirado". Si usa soluciones de alta disponibilidad, como grupos de disponibilidad Always On o instancias de clúster de conmutación por error, la comunicación interna del clúster para SQL Server se puede ver afectada por este comportamiento, lo que puede afectar a la disponibilidad de los recursos. En el registro del clúster, puede ver mensajes de error, como [hadrag] Connect to SQL Server ...ODBC Error: [HY000] [Microsoft][ODBC Driver 17 for SQL Server]An unknown error has occurred. Detailed error information is not available. (0). En las versiones 17.10 y posteriores del controlador ODBC se corrige este problema y con SQL Server 2022 GDR KB5021522 /CU1 KB5022375, el controlador más reciente que contiene esta corrección se instala con la instalación de SQL Server. Puede comprobar qué versión del controlador ODBC ha instalado si consulta el administrador de orígenes de datos ODBC.

  • A partir de la versión 18.3 del controlador ODBC, la autenticación de identidad administrada (ActiveDirectoryMSI) se admite en Azure Arc y Azure Cloud Shell.

Autenticación con token de acceso

El atributo anterior a la conexión SQL_COPT_SS_ACCESS_TOKEN permite el uso de un token de acceso obtenido de Microsoft Entra ID para la autenticación en lugar de un nombre de usuario y una contraseña, y también omite la negociación y la obtención de un token de acceso por parte del driver. Para usar un token de acceso, establezca el atributo de conexión SQL_COPT_SS_ACCESS_TOKEN en un puntero a una estructura ACCESSTOKEN:

typedef struct AccessToken
{
    DWORD dataSize;
    BYTE data[];
} ACCESSTOKEN;

ACCESSTOKEN es una estructura de longitud variable formada por un elemento length de 4 bytes seguido de length bytes de datos opacos que forman el token de acceso. Debido a cómo SQL Server controla los tokens de acceso, uno obtenido mediante una respuesta JSON de OAuth 2.0 debe expandirse para que cada byte vaya seguido de un byte de relleno cero, similar a una cadena UCS-2 que solo contiene caracteres ASCII. Pero el token es un valor opaco y la longitud especificada, en bytes, no debe incluir ningún terminador NULL. Debido a sus considerables restricciones de longitud y formato, este método de autenticación solo está disponible mediante programación por medio del atributo de conexión SQL_COPT_SS_ACCESS_TOKEN. No hay ninguna palabra clave de cadena de conexión o DSN correspondiente. La cadena de conexión no debe contener las palabras clave UID, PWD, AuthenticationTrusted_Connection.

Nota

La versión 13.1 del controlador ODBC solo admite esta autenticación en Windows. Las versiones posteriores admiten esta autenticación en todas las plataformas.

Código de ejemplo de autenticación de Microsoft Entra

En el ejemplo siguiente se muestra el código necesario para conectarse a SQL Server mediante Microsoft Entra ID con palabras clave de conexión. No es necesario cambiar el propio código de la aplicación. La cadena de conexión, o el DSN si se usa uno, es la única modificación necesaria a fin de usar Microsoft Entra ID para la autenticación:

    ...
    SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};UID=myuser;PWD=myPass;Authentication=ActiveDirectoryPassword;Encrypt=yes;"
    ...
    SQLDriverConnect(hDbc, NULL, connString, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
    ...

En el ejemplo siguiente se muestra el código necesario para conectarse a SQL Server mediante Microsoft Entra con autenticación de token de acceso. En este caso, es necesario modificar el código de aplicación para procesar el token de acceso y establecer el atributo de conexión asociado.

    SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};Encrypt=yes;"
    SQLCHAR accessToken[] = "eyJ0eXAiOi..."; // In the format extracted from an OAuth JSON response
    ...
    DWORD dataSize = 2 * strlen(accessToken);
    ACCESSTOKEN *pAccToken = malloc(sizeof(ACCESSTOKEN) + dataSize);
    pAccToken->dataSize = dataSize;
    // Expand access token with padding bytes
    for(int i = 0, j = 0; i < dataSize; i += 2, j++) {
        pAccToken->data[i] = accessToken[j];
        pAccToken->data[i+1] = 0;
    }
    ...
    SQLSetConnectAttr(hDbc, SQL_COPT_SS_ACCESS_TOKEN, (SQLPOINTER)pAccToken, SQL_IS_POINTER);
    SQLDriverConnect(hDbc, NULL, connString, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
    ...
    free(pAccToken);

La cadena de conexión de ejemplo siguiente se usa con la autenticación interactiva de Microsoft Entra. No contiene el campo PWD, ya que la contraseña se tendría que escribir en la pantalla de autenticación de Azure.

SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};UID=myuser;Authentication=ActiveDirectoryInteractive;Encrypt=yes;"

La cadena de conexión de ejemplo siguiente se usa con la autenticación de identidad administrada de Microsoft Entra. El UID se establece en el identificador de objeto/cliente de la identidad del usuario cuando se utiliza una identidad asignada por el usuario.

// For system-assigned identity,
SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};Authentication=ActiveDirectoryMsi;Encrypt=yes;"
...
// For user-assigned identity with object ID equals to myObjectId
SQLCHAR connString[] = "Driver={ODBC Driver 18 for SQL Server};Server={server};UID=myObjectId;Authentication=ActiveDirectoryMsi;Encrypt=yes;"

Consideraciones sobre el uso de cuentas federadas de ADFS en Linux/macOS

A partir de la versión 17.6, los controladores para Linux y macOS admiten la autenticación mediante cuentas federadas de ADFS en Microsoft Entra con nombre de usuario o contraseña (ActiveDirectoryPassword) o Kerberos (ActiveDirectoryIntegrated). Hay algunas limitaciones que dependen de la plataforma al usar el modo integrado.

Cuando se autentica con un usuario cuyo sufijo UPN es diferente del dominio de Kerberos, es decir, se usa un sufijo UPN alternativo, es necesario utilizar la opción de entidad de seguridad empresarial (use la opción -E con kinit y proporcione el nombre de la entidad de seguridad con el formato user@federated-domain) al obtener vales Kerberos. De esta forma, el controlador puede determinar correctamente el dominio federado y el dominio de Kerberos.

Puede comprobar que un vale Kerberos adecuado está disponible mediante la inspección de la salida del comando klist. Si el dominio federado es el mismo que el dominio kerberos y el sufijo UPN, el nombre de la entidad tiene el formato user@realm. Si es diferente, el nombre de la entidad de seguridad debe tener el formato user@federated-domain@realm.

Linux

En SUSE 11, la versión 1.6.x de la biblioteca de Kerberos predeterminada no admite la opción de entidad de seguridad empresarial necesaria para usar sufijos UPN alternativos. Para usar sufijos UPN alternativos con la autenticación integrada de Microsoft Entra, actualice la biblioteca de Kerberos a la versión 1.7 o posterior.

En Alpine Linux, la opción predeterminada libcurl no admite la autenticación SPNEGO o Kerberos necesaria para la autenticación integrada de Microsoft Entra.

macOS

La biblioteca de Kerberos del sistema kinit admite la entidad de seguridad empresarial con la opción --enterprise, pero también realiza implícitamente la canonización de nombres, lo que impide el uso de sufijos de UPN alternativos. Para usar sufijos UPN alternativos con la autenticación integrada de Microsoft Entra, instala una biblioteca de Kerberos más reciente a través de brew install krb5 y usa tu kinit con la opción -E, como se describió anteriormente.