Condividi tramite


Gestire i database nel database SQL di Azure tramite Automazione di Azure

Questo articolo descrive la procedura per connettere e gestire i database nel database SQL di Azure usando l'identità gestita assegnata dal sistema di Automazione di Azure. Con Automazione di Azure è possibile gestire database in Database SQL di Azure usando i cmdlet Az di PowerShell più recenti disponibili in Azure Az PowerShell.

I cmdlet di Az PowerShell sono predefiniti in Automazione di Azure, per consentire l'esecuzione di tutte le attività di gestione dei database SQL dall'interno del servizio. È anche possibile abbinare tali cmdlet in Automazione di Azure ai cmdlet di altri servizi di Azure per automatizzare attività complesse in tutti i servizi di Azure e nei sistemi di terze parti.

Automazione di Azure può anche eseguire comandi T-SQL (Transact SQL) sui server SQL usando PowerShell.

Per eseguire i comandi sul database, è necessario eseguire le operazioni seguenti:

  • Assicurarsi che l'account di Automazione abbia un'identità gestita assegnata dal sistema.
  • Fornire le autorizzazioni appropriate per l'identità gestita di Automazione.
  • Configurare SQL Server per l'utilizzo dell'autenticazione di Microsoft Entra.
  • Creare un utente nel server SQL mappato all'identità gestita dell'account di Automazione.
  • Creare un runbook per connettersi ed eseguire i comandi.
  • (Facoltativo) Se il server SQL è protetto da un firewall, creare un ruolo di lavoro ibrido per runbook (HRW), installare i moduli SQL in tale server e aggiungere l'indirizzo IP HRW all'elenco elementi consentiti nel firewall.

Connettersi al database SQL di Azure usando l'identità gestita assegnata dal sistema

Per consentire l'accesso dall'identità gestita del sistema di Automazione al database SQL di Azure, seguire questa procedura:

  1. Se l'identità gestita del sistema di Automazione è OFF, eseguire le operazioni seguenti:

    1. Accedere al portale di Azure.

    2. Passare all'account di Automazione.

    3. Nella pagina Account di Automazione, in Impostazioni account selezionare Identità.

    4. Nella scheda Assegnata dal sistema, per lo Stato selezionare ON.

      Screenshot dell'impostazione dello stato su ON per Identità gestita assegnata dal sistema.

  2. Una volta che l'identità gestita del sistema è impostata su ON, è necessario fornire all'account l'accesso necessario attenendosi alla procedura seguente:

    1. Nella pagina Account di Automazione | Identità, scheda Assegnata dal sistema, in Autorizzazioni selezionare Assegnazioni di ruolo di Azure.
    2. Nella pagina Assegnazioni di ruolo di Azure selezionare +Aggiungi assegnazione di ruolo (anteprima).
    3. In Aggiungi assegnazione di ruolo (anteprima), per l’Ambito selezionare SQL, selezionare sottoscrizione, risorsa nell'elenco a discesa e ruolo in base alle autorizzazioni minime necessarie, quindi selezionare Salva.

    Screenshot dell'aggiunta dell'assegnazione di ruolo quando lo stato dell'identità gestita assegnata dal sistema è impostato su ON.

  3. Configurare SQL Server per l'autenticazione di Active Directory con la procedura seguente:

    1. Passare alla home page del portale di Azure e selezionare SQL Server.
    2. Nella pagina SQL Server, in Impostazioni, selezionare Microsoft Entra ID.
    3. Selezionare Imposta amministratore per configurare SQL Server per l'autenticazione di Active Directory.
  4. Aggiungere l'autenticazione lato SQL in base alla procedura seguente:

    1. Passare alla home page del portale di Azure e selezionare SQL Server.
    2. Nella pagina SQL Server, in Impostazioni, selezionare Database SQL.
    3. Selezionare il database per passare alla pagina Database SQL e selezionare Editor di query (anteprima) ed eseguire le due query seguenti:
      # 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"
      

Codice di esempio

Connessione ad 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' 

Controllare le autorizzazioni dell'account lato 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

Quando un server SQL è in esecuzione dietro un firewall, è necessario eseguire il runbook di Automazione di Azure su un computer nella propria rete. Assicurarsi di configurare questo computer come ruolo di lavoro ibrido per runbook, in modo che l'indirizzo IP o la rete non siano bloccati dal firewall. Per altre informazioni su come configurare un computer come ruolo di lavoro ibrido, vedere Creare un ruolo di lavoro ibrido.

Usare un ruolo di lavoro ibrido

Quando si usa un ruolo di lavoro ibrido, i moduli usati dal runbook devono essere installati localmente da un prompt di PowerShell con privilegi elevati. Ad esempio: - Install-module Az.Accounts and Install-module SqlServer. Per trovare i nomi dei moduli necessari, eseguire un comando in ogni cmdlet e controllare l'origine. Ad esempio, per controllare il nome del modulo per il cmdlet Connect-AzAccounts che fa parte del modulo Az.Account, eseguire il comando: get-command Connect-AzAccount

Nota

È consigliabile aggiungere il codice seguente nella parte superiore di qualsiasi runbook che deve essere eseguito in un ruolo di lavoro ibrido: if ($($env:computerName) -eq "CLIENT") {"Runbook running on Azure CLIENT"} else {"Runbook running on " + $env:computerName}. Il codice consente di visualizzare il nodo in cui è in esecuzione e, nel caso in cui venga eseguito accidentalmente nel cloud di Azure anziché nel ruolo di lavoro ibrido, consente di determinare il motivo per cui un runbook non funzionava.

Passaggi successivi