Compartir a través de


Administración de bases de datos en bases de datos de Azure SQL mediante Azure Automation

En este artículo, se describe el procedimiento para conectar y administrar bases de datos de Azure SQL mediante la identidad administrada asignada por el sistema de Azure Automation. Con Azure Automation puede administrar bases de datos en Azure SQL Database mediante los cmdlets de Az PowerShell más recientes que están disponibles en Azure Az PowerShell.

Azure Automation tiene estos cmdlets de Azure Az PowerShell disponibles directamente para poder realizar todas las tareas de administración de base de datos SQL dentro del servicio. También puede emparejar estos cmdlets en Azure Automation con los cmdlets de otros servicios de Azure para automatizar tareas complejas entre los servicios de Azure y sistemas de terceros.

Azure Automation también puede emitir comandos de T-SQL (Transact SQL) en servidores SQL mediante PowerShell.

Para ejecutar los comandos en la base de datos, es necesario hacer lo siguiente:

  • Asegúrese de que la cuenta de Automation tenga una identidad administrada asignada por el sistema.
  • Proporcione los permisos adecuados para la identidad administrada de Automation.
  • Configure el servidor SQL para usar la autenticación de Microsoft Entra.
  • Cree un usuario en el servidor SQL que se asigne a la identidad administrada de la cuenta de Automation.
  • Cree un runbook para conectarse y ejecutar los comandos.
  • (Opcional) si el servidor SQL está protegido por un firewall, cree una instancia de Hybrid Runbook Worker (HRW), instale los módulos SQL en ese servidor y agregue la dirección IP de HRW a la lista de permitidos en el firewall.

Conéctese a la base de datos de Azure SQL mediante la identidad administrada asignada por el sistema

Para permitir el acceso desde la identidad administrada del sistema de Automation a la base de datos de Azure SQL, siga estos pasos:

  1. Si la identidad administrada del sistema de Automation estuviera establecida en Desactivado, haga lo siguiente:

    1. Inicie sesión en Azure Portal.

    2. Vaya a su cuenta de Automation.

    3. En la página de la cuenta de Automation, en Configuración de la cuenta, seleccione Identidad.

    4. En la pestaña Asignado por el sistema, seleccione el Estado como Activado.

      Recorte de pantalla de la configuración del estado en ACTIVADO para la identidad administrada asignada por el sistema.

  2. Una vez que la identidad administrada del sistema esté establecida en Activado, deberá proporcionar a la cuenta el acceso necesario mediante estos pasos:

    1. En la página Cuenta de Automation | Identidad, en la pestaña Asignado por el sistema, en Permisos, seleccione Asignaciones de roles de Azure.
    2. En la página Asignaciones de roles de Azure, seleccione +Agregar asignación de roles (versión preliminar).
    3. En Agregar asignación de roles (versión preliminar), establezca el Ámbito como SQL, seleccione la Suscripción, el Recurso en la lista desplegable y el Rol, según los permisos mínimos necesarios y, a continuación, seleccione Guardar.

    Recorte de pantalla de adición de asignación de roles cuando el estado de la identidad administrada asignada por el sistema se establece en ACTIVADO.

  3. Configure el servidor SQL para la autenticación de Active Directory mediante estos pasos:

    1. Vaya a la página principal de Azure Portal y seleccione servidores SQL.
    2. En la página Servidor SQL, en Configuración, seleccione Microsoft Entra ID.
    3. Seleccione Establecer administrador para configurar el servidor SQL para la autenticación de AD.
  4. Agregue la autenticación en el lado SQL mediante estos pasos:

    1. Vaya a la página principal de Azure Portal y seleccione servidores SQL.
    2. En la página Servidor SQL, en Configuración, seleccione Bases de datos de SQL Database.
    3. Seleccione la base de datos para ir a la página base de datos SQL, seleccione Editor de consultas (versión preliminar) y ejecute las dos consultas siguientes:
      # AutomationAccount - replace with your Automation account's name
      # ObjectID - replace with object (principal) ID for your system managed identity principal from step 1.
      CREATE USER "AutomationAccount" FROM EXTERNAL PROVIDER WITH OBJECT_ID = `ObjectID`
      EXEC sp_addrolemember `db_owner`, "AutomationAccount"
      

Código de ejemplo

Conexión a Azure SQL Server

if ($($env:computerName) -eq "Client") {"Runbook running on Azure Client sandbox"} else {"Runbook running on " + $env:computerName}
Disable-AzContextAutosave -Scope Process
Connect-AzAccount -Identity
$Token = (Get-AZAccessToken -ResourceUrl https://database.windows.net).Token
Invoke-Sqlcmd -ServerInstance azuresqlserverxyz.database.windows.net -Database MyDBxyz -AccessToken $token -query 'select * from TableXYZ' 

Compruebe los permisos de la cuenta en el lado SQL

SELECT roles.[name] as role_name, members.name as [user_name] 
from sys.database_role_members 
Join sys.database_principals roles on database_role_members.role_principal_id= roles.principal_id 
join sys.database_principals members on database_role_members.member_principal_id=members.principal_id 
Order By 
roles.[name], members.[name] 

Nota:

Cuando un servidor SQL se ejecuta detrás de un firewall, es necesario ejecutar el runbook de Azure Automation en una máquina de su propia red. Asegúrese de configurar esta máquina como Hybrid Runbook Worker para que el firewall no bloquee la dirección IP o la red. Para obtener más información sobre cómo configurar una máquina como Hybrid Worker, consulte crear una instancia de Hybrid Worker.

Uso de Hybrid Worker

Cuando se usa Hybrid Worker, los módulos que usa el runbook deben instalarse localmente desde un símbolo del sistema de PowerShell con privilegios elevados. Por ejemplo, - Install-module Az.Accounts and Install-module SqlServer. Para buscar los nombres de módulo necesarios, ejecute un comando en cada cmdlet y, a continuación, compruebe el origen. Por ejemplo, para comprobar el nombre del módulo para el cmdlet Connect-AzAccounts que forma parte del módulo Az.Account, ejecute el comando: get-command Connect-AzAccount

Nota:

Se recomienda agregar el código siguiente en la parte superior de cualquier runbook que esté pensado para ejecutarse en instancias de Hybrid Worker: if ($($env:computerName) -eq "CLIENT") {"Runbook running on Azure CLIENT"} else {"Runbook running on " + $env:computerName}. El código permite ver el nodo en el que se ejecuta y, en el caso de que se ejecute accidentalmente en la nube de Azure en lugar de la instancia de Hybrid Worker, esto ayudará a determinar el motivo por el que un runbook no funcionó.

Pasos siguientes