Tutorial: Creación y uso de inicios de sesión de servidor de Microsoft Entra

Se aplica a:Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (solo grupos SQL dedicados)

Este artículo le guía por la creación y el uso de los inicios de sesión con Microsoft Entra ID (anteriormente, Azure Active Directory) en la base de datos master virtual de Azure SQL.

En este tutorial, aprenderá a:

  • Crear un inicio de sesión de Microsoft Entra en la base de datos master virtual con la nueva extensión de sintaxis para Azure SQL Database
  • Crear un usuario asignado a un inicio de sesión de Microsoft Entra en la base de datos master virtual
  • Conceder roles del servidor a un usuario de Microsoft Entra
  • Deshabilitar un inicio de sesión de Microsoft Entra

Nota:

Las entidades de seguridad del servidor (inicios de sesión) de Microsoft Entra están actualmente en versión preliminar pública para Azure SQL Database. Azure SQL Managed Instance ya puede usar los inicios de sesión de Microsoft Entra.

Requisitos previos

Crear un inicio de sesión de Microsoft Entra

  1. Cree un inicio de sesión de Azure SQL Database para una cuenta de Microsoft Entra. En nuestro ejemplo, usaremos bob@contoso.com, que existe en nuestro dominio de Microsoft Entra denominado contoso. También se puede crear un inicio de sesión desde un grupo o una entidad de servicio (aplicaciones) de Microsoft Entra. Por ejemplo, mygroup, que es un grupo de Microsoft Entra que consta de cuentas de Microsoft Entra que son miembros de ese grupo. 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 de SQL no puede crear inicios de sesión de Microsoft Entra.

  2. Con SQL Server Management Studio (SSMS), inicie sesión en su base de datos de SQL Database con la cuenta de administrador de Microsoft Entra configurada para el servidor.

  3. Ejecute la siguiente consulta:

    Use master
    CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
    GO
    
  4. 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%'  
    

    Verá un resultado similar al siguiente:

    Name                            type_desc       type   is_disabled 
    bob@contoso.com                 EXTERNAL_LOGIN  E      0 
    
  5. El inicio de sesión bob@contoso.com se ha creado en la base de datos master virtual.

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

  1. Ahora que hemos creado un inicio de sesión de Microsoft Entra, podemos crear un usuario de Microsoft Entra de nivel de base de datos asignado al inicio de sesión de Microsoft Entra en la base de datos master virtual. Seguiremos usando nuestro ejemplo bob@contoso.com para crear un usuario en la base de datos master virtual, ya que queremos demostrar cómo agregar el usuario a roles especiales. Solo un administrador de Microsoft Entra o administrador de SQL Server pueden crear usuarios en la base de datos master virtual.

  2. Estamos usando la base de datos master virtual, pero puede cambiar a una base de datos de su elección si quiere crear usuarios en otras bases de datos. Ejecute la consulta siguiente.

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

    Sugerencia

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

  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%'
    

    Verá un resultado similar al 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. Al ejecutar la siguiente sintaxis se crea un usuario de base de datos dentro de la base de datos específica a la que está conectado. Es importante tener en cuenta 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 master virtual.

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

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

Puede agregar inicios de sesión a los roles de nivel de servidor corregidos, como los roles ##MS_DefinitionReader##, ##MS_ServerStateReader## o ##MS_ServerStateManager##.

Nota:

Los roles de nivel de servidor mencionados aquí no se admiten para 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

Los roles especiales para SQL Database pueden asignarse a los usuarios de la base de datos master virtual.

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

Para agregar un usuario a un rol, puede ejecutar la consulta siguiente:

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 nuestro ejemplo, se creó el usuario bob@contoso.com. Vamos a proporcionar al usuario los roles dbmanager y loginmanager.

  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%' 
    

    Verá un resultado similar al siguiente:

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

Opcional: deshabilitar un inicio de sesión

La sintaxis DDL ALTER LOGIN (Transact-SQL) se puede usar para habilitar o deshabilitar un inicio de sesión de Microsoft Entra en Azure SQL Database.

ALTER LOGIN [bob@contoso.com] DISABLE

Para que los cambios DISABLE o ENABLE tengan efecto inmediato, la caché de autenticación y la caché TokenAndPermUserStore deben borrarse mediante los comandos T-SQL:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS 

Compruebe que el inicio de sesión se ha deshabilitado mediante la ejecución de la consulta siguiente:

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

Un caso de uso sería permitir solo lectura en réplicas geográficas, pero denegar la conexión en un servidor principal.

Consulte también

Para más información y ejemplos, consulte: