Compartir a través de


Inicios de sesión y usuarios de Microsoft Entra con nombres de visualización no únicos

Se aplica a: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric

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

Nota:

Puede crear usuarios en Fabric SQL Database, pero no inicios de sesión.

Información general

Microsoft Entra ID admite la autenticación para las entidades de servicio. Sin embargo, 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 login o el usuario en SQL Server, Azure SQL Database y Azure SQL Managed Instance.

Por ejemplo, si la aplicación myapp no es única, podría producirse 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 siguiente instrucción T-SQL:

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 

La WITH OBJECT_ID extensión

El error de nombre para mostrar duplicado se produce porque Microsoft Entra ID permite nombres para mostrar duplicados para la aplicación de Microsoft Entra (principal de servicio), mientras que SQL Server y Azure SQL requieren nombres únicos para crear inicios de sesión y usuarios de Microsoft Entra. Para mitigar este problema, se ha ampliado la instrucción del Lenguaje de definición de datos (DDL) para crear cuentas de usuario y usuarios, y así incluir el identificador de objeto del recurso de Azure con la cláusula WITH OBJECT_ID.

Nota:

La mayoría de los nombres de visualización no únicos de Microsoft Entra ID están relacionados con los principales de servicio, aunque también los nombres de grupos pueden no ser únicos. Los nombres principales de usuario de Microsoft Entra son únicos, ya que dos usuarios no pueden tener el mismo nombre principal de usuario. Sin embargo, se puede crear un registro de aplicaciones (entidad de servicio) con un nombre visible que sea el mismo que un nombre de usuario principal.

Si el nombre para mostrar del principal del servicio no es un duplicado, se debe usar la instrucción predeterminada CREATE LOGIN o CREATE USER. La WITH OBJECT_ID extensión es un elemento de reparación de solución de problemas implementado para su uso con entidades de servicio nounique. No se recomienda usarlo con un principal de servicio único. 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 WITH OBJECT_ID extensión es compatible con SQL Server 2025 y versiones posteriores.

Sintaxis de T-SQL para crear inicio de sesión/usuario con nombres para mostrar no exclusivos

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

Con la extensión de compatibilidad con DDL de T-SQL para crear inicios de sesión o usuarios con el identificador 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 identificador de objeto. Por ejemplo, el siguiente ejemplo de T-SQL crea un inicio de sesión myapp4466e mediante el ID de Objeto de la aplicación aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' 
  • Para ejecutar esta consulta T-SQL, el identificador de objeto especificado debe existir en el inquilino de Microsoft Entra donde reside el recurso SQL. De lo contrario, se producirá un error en el CREATE comando 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 nombre de usuario o login debe incluir el nombre principal del servicio original, extendido con un sufijo definido por el usuario, al usar las instrucciones CREATE LOGIN o CREATE USER. Como procedimiento recomendado, el sufijo puede incluir una parte inicial de su identificador de objeto. Por ejemplo, myapp2ba6c para el ID bbbbbbbb-1111-2222-3333-cccccccccccc de objeto. Sin embargo, también puede definir un sufijo personalizado. No es necesario formar el sufijo desde el identificador de objeto.

Esta convención de nomenclatura se recomienda 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 se adhiere a la especificación de T-SQL para sysname, incluida una longitud máxima de 128 caracteres. Se recomienda limitar el sufijo a los cinco primeros caracteres del id. de objeto.

El nombre para mostrar del principal de servicio en Microsoft Entra ID no se sincroniza con el inicio de sesión en la base de datos ni con el alias del usuario. Ejecutar CREATE LOGIN o CREATE USER no afectará al nombre para mostrar en el portal de Azure. Del mismo modo, modificar el nombre de visualización del ID de Microsoft Entra no afectará el acceso a la base de datos o al alias de usuario.

Identificación del usuario creado para la aplicación

En el caso de los principales de servicio no únicos, es importante comprobar que el alias de Microsoft Entra está vinculado a la aplicación correcta. Para comprobar que el usuario se creó para la entidad de servicio correcta (aplicación):

  1. Obtenga el identificador de aplicación de la aplicación o el identificador de objeto del grupo Microsoft Entra del usuario creado en Azure SQL o SQL Server. Consulte las siguientes consultas:

    • Para obtener el identificador de aplicación de la entidad de servicio del usuario creado, ejecute 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 consulta de SQL Server Management Studio (SSMS) para el identificador de aplicación.

      El identificador de aplicación se convierte del número de identificación de seguridad (SID) para el inicio de sesión o el nombre de usuario especificados, lo cual podemos confirmar ejecutando la siguiente consulta de T-SQL y comparando los últimos dígitos y las fechas de creación.

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

      Ejemplo:

      Captura de pantalla de la salida de consulta de SQL Server Management Studio (SSMS) para el SID de la aplicación.

    • Para obtener el identificador de objeto del grupo Microsoft Entra del usuario creado, ejecute la consulta siguiente:

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

      Ejemplo:

      Captura de pantalla de la salida de consulta de SQL Server Management Studio (SSMS) para el identificador de objeto del grupo Microsoft Entra.

      Para comprobar el SID del grupo Microsoft Entra del usuario creado, ejecute la consulta siguiente:

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

      Ejemplo:

      Captura de pantalla de la salida de consulta de SQL Server Management Studio (SSMS) para el SID del grupo.

    • Para obtener el identificador de objeto y el identificador de aplicación de la aplicación mediante PowerShell, ejecute el siguiente comando:

      Get-AzADApplication -DisplayName "myapp2ba6c"
      
  2. Vaya a Azure Portal y, en la aplicación empresarial o en el recurso del grupo Microsoft Entra, compruebe el identificador de aplicación o el identificador de objeto respectivamente. Compruebe si coincide con el obtenido de la consulta anterior.

Nota:

Al crear un usuario desde un principal de servicio, se requiere el identificador de objeto al usar la cláusula WITH OBJECT_ID con la instrucción T-SQL CREATE. Esto es diferente del identificador de aplicación que se devuelve cuando intenta comprobar el alias en SQL Server. Con este proceso de comprobación, puede 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 identificador de objeto.

Búsqueda del identificador de objeto correcto

Para obtener información sobre el identificador de objeto de un principal de servicio, consulte Objeto de principal de servicio. Puede encontrar el identificador de objeto de la entidad de servicio que aparece junto al nombre de la aplicación en Azure Portal en Aplicaciones empresariales.

Advertencia

El identificador de objeto obtenido en la página de Información general del registro de aplicaciones es diferente del identificador de objeto obtenido en la página de Información general de aplicaciones empresariales. Si está en la página Información general del Registro de la aplicación, seleccione el nombre de la aplicación administrada en el directorio local vinculado para ir al identificador de objeto correcto en la página Información general de Aplicaciones empresariales.