Compartir a través de


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

Se aplica a:Azure SQL DatabaseAzure SQL Managed InstanceBase de datos SQL en Fabric

En este artículo se explica cómo usar la sintaxis 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, Base de datos SQL de Fabric y Azure SQL Managed Instance.

Nota:

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

Información general

Microsoft Entra ID admite la autenticación para entidades de servicio. Sin embargo, el uso de una entidad de seguridad de servicio con un nombre para mostrar que no es único en Microsoft Entra ID provoca errores al crear el inicio de sesión o el usuario en Azure SQL Database y Azure SQL Managed Instance.

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:

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 visible de la entidad de servicio no es un duplicado, se debe usar la instrucción predeterminada CREATE LOGIN o CREATE USER. La extensión WITH OBJECT_ID es un elemento de solución de problemas implementado para su uso con servicios principales no únicos. No se recomienda su uso con una única cuenta de servicio principal. 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, el ejemplo de T-SQL siguiente crea un inicio de sesión myapp4466e mediante el identificador de objeto de 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 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 bbbbbbbb-1111-2222-3333-cccccccccccc. Pero también puedes definir un sufijo personalizado. No es necesario formar el sufijo desde el identificador 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 del principal de servicio en Microsoft Entra ID no se sincroniza con el inicio de sesión de la base de datos ni con el alias de usuario. La ejecución de CREATE LOGIN o CREATE USER no afectará al nombre mostrado en el portal de Azure. 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:

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

      El id. 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 especificado, que 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:

      Recorte de pantalla de la salida de consulta de SQL Server Management Studio (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:

      Recorte de pantalla de la salida de consulta de SQL Server Management Studio (SSMS) para el id. 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:

      Recorte de pantalla de la salida de consulta de SQL Server Management Studio (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. Compruebe si coincide con la obtenida en 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 identificador de aplicación de 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.