Inicios de sesión y usuarios de Microsoft Entra con nombres para mostrar que no son únicos (versión preliminar)

Se aplica a: Azure SQL Database Azure SQL Managed Instance

En este artículo se explica cómo usar la sintaxis de Object_ID de T-SQL para crear inicios de sesión de Microsoft Entra y usuarios con nombres para mostrar no únicos en Azure SQL Database y Azure SQL Managed Instance.

Nota:

El uso de WITH OBJECT_ID para crear usuarios e inicios de sesión en Azure SQL está actualmente en versión preliminar.

Información general

Microsoft Entra ID admite la autenticación para entidades de servicio. No obstante, el uso de una entidad de servicio con un nombre para mostrar que no es único en Microsoft Entra ID produce errores al crear el inicio de sesión o el usuario en Azure SQL.

Por ejemplo, si la aplicación myapp no es única, es posible que se produzca el siguiente error:

Msg 33131, Level 16, State 1, Line 4 
Principal 'myapp' has a duplicate display name. Make the display name unique in Azure Active Directory and execute this statement again. 

Al intentar ejecutar la instrucción T-SQL siguiente:

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 

La extensión WITH OBJECT_ID.

El error nombre para mostrar duplicadose produce porque Microsoft Entra ID permite nombres para mostrar duplicados para la aplicación Microsoft Entra (entidad de servicio), mientras que Azure SQL requiere nombres únicos para crear inicios de sesión y usuarios de Microsoft Entra. Para mitigar este problema, se ha ampliado la instrucción Lenguaje de definición de datos (DDL) a fin de crear inicios de sesión y usuarios para incluir el id. de objeto del recurso de Azure con la cláusula WITH OBJECT_ID.

Nota:

Actualmente la extensión WITH OBJECT_ID se encuentra en versión preliminar pública.

La mayoría de los nombres para mostrar que no son únicos de Microsoft Entra ID están relacionados con las entidades de servicio, aunque ocasionalmente los nombres de grupo también pueden no ser únicos. Los nombres principales de usuario de Microsoft Entra son únicos, ya que dos usuarios no pueden tener la misma entidad de seguridad de usuario. Pero se puede crear un registro de aplicaciones (entidad de servicio) con un nombre para mostrar que sea el mismo que un nombre principal de usuario.

Si el nombre para mostrar de la entidad de servicio no es un duplicado, se debe usar la instrucción CREATE LOGIN o CREATE USER. La extensión WITH OBJECT_ID está en versión preliminar pública y es un elemento de reparación de solución de problemas implementado para su uso con entidades de servicio que no son únicas. No se recomienda usarla con una entidad de servicio única. El uso de la extensión WITH OBJECT_ID para una entidad de servicio sin agregar un sufijo se ejecutará correctamente, pero no será evidente para qué entidad de servicio se creó el inicio de sesión o el usuario. Se recomienda crear un alias mediante un sufijo para identificar de forma única la entidad de servicio. La extensión WITH OBJECT_ID no se admite para SQL Server.

Sintaxis de inicio de sesión o usuario de creación de T-SQL para nombres para mostrar que no son únicos

CREATE LOGIN [login_name] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'objectid'
CREATE USER [user_name] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'objectid'

Gracias a la extensión DDL de T-SQL a fin de crear inicios de sesión o usuarios con el id. de objeto, puede evitar el error 33131 y especificar también un alias para el inicio de sesión o el usuario creado con el id. de objeto. Por ejemplo, lo siguiente creará un inicio de sesión myapp4466e con el id. de objeto de la aplicación 4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = '4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx' 
  • Para ejecutar la consulta anterior, el id. de objeto especificado debe existir en el inquilino de Microsoft Entra donde reside el recurso de Azure SQL. De lo contrario, se producirá un error en el comando CREATE con el mensaje de error: Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission..
  • El inicio de sesión o el nombre de usuario debe contener el nombre de entidad de seguridad de servicio original ampliado con un sufijo definido por el usuario al usar la instrucción CREATE LOGIN o CREATE USER. Como procedimiento recomendado, el sufijo puede incluir una parte inicial de su id. de objeto. Por ejemplo, myapp2ba6c para el id. de objeto 2ba6c0a3-cda4-4878-a5ca-xxxxxxxxxxxx. Pero también puedes definir un sufijo personalizado. No es necesario formar el sufijo desde el id. de objeto.

Esta convención de nomenclatura se recomienda para asociar explícitamente el usuario de la base de datos o volver a iniciar sesión en su objeto en Microsoft Entra ID.

Nota:

El alias cumple la especificación de T-SQL para sysname, incluida una longitud máxima de 128 caracteres. Se recomienda limitar el sufijo a los primeros 5 caracteres del id. de objeto.

El nombre para mostrar de la entidad de servicio de Microsoft Entra ID no está sincronizado con el inicio de sesión de la base de datos o el alias del usuario. La ejecución de CREATE LOGIN o CREATE USER no afectará al nombre para mostrar en Azure Portal. Del mismo modo, la modificación del nombre para mostrar de Microsoft Entra ID no afectará al inicio de sesión de la base de datos ni al alias del usuario.

Identificación del usuario creado para la aplicación

En el caso de las entidades de servicio que no son únicas, es importante comprobar que el alias de Microsoft Entra está vinculado a la aplicación correcta. A fin de comprobar que el usuario se creó para la entidad de servicio correcta (aplicación), haga lo siguiente:

  1. Obtén el Id. de aplicación de la aplicación o el Id. de objeto del grupo de Microsoft Entra a partir del usuario creado en SQL Database. Observa las siguientes consultas:

    • Para obtener el Id. de aplicación de la entidad de servicio a partir del usuario creado, ejecuta la consulta siguiente:

      SELECT CAST(sid as uniqueidentifier) ApplicationID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c' 
      

      Ejemplo:

      Captura de pantalla de la salida de SSMS para el identificador de aplicación.

      El id. de aplicación se convierte a partir del número de identificación de seguridad (SID) para el inicio de sesión o el nombre de usuario especificados, que podemos confirmar ejecutando la consulta siguiente y comparando los últimos dígitos y fechas de creación:

      SELECT SID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c' 
      

      Ejemplo:

      Captura de pantalla de la salida de SSMS para el SID de la aplicación.

    • Para obtener el Id. de objeto del grupo de Microsoft Entra a partir del usuario creado, ejecuta la consulta siguiente:

      SELECT CAST(sid as uniqueidentifier) ObjectID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b' 
      

      Ejemplo:

      Captura de pantalla de la salida de SSMS para el identificador de objeto del grupo Microsoft Entra.

      Para comprobar el SID del grupo de Microsoft Entra a partir del usuario creado, ejecuta la consulta siguiente:

      SELECT SID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b' 
      

      Ejemplo:

      Captura de pantalla de la salida de SSMS para el SID del grupo.

    • Para obtener el id. de objeto y el id. de aplicación de la aplicación mediante PowerShell, ejecuta el siguiente comando:

      Get-AzADApplication -DisplayName "myapp2ba6c"
      
  2. Ve a Azure Portal y, en la Aplicación empresarial o en el recurso del grupo de Microsoft Entra, comprueba el Id. de aplicación o el Id. de objeto respectivamente. Comprueba si coincide con el obtenido de la consulta anterior.

Nota:

Al crear un usuario desde una entidad de servicio, se requiere el Id. de objeto al usar la cláusula WITH OBJECT_ID con la instrucción T-SQL CREATE. Esto es diferente del Id. de aplicación que se devuelve al intentar comprobar el alias en Azure SQL. Con este proceso de comprobación, puedes identificar la entidad de servicio o el grupo asociados con el alias SQL en Microsoft Entra ID y evitar posibles errores al crear inicios de sesión o usuarios con un id. de objeto.

Búsqueda del id. de id. de objeto correcto

Para obtener información sobre el id. de objeto de una entidad de servicio, consulta Objeto de entidad de servicio. Puedes encontrar el id. de objeto de la entidad de servicio que aparece junto al nombre de la aplicación en Azure Portal en Aplicaciones empresariales.

Advertencia

El id. de objeto obtenido en la página de información general del Registro de aplicaciones es diferente del obtenido en la página de información general de Aplicaciones empresariales. Si estás en la página de información general del Registro de aplicaciones, selecciona el nombre de la aplicación de Aplicación administrada en el directorio local vinculada para ir al id. de objeto correcto en la página de información general de Aplicaciones empresariales.