Tutorial: Creación y uso de los inicios de sesión de servidor de Azure Active Directory
Se aplica a:Azure SQL Database
Azure SQL Managed Instance
Azure 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
- 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 Azure AD para la instancia administrada de Azure SQL Database. Para más información, consulte Configuración y administración de la autenticación de Azure AD con Azure SQL.
- En este artículo se indica cómo crear un inicio de sesión de usuario de Azure AD en la base de datos
master
virtual. Solo un administrador de Azure AD puede crear un usuario dentro de la base de datosmaster
virtual, por lo que se recomienda usar la cuenta de administrador de Azure AD al seguir este tutorial. Una entidad principal de Azure AD con el rolloginmanager
puede crear un inicio de sesión, pero no un usuario dentro de la base de datosmaster
virtual.
Creación un inicio de sesión de Azure AD
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 denominadocontoso
. 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.
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.
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 desde un inicio de sesión de Azure AD
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 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 Azure AD 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 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.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_object
puede 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.
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 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: