Configurar y administrar la autenticación de Microsoft Entra con Azure SQL
Se aplica a: Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics
En este artículo se muestra cómo usar Microsoft Entra ID para la autenticación con Azure SQL Database, Azure SQL Managed Instance y Azure Synapse Analytics.
Nota
Microsoft Entra ID era conocido anteriormente como Azure Active Directory (Azure AD).
Como alternativa, también puede configurar la autenticación de Microsoft Entra para SQL Server en Azure Virtual Machines.
Para usar la autenticación de Microsoft Entra con el recurso de Azure SQL, necesita los siguientes requisitos previos:
- Un inquilino de Microsoft Entra rellenado con usuarios y grupos.
- Un recurso de Azure SQL existente, como Azure SQL Database o Azure SQL Managed Instance.
A fin de poder configurar la autenticación de Microsoft Entra para el recurso de Azure SQL, debe crear un inquilino de Microsoft Entra y rellenarlo con usuarios y grupos. Los inquilinos de Microsoft Entra se pueden administrar completamente en Azure o usarse para la federación de una instancia de Active Directory Domain Services local.
Para más información, vea:
- ¿Qué es Microsoft Entra ID?
- Más información sobre la Integración de las identidades locales con Microsoft Entra ID
- Adición del nombre de dominio a Microsoft Entra ID
- ¿Qué es la federación con el identificador de Microsoft Entra ID?
- Sincronización de directorios con Microsoft Entra ID
- Administración de Microsoft Entra ID mediante Windows PowerShell
- La identidad híbrida requería puertos y protocolos
Para usar la autenticación de Microsoft Entra con el recurso, debe tener configurado el administrador de Microsoft Entra. Aunque conceptualmente los pasos son los mismos para Azure SQL Database, Azure Synapse Analytics y Azure SQL Managed Instance, en esta sección se describen detalladamente las distintas API y experiencias del portal para hacerlo por producto.
El administrador de Microsoft Entra también se puede configurar cuando se crea el recurso de Azure SQL. Si ya hay configurado un administrador de Microsoft Entra, omita esta sección.
Al configurar el administrador de Microsoft Entra, se habilita la autenticación de Microsoft Entra para el servidor lógico para Azure SQL Database y Azure Synapse Analytics. Puede configurar un administrador de Microsoft Entra para el servidor mediante Azure Portal, PowerShell, la CLI de Azure o las API REST.
En Azure Portal, puede encontrar el nombre del servidor lógico.
- En el campo nombre del servidor de la página Información general de Azure SQL Database.
- En el campo Nombre del servidor de la página Información general del grupo de SQL dedicado independiente en Azure Synapse Analytics.
- En el punto de conexión de SQL correspondiente en la página Información general del área de trabajo de Azure Synapse Analytics.
Para ejecutar los cmdlets de PowerShell, necesitará tener Azure PowerShell instalado y en marcha. Consulte el artículo de instalación y configuración de Azure PowerShell para información detallada.
Los siguientes cmdlets de Azure PowerShell se pueden usar a fin de establecer y administrar un administrador de Microsoft Entra para Azure SQL Database y Azure Synapse Analytics:
Nombre del cmdlet | Descripción |
---|---|
Set-AzSqlServerActiveDirectoryAdministrator | Configura un administrador de Microsoft Entra para el servidor que hospeda SQL Database o Azure Synapse. |
Remove-AzSqlServerActiveDirectoryAdministrator | Quita un administrador de Microsoft Entra para el servidor que hospeda SQL Database o Azure Synapse. |
Get-AzSqlServerActiveDirectoryAdministrator | Devuelve información sobre un administrador de Microsoft Entra configurado actualmente para el servidor que hospeda SQL Database o Azure Synapse. |
Use el comando de PowerShell get-help para ver más información de cada uno de estos comandos. Por ejemplo, get-help Set-AzSqlServerActiveDirectoryAdministrator
.
El script siguiente configura un grupo de administradores de Microsoft Entra denominado DBA_Group (id. de objeto de ejemplo aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
) para el servidor de ejemplo example-server, en un grupo de recursos de ejemplo llamado Example-Resource-Group:
$parameters = @{
ResourceGroupName = "Example-Resource-Group"
ServerName = "example-server"
DisplayName = "DBA_Group"
}
Set-AzSqlServerActiveDirectoryAdministrator @parameters
El parámetro DisplayName acepta el nombre para mostrar de Microsoft Entra ID y el nombre principal de usuario, como en los ejemplos siguientes: DisplayName="Adrian King"
y DisplayName="adrian@contoso.com"
. Si usa un grupo de Microsoft Entra, solo se admite el nombre para mostrar.
En el ejemplo siguiente se usa el parámetro opcional ObjectID:
$parameters = @{
ResourceGroupName = "Example-Resource-Group"
ServerName = "example-server"
DisplayName = "DBA_Group"
ObjectId = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
}
Set-AzSqlServerActiveDirectoryAdministrator @parameters
Nota
El elemento ObjectID es necesario cuando el valor DisplayName no es único. Para recuperar los valores ObjectID y DisplayName, puede ver las propiedades de un usuario o grupo en la sección de Microsoft Entra ID de Azure Portal.
En el ejemplo siguiente se devuelve información sobre el administrador actual de Microsoft Entra para el servidor:
$parameters = @{
ResourceGroupName = "Example-Resource-Group"
ServerName = "example-server"
}
Get-AzSqlServerActiveDirectoryAdministrator @parameters | Format-List
En el ejemplo siguiente se quita un administrador de Microsoft Entra:
$parameters = @{
ResourceGroupName = "Example-Resource-Group"
ServerName = "example-server"
}
Remove-AzSqlServerActiveDirectoryAdministrator @parameters
Nota
El administrador de Microsoft Entra se almacena en la base de datos del servidor master
como usuario (entidad de seguridad de base de datos). Dado que los nombres principales de la base de datos deben ser únicos, el nombre para mostrar del administrador no puede ser el mismo que el nombre de ningún usuario de la base de datos del master
servidor. Si ya existe un usuario con el nombre, se produce un error en la configuración del administrador de Microsoft Entra y se revierte, lo que indica que el nombre ya está en uso.
Al configurar el administrador de Microsoft Entra, se habilita la autenticación de Microsoft Entra para Azure SQL Managed Instance. Puede configurar un administrador de Microsoft Entra para la instancia de SQL Managed Instance mediante Azure Portal, PowerShell, la CLI de Azure o las API REST.
Para ejecutar los cmdlets de PowerShell, necesitará tener Azure PowerShell instalado y en marcha. Consulte el artículo de instalación y configuración de Azure PowerShell para información detallada.
En la tabla siguiente se enumeran los cmdlets de PowerShell que puede usar a fin de definir y administrar el administrador de Microsoft Entra para instancias administradas:
Nombre del cmdlet | Descripción |
---|---|
Set-AzSqlInstanceActiveDirectoryAdministrator | Configura un administrador de Microsoft Entra para la instancia administrada. |
Remove-AzSqlInstanceActiveDirectoryAdministrator | Quita un administrador de Microsoft Entra para la instancia administrada. |
Get-AzSqlInstanceActiveDirectoryAdministrator | Devuelve información sobre el administrador de Microsoft Entra para la instancia administrada. |
El siguiente comando obtiene información sobre un administrador de Microsoft Entra para una instancia administrada denominada "Sample-Instance" con un grupo de recursos denominado "Example-Resource-Group".
$parameters = @{
ResourceGroupName = "Example-Resource-Group"
InstanceName = "Sample-Instance"
}
Get-AzSqlInstanceActiveDirectoryAdministrator @parameters
Este comando de ejemplo establece el administrador de Microsoft Entra en un grupo denominado DBA (con el id. de objeto aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
de ejemplo) para la instancia de SQL Managed Instance denominada "Sample-Instance". Este servidor está asociado al grupo de recursos "Example-Resource-Group".
$parameters = @{
ResourceGroupName = "Example-Resource-Group"
InstanceName = "Sample-Instance"
DisplayName = "DBAs"
ObjectId = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
}
Set-AzSqlInstanceActiveDirectoryAdministrator @parameters
Este comando de ejemplo elimina al administrador de Microsoft Entra para la instancia de SQL Managed Instance, denominada "Sample-Instance", que está asociada a un grupo de recursos denominado "Example-Resource-Group".
$parameters = @{
ResourceGroupName = "Example-Resource-Group"
InstanceName = "Sample-Instance"
Confirm = $true
PassThru = $true
}
Remove-AzSqlInstanceActiveDirectoryAdministrator @parameters
SQL Managed Instance necesita permisos para leer en Microsoft Entra ID para escenarios como la autenticación de usuarios que se conectan mediante la pertenencia a grupos de seguridad y la creación de nuevos usuarios. Para que la autenticación de Microsoft Entra funcione, debe asignar a la identidad de instancia administrada el rol Lectores de directorio. Para ello, puede usar Azure Portal o PowerShell.
Para algunas operaciones, Azure SQL Database y Azure Synapse Analytics también requieren permisos a fin de consultar Microsoft Graph, que se explica en Permisos de Microsoft Graph. Azure SQL Database y Azure Synapse Analytics admiten permisos de Graph específicos para estos escenarios, mientras que SQL Managed Instance requiere el rol Lectores de directorio. Los permisos específicos y su asignación se describen en detalle en Habilitación de entidades de servicio para crear usuarios de Microsoft Entra.
El siguiente script de PowerShell agrega una identidad al rol Lectores de directorio. Esto se puede usar para asignar permisos a una instancia administrada o a una identidad de servidor principal para el servidor lógico (o cualquier identidad de Microsoft Entra).
# This script grants "Directory Readers" permission to a service principal representing a SQL Managed Instance or logical server.
# It can be executed only by a user who is a member of the **Global Administrator** or **Privileged Roles Administrator** role.
Import-Module Microsoft.Graph.Authentication
$instanceName = "<InstanceName>" # Enter the name of your managed instance or server
$tenantId = "<TenantId>" # Enter your tenant ID
Connect-MgGraph -TenantId $tenantId -Scopes "RoleManagement.ReadWrite.Directory"
# Get Microsoft Entra "Directory Readers" role and create if it doesn't exist
$roleName = "Directory Readers"
$role = Get-MgDirectoryRole -Filter "DisplayName eq '$roleName'"
if ($role -eq $null) {
# Instantiate an instance of the role template
$roleTemplate = Get-MgDirectoryRoleTemplate -Filter "DisplayName eq '$roleName'"
New-MgDirectoryRoleTemplate -RoleTemplateId $roleTemplate.Id
$role = Get-MgDirectoryRole -Filter "DisplayName eq '$roleName'"
}
# Get service principal for your SQL Managed Instance or logical server
$roleMember = Get-MgServicePrincipal -Filter "DisplayName eq '$instanceName'"
$roleMember.Count
if ($roleMember -eq $null) {
Write-Output "Error: No service principal with name '$($instanceName)' found, make sure that instanceName parameter was entered correctly."
exit
}
if (-not ($roleMember.Count -eq 1)) {
Write-Output "Error: Multiple service principals with name '$($instanceName)'"
Write-Output $roleMember | Format-List DisplayName, Id, AppId
exit
}
# Check if service principal is already member of Directory Readers role
$isDirReader = Get-MgDirectoryRoleMember -DirectoryRoleId $role.Id -Filter "Id eq '$($roleMember.Id)'"
if ($isDirReader -eq $null) {
# Add principal to Directory Readers role
Write-Output "Adding service principal '$($instanceName)' to 'Directory Readers' role..."
$body = @{
"@odata.id"= "https://graph.microsoft.com/v1.0/directoryObjects/{$($roleMember.Id)}"
}
New-MgDirectoryRoleMemberByRef -DirectoryRoleId $role.Id -BodyParameter $body
Write-Output "'$($instanceName)' service principal added to 'Directory Readers' role."
} else {
Write-Output "Service principal '$($instanceName)' is already member of 'Directory Readers' role."
}
El administrador de Microsoft Entra ahora se puede usar para crear entidades de seguridad (inicios de sesión) y entidades de seguridad de base de datos (usuarios) de Microsoft Entra. Para más información, consulte Integración de Microsoft Entra con Azure SQL Managed Instance.
Para conectarse a una base de datos en SQL Database o Azure Synapse Analytics con la autenticación de Microsoft Entra, debe configurarse una entidad de seguridad en la base de datos para esa identidad con al menos el permiso CONNECT
.
Cuando se crea un usuario de base de datos, recibe el permiso CONNECT para la base de datos de manera predeterminada. Un usuario de base de datos también hereda los permisos en dos circunstancias:
- Si el usuario es miembro de un grupo de Microsoft Entra que también tiene permisos asignados en el servidor.
- Si el usuario se crea a partir de un inicio de sesión, hereda los permisos asignados por el servidor del inicio de sesión aplicable en la base de datos.
La administración de permisos para entidades de seguridad de servidor y base de datos funciona igual, independientemente del tipo de entidad de seguridad (Microsoft Entra ID, autenticación de SQL, etc.). Se recomienda conceder permisos a los roles de base de datos en lugar de conceder permisos directamente a los usuarios. Después, los usuarios se pueden agregar a roles con los permisos adecuados. Esto simplifica la administración de permisos a largo plazo y reduce la probabilidad de que una identidad conserve el acceso pasado cuando sea adecuado.
Para más información, vea:
- Ejemplos y permisos del motor de base de datos
- Blog: Aspectos básicos sobre permisos del motor de base de datos
- Administración de roles de bases de datos e inicios de sesión especiales en Azure SQL Database
Un usuario de base de datos independiente es un tipo de usuario SQL que no está conectado a un inicio de sesión en la base de datos master
. Para crear un usuario de base de datos independiente de Microsoft Entra, conéctese a la base de datos con una identidad de Microsoft Entra que tenga al menos el permiso ALTER ANY USER. En el siguiente ejemplo de T-SQL se crea una entidad de seguridad de base de datos Microsoft_Entra_principal_name
a partir de Microsoft Entra ID.
CREATE USER [<Microsoft_Entra_principal_name>] FROM EXTERNAL PROVIDER;
A fin de crear un usuario de base de datos independiente para un grupo de Microsoft Entra, escriba el nombre para mostrar del grupo:
CREATE USER [ICU Nurses] FROM EXTERNAL PROVIDER;
A fin de crear un usuario de base de datos independiente para una identidad administrada o una entidad de servicio, escriba el nombre para mostrar de la identidad:
CREATE USER [appName] FROM EXTERNAL PROVIDER;
A fin de crear un usuario de base de datos independiente para un usuario de Microsoft Entra, escriba el nombre principal de usuario de la identidad:
CREATE USER [adrian@contoso.com] FROM EXTERNAL PROVIDER;
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 y Azure Synapse Analytics. Los inicios de sesión de Microsoft Entra están disponibles con carácter general para Azure SQL Managed Instance y SQL Server 2022.
Se admiten entidades de seguridad de servidor (o inicios de sesión) de Microsoft Entra, lo que significa que los usuarios de bases de datos independientes no son necesarios. Las entidades de seguridad de base de datos (usuarios) se pueden crear en función de una entidad de seguridad de servidor, lo que significa que los usuarios de Microsoft Entra pueden heredar permisos asignados de nivel de servidor de un inicio de sesión.
CREATE USER [appName] FROM LOGIN [appName];
Para obtener más información, consulte Información general sobre SQL Managed Instance. Para conocer la sintaxis de creación de entidades de seguridad (inicios de sesión) de un servidor de Microsoft Entra, consulte CREATE LOGIN.
No puede crear directamente un usuario de base de datos para una administración de identidades en un inquilino de Microsoft Entra diferente al asociado a la suscripción de Azure. Sin embargo, los usuarios de otros directorios se pueden importar al directorio asociado como usuarios externos. Se pueden usar para crear usuarios de base de datos independientes que puedan acceder a la base de datos. Los usuarios externos también pueden obtener acceso a través de la pertenencia a grupos de Microsoft Entra.
Ejemplos: para crear un usuario de base de datos independiente que represente un usuario de dominio administrado o federado de Microsoft Entra:
CREATE USER [alice@fabrikam.com] FROM EXTERNAL PROVIDER;
Una cuenta de usuario de dominio federado que se importa en un dominio administrado como un usuario externo debe usar la identidad del dominio administrado.
No se admiten caracteres especiales, como los dos puntos (:
) o la «y» comercial (&
), en los nombres de usuario de las instrucciones CREATE LOGIN
y CREATE USER
de T-SQL.
Microsoft Entra ID y Azure SQL divergen en su diseño de administración de usuarios de una manera clave: Microsoft Entra ID permite duplicar los nombres para mostrar dentro de un inquilino, mientras que Azure SQL requiere que todas las entidades de seguridad de servidor de un servidor o instancia y todas las entidades de seguridad de base de datos de una base de datos tengan un nombre único. Dado que Azure SQL usa directamente el nombre para mostrar de Microsoft Entra de la identidad al crear entidades de seguridad, esto puede producir errores al crear usuarios. Para resolver este problema, Azure SQL ha publicado la mejora WITH OBJECT_ID
que se encuentra actualmente en versión preliminar, lo que permite a los usuarios especificar el id. de objeto de Microsoft Entra de la identidad que se va a agregar al servidor o a la instancia.
El comando CREATE USER ... FROM EXTERNAL PROVIDER
requiere acceso de Azure SQL a Microsoft Entra ID ("proveedor externo") en nombre del usuario que ha iniciado sesión. A veces, surgen circunstancias que hacen que Microsoft Entra ID devuelva una excepción a Azure SQL.
- Es posible que encuentres el error 33134 de SQL, que contiene el mensaje de error específico del identificador de Microsoft Entra ID. El error suele indicar que se deniega el acceso, que el usuario debe inscribirse en MFA para acceder al recurso, o que el acceso entre las aplicaciones propias debe controlarse con autorización previa. En los dos primeros casos, el problema se debe normalmente a las directivas de acceso condicional que se establecen en el inquilino de Microsoft Entra del usuario: impiden que el usuario acceda al proveedor externo. Al actualizar las directivas de acceso condicional para permitir el acceso a la aplicación "00000003-0000-0000-c000-000000000000" (el identificador de aplicación de Microsoft Graph API) se debería resolver el problema. Si el error indica que el acceso entre las aplicaciones propias debe controlarse con autorización previa, el problema se debe a que el usuario ha iniciado sesión como entidad de servicio. El comando debe ejecutarse correctamente si lo ejecuta un usuario.
- Si recibe la notificación Tiempo de espera de conexión agotado, es posible que deba establecer el parámetro
TransparentNetworkIPResolution
de la cadena de conexión en False. Para más información, consulte Connection timeout issue with .NET Framework 4.6.1 – TransparentNetworkIPResolution (Problema de tiempo de espera de conexión agotado con .NET Framework 4.6.1: TransparentNetworkIPResolution).
Para más información sobre la creación de usuarios de bases de datos independientes basados en identidades de Microsoft Entra, vea CREATE USER.
Para mejorar la seguridad en el recurso de Azure SQL, considere la posibilidad de configurar la autenticación multifactor (MFA), que pide al usuario que use un segundo método alternativo para autenticarse en la base de datos, como una llamada telefónica o una aplicación autenticadora.
Para usar la autenticación multifactor con el recurso de Azure SQL, habilite primero la autenticación multifactor y, después, use una directiva de acceso condicional a fin de aplicar MFA para el recurso de Azure SQL.
Una vez configurada la autenticación de Microsoft Entra, puede usarla para conectarse al recurso de SQL con herramientas de Microsoft, como SQL Server Management Studio y SQL Server Data Tools, y configurar aplicaciones cliente para conectarse mediante identidades de Microsoft Entra.
Para obtener instrucciones sobre cómo solucionar problemas, consulte Blog: Solución de problemas relacionados con la autenticación de Microsoft Entra con Azure SQL Database y Azure Synapse.
- Autorización del acceso de base de datos a SQL Database, Instancia administrada de SQL y Azure Synapse Analytics
- Principals
- Roles de base de datos
- Reglas de firewall de Azure SQL Database y Azure Synapse
- Creación de usuarios invitados de Microsoft Entra y establecimiento como administrador de Microsoft Entra
- Tutorial: Creación de usuarios de Microsoft Entra con aplicaciones de Microsoft Entra