Tutorial: Creación y uso de inicios de sesión de servidor de Microsoft Entra
Se aplica a: Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics (solo grupos de 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
- Una SQL Database o SQL Managed Instance con una base de datos. Consulte Inicio rápido: Creación de una base de datos única de Azure SQL Database si aún no ha creado una base de datos única de Azure SQL o Inicio rápido: Creación de Azure SQL Managed Instance.
- Configuración de la autenticación de Microsoft Entra para SQL Database o SQL Managed Instance. Para obtener más información, consulte Configuración y administración de la autenticación de Microsoft Entra con Azure SQL.
- 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 datosmaster
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 rolloginmanager
puede crear un inicio de sesión, pero no un usuario dentro de la base de datosmaster
virtual.
Crear un inicio de sesión de Microsoft Entra
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 denominadocontoso
. 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.
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.
Ejecute la siguiente consulta:
Use master CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER GO
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
El inicio de sesión
bob@contoso.com
se ha creado en la base de datosmaster
virtual.
Crear un usuario a partir de un inicio de sesión de Microsoft Entra
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 ejemplobob@contoso.com
para crear un usuario en la base de datosmaster
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 datosmaster
virtual.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.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
.
Puede crear un inicio de sesión de Microsoft Entra mediante una entidad de servicio con un nombre para mostrar no único. Para obtener más información, consulte Inicios de sesión y usuarios de Microsoft Entra con nombres para mostrar que no son únicos
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.
Ejecute la siguiente consulta:
ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com] ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]
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.