Tutorial: Crea y utiliza los inicios de sesión de servidor de Microsoft Entra

Este artículo te guía en la creación y uso de logins respaldados por Microsoft Entra ID (anteriormente Azure Active Directory) dentro de la base de datos virtual master de un pool SQL dedicado de Azure Synapse Analytics (anteriormente SQL DW). Los pools SQL dedicados en los espacios de trabajo de Azure Synapse Analytics no usan servidores SQL lógicos.

Nota:

Las entidades de seguridad del servidor de Microsoft Entra están actualmente en versión preliminar para Azure Synapse Analytics.

En este tutorial, obtendrá información sobre cómo:

  • Crea un inicio de sesión de Microsoft Entra en la base de datos virtual master
  • Crear un usuario asociado a una cuenta de inicio de sesión de Microsoft Entra en la base de datos virtual master
  • Usar la sintaxis WITH OBJECT_ID para nombres no únicos para mostrar
  • Conceder roles del servidor a un usuario de Microsoft Entra
  • Desactivar el inicio de sesión de Microsoft Entra

Prerequisites

  • Un pool SQL dedicado de Azure Synapse Analytics y una base de datos.
  • Autenticación de Microsoft Entra configurada para Azure Synapse Analytics. Para más información, consulte Configurar y gestionar la autenticación de Microsoft Entra con Azure Synapse Analytics.
  • En este artículo se indica cómo crear un inicio de sesión y un usuario de Microsoft Entra en la base de datos master virtual. Solo un administrador de Microsoft Entra puede crear un usuario dentro de la base de datos master virtual, por lo que se recomienda usar la cuenta de administrador de Microsoft Entra al seguir este tutorial. Una entidad principal de Microsoft Entra con el rol loginmanager puede crear un inicio de sesión, pero no un usuario dentro de la base de datos master virtual.

Nota:

Para las organizaciones que trabajan con nombres para mostrar no únicos en Microsoft Entra ID (especialmente para las entidades de servicio), asegúrese de tener la información de ID de objeto disponible para las entidades de servicio para las que planea crear inicios de sesión. La WITH OBJECT_ID extensión de sintaxis puede ayudar a resolver estos escenarios.

Crear un inicio de sesión de Microsoft Entra

  1. Cree un inicio de sesión para la cuenta de Microsoft Entra. En este ejemplo, usa bob@contoso.com, que existe en el dominio de Microsoft Entra llamado contoso. También puedes crear un inicio de sesión desde un grupo de Microsoft Entra o una entidad de servicio (aplicaciones). Para obtener más información, consulte CREATE LOGIN (Transact-SQL).

    Nota:

    El administrador de Microsoft Entra debe crear el primer inicio de sesión de Microsoft Entra. El administrador de Microsoft Entra puede ser un usuario o grupo de Microsoft Entra. Un inicio de sesión con autenticación SQL no puede crear inicios de sesión de Microsoft Entra.

    Tip

    Si encuentras problemas con nombres de visualización no únicos en Microsoft Entra ID, usa la extensión sintácticaWITH OBJECT_ID. Esta característica es especialmente útil para las entidades de servicio con nombres para mostrar duplicados. Por ejemplo:

    CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER
      WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'
    

    Para más información, véase Consideraciones sobre el nombre.

  2. Usando SQL Server Management Studio (SSMS), inicia sesión en tu pool SQL dedicado con la cuenta de administrador de Microsoft Entra.

  3. Expanda Bases de datos>Bases de datos del sistema. Haga clic con el botón derecho en la base de datos master y seleccione Nueva consulta para abrir una nueva ventana de consulta en el contexto de la base de datos de master.

  4. Ejecute la siguiente consulta:

    CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
    GO
    
  5. Compruebe el inicio de sesión creado en sys.server_principals. Ejecute la siguiente consulta:

    SELECT name, type_desc, type, is_disabled
    FROM sys.server_principals
    WHERE type_desc like 'external%'
    

    Ves una salida similar a la siguiente:

    Name                            type_desc       type   is_disabled
    bob@contoso.com                 EXTERNAL_LOGIN  E      0
    
  6. El usuario bob@contoso.com se crea en la base de datos virtual master.

Crear un usuario a partir de un inicio de sesión de Microsoft Entra

  1. Después de crear un inicio de sesión de Microsoft Entra, crea un usuario de Microsoft Entra a nivel de base de datos que se corresponda con el inicio de sesión de Microsoft Entra en la base de datos virtualmaster. Para mostrar cómo añadir el usuario a roles especiales, usa nuestro ejemplo, bob@contoso.com, que crea un usuario en la base de datos virtual master. Solo un administrador de Microsoft Entra o administrador de SQL Server pueden crear usuarios en la base de datos master virtual.

  2. Usa la base de datos virtual master , pero puedes volver a conectar a una base de datos de tu elección si quieres crear usuarios en otras bases de datos. Ejecute la siguiente consulta.

    CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]
    

    Tip

    Aunque no es necesario usar alias de usuario de Microsoft Entra (por ejemplo, bob@contoso.com), se recomienda usar el mismo alias para los usuarios de Microsoft Entra y los inicios de sesión de Microsoft Entra.

    Si necesitas crear un usuario directamente desde un proveedor externo con un ID de objeto específico (por ejemplo, para resolver problemas de nombres de visualización no únicos), utiliza la siguiente sintaxis:

    CREATE USER [user_name] FROM EXTERNAL PROVIDER
      WITH OBJECT_ID = 'objectid'
    
  3. Compruebe el usuario creado en sys.database_principals. Ejecute la siguiente consulta:

    SELECT name, type_desc, type
    FROM sys.database_principals
    WHERE type_desc like 'external%'
    

    Ves una salida similar a la siguiente:

    Name                            type_desc       type
    bob@contoso.com                 EXTERNAL_USER   E
    

Nota:

Todavía se admite la sintaxis existente para crear un usuario de Microsoft Entra sin un inicio de sesión de Microsoft Entra. Si ejecutas la siguiente sintaxis, creas un usuario de base de datos parcialmente contenido en la base de datos específica a la que estás conectado. Este usuario no está asociado a ningún inicio de sesión, incluso si existe un inicio de sesión con el mismo nombre en la base de datos virtual master .

Por ejemplo: CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER.

Puedes crear un login de Microsoft Entra usando un principal de servicio con un nombre para mostrar no único. Para más información, véase consideraciones sobre el nombre.

Conceder los roles de nivel de servidor para inicios de sesión de Microsoft Entra

Puedes añadir inicios de sesión de SQL a roles fijos a nivel de servidor, como los ##MS_DefinitionReader##, ##MS_ServerStateReader## o ##MS_ServerStateManager## en la master base de datos.

Nota:

Los roles de nivel de servidor mencionados aquí no son compatibles con los grupos de Microsoft Entra.

ALTER SERVER ROLE ##MS_DefinitionReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateManager## ADD MEMBER [AzureAD_object];

Los permisos no son efectivos hasta que el usuario se vuelve a conectar. Vacíe también la memoria caché de DBCC:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Para comprobar qué inicios de sesión de Microsoft Entra forman parte de roles de nivel de servidor, ejecute la consulta siguiente:

SELECT roles.principal_id AS RolePID,roles.name AS RolePName,
       server_role_members.member_principal_id AS MemberPID, members.name AS MemberPName
       FROM sys.server_role_members AS server_role_members
       INNER JOIN sys.server_principals AS roles
       ON server_role_members.role_principal_id = roles.principal_id
       INNER JOIN sys.server_principals AS members
       ON server_role_members.member_principal_id = members.principal_id;

Conceder roles especiales para usuarios de Microsoft Entra

Puedes asignar roles especiales de Azure Synapse Analytics a los usuarios en la base de datos virtualmaster.

Para otorgar uno de los roles especiales de base de datos a un usuario, este debe existir en la base de datos virtual master .

Para añadir un usuario a un rol, ejecuta la siguiente consulta:

ALTER ROLE [dbmanager] ADD MEMBER [AzureAD_object]

Para quitar un usuario de un rol, ejecute la consulta siguiente:

ALTER ROLE [dbmanager] DROP MEMBER [AzureAD_object]

AzureAD_object puede ser un usuario, grupo o entidad de servicio de Microsoft Entra en Microsoft Entra ID.

En el siguiente ejemplo, creas al usuario bob@contoso.com. Asigna los roles dbmanager y loginmanager al usuario.

  1. Ejecute la siguiente consulta:

    ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com]
    ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]
    
  2. Compruebe la asignación de roles de base de datos mediante la ejecución de la consulta siguiente:

    SELECT DP1.name AS DatabaseRoleName,
      isnull (DP2.name, 'No members') AS DatabaseUserName
    FROM sys.database_role_members AS DRM
    RIGHT OUTER JOIN sys.database_principals AS DP1
      ON DRM.role_principal_id = DP1.principal_id
    LEFT OUTER JOIN sys.database_principals AS DP2
      ON DRM.member_principal_id = DP2.principal_id
    WHERE DP1.type = 'R'and DP2.name like 'bob%'
    

    Ves una salida similar a la siguiente:

    DatabaseRoleName       DatabaseUserName
    dbmanager              bob@contoso.com
    loginmanager           bob@contoso.com
    

Opcional: deshabilitar un acceso

Utiliza la sintaxis DDL ALTER LOGIN (Transact-SQL) para habilitar o desactivar un inicio de sesión Microsoft Entra en un pool SQL dedicado.

ALTER LOGIN [bob@contoso.com] DISABLE

Para que los cambios de DISABLE o ENABLE surtan efecto inmediatamente, borra la caché de autenticación y la caché de TokenAndPermUserStore utilizando los siguientes comandos T-SQL:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Comprueba que el inicio de sesión esté deshabilitado ejecutando la siguiente consulta:

SELECT name, type_desc, type
FROM sys.server_principals
WHERE is_disabled = 1