Tutorial: Creación y uso de los inicios de sesión de servidor de Azure Active Directory

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

Nota

Las entidades de seguridad del servidor (inicios de sesión) de Azure Active Directory (Azure AD) están actualmente en versión preliminar pública para Azure SQL Database. Azure SQL Instancia administrada ya puede usar los inicios de sesión de Azure AD.

Este artículo le guía por la creación y el uso de los inicios de sesión de Azure Active Directory en la base de datos master virtual de Azure SQL.

En este tutorial, aprenderá a:

  • Crear un inicio Azure AD sesión 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 Azure AD en la base de datos master virtual
  • Conceder roles de servidor a un usuario de Azure AD
  • Deshabilitar un inicio de sesión de Azure

Prerrequisitos

Creación un inicio de sesión de Azure AD

  1. Cree un inicio de sesión de Azure SQL Database para una cuenta Azure AD. En nuestro ejemplo, usaremos bob@contoso.com que existe en nuestro dominio Azure AD denominado contoso. También se puede crear un inicio de sesión desde un Azure AD o una entidad de servicio (aplicaciones). Por ejemplo, mygroup es un grupo Azure AD que consta de Azure AD que son miembros de ese grupo. Para obtener más información, consulte CREATE LOGIN (Transact-SQL).

    Nota:

    El administrador de Azure Active Directory debe crear el primer inicio de sesión de Azure AD. El administrador de Azure AD puede ser un usuario o grupo de Azure AD. Un inicio de sesión de SQL no puede crear inicios de sesión de Azure AD.

  2. Con SQL Server Management Studio (SSMS), inicie sesión en el SQL Database con la cuenta de administrador de Azure AD 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 desde un inicio de sesión de Azure AD

  1. Ahora que hemos creado un inicio de sesión Azure AD, podemos crear un usuario de Azure AD de nivel de base de datos que esté asignado al inicio de sesión Azure AD 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 Azure AD 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 Azure AD (por ejemplo, bob@contoso.com), se recomienda usar el mismo alias para los inicios de sesión y los usuarios de Azure AD.

  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:

La sintaxis existente para crear un usuario Azure AD sin un inicio de sesión Azure AD todavía se admite y requiere la creación de un usuario contenido dentro de SQL Database (sin inicio de sesión).

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

Concesión de roles de nivel de servidor para los inicios de sesión de Azure AD

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 Azure AD.

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 Azure AD 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;

Concesión de roles especiales para usuarios Azure AD

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_objectpuede ser un Azure AD, un grupo o una entidad de servicio en Azure AD.

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 Azure AD 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: