Eseguire il backup e il ripristino su un URL utilizzando identità gestite

si applica a:SQL Server nella macchina virtuale di Azure (solo Windows)

Questo articolo illustra come eseguire il backup e il ripristino di SQL Server in macchine virtuali di Azure (VM) database da un URL usando le identità gestite di Microsoft Entra.

Panoramica

A partire dall'aggiornamento cumulativo 17 (CU17) di SQL Server 2022, è possibile usare le identità gestite con credenziali di SQL Server per eseguire il backup e il ripristino dei database di SQL Server su macchine virtuali Azure dall'archiviazione di Azure Blob. Identità Gestite fornisce un'identità per le applicazioni da usare per la connessione alle risorse che supportano l'autenticazione di Microsoft Entra.

L'uso di identità gestite nelle credenziali per le operazioni BACKUP TO URL e RESTORE FROM URL T-SQL è supportato solo da SQL Server nelle macchine virtuali di Azure. L'uso di identità gestite con SQL Server locale per BACKUP TO URL e RESTORE FROM URL non è supportato.

Prerequisiti

  • Una macchina virtuale di SQL Server in Azure con SQL Server 2022 CU17 o versione successiva, configurata con l'autenticazione di Microsoft Entra.
  • Un account di archiviazione BLOB di Azure .
  • Accesso di rete valido all'archiviazione Blob di Azure, autorizzazioni del Windows Firewall sull'host per consentire la connessione esterna e validi endpoint di servizio dell'account di archiviazione.
  • L'identità gestita primaria per SQL Server nella macchina virtuale di Azure richiede:
    • Per essere assegnati con un'identità gestita assegnata dall'utente o un'identità gestita assegnata dal sistema. Per altre informazioni, vedere Configurare le identità gestite nelle macchine virtuali di Azure.
    • Per avere il ruolo Storage Blob Data Contributor per l'identità gestita primaria assegnata all'account di archiviazione.

Creare una credenziale del server usando identità gestite

Per usare i comandi T-SQL BACKUP DATABASE <database name> TO URL e RESTORE <database name> FROM URL con identità gestite, è necessario creare credenziali del server che usano l'identità gestita. Il nome delle credenziali rappresenta l'URL di archiviazione di Azure e indica dove verrà archiviato il backup del database.

L'esempio seguente illustra come creare credenziali per un'identità gestita:

SQL
CREATE CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>] 
    WITH IDENTITY = 'Managed Identity'

La clausola WITH IDENTITY = 'Managed Identity' richiede un'identità gestita primaria assegnata a SQL Server nella macchina virtuale di Azure.

Per ulteriori informazioni sui messaggi di errore che possono verificarsi se l'identità gestita primaria non è assegnata o se non le sono state concesse le autorizzazioni appropriate, vedere la sezione Messaggi di errore.

BACKUP verso l'URL con un'identità gestita

Dopo aver creato le credenziali, è possibile usarla per eseguire il backup e il ripristino dei database nell'archivio BLOB di Azure. Assicurarsi che l'identità gestita primaria per SQL Server nella macchina virtuale di Azure abbia il ruolo Storage Blob Data Contributor assegnato all'account di archiviazione.

L'esempio seguente illustra come eseguire il backup di un database nell'archivio BLOB di Azure usando le credenziali dell'identità gestita:

SQL
BACKUP DATABASE [AdventureWorks] 
    TO URL = 'https://<storage-account-name>.blob.core.windows.net/<container-name>/AdventureWorks.bak' 

RESTORE dall'URL con identità gestita

L'esempio seguente illustra come ripristinare un database dall'archivio BLOB di Azure usando le credenziali dell'identità gestita:

SQL
RESTORE DATABASE [AdventureWorks] 
    FROM URL = 'https://<storage-account-name>.blob.core.windows.net/<container-name>/AdventureWorks.bak' 

Messaggi di errore

flag di traccia 4675 può essere usato per controllare le credenziali create con un'identità gestita. Se l'istruzione CREATE CREDENTIAL è stata eseguita senza il flag di tracciamento 4675 abilitato, non viene generato alcun messaggio di errore se l'identità gestita primaria non è impostata per il server. Per risolvere questo scenario, le credenziali devono essere eliminate e ricreate nuovamente dopo l'abilitazione del flag di traccia.

Nessuna identità gestita primaria assegnata

Se un'identità gestita primaria non è assegnata a SQL Server nella macchina virtuale di Azure, le operazioni di backup e ripristino avranno esito negativo con un messaggio di errore che indica che l'identità gestita non è selezionata.

SQL
Msg 37563, Level 16, State 2, Line 14
The primary managed identity is not selected for this server. Enable the primary managed identity for Microsoft Entra authentication for this server. For more information see (https://aka.ms/sql-server-managed-identity-doc).`

Nessun ruolo Storage Blob Data Contributor assegnato

Se all'account di archiviazione non viene assegnato il ruolo di per l'identità gestita primaria per SQL Server in una macchina virtuale di Azure, l'operazione di BACKUP avrà esito negativo con un messaggio di errore che indica che l'accesso viene negato.

SQL
Msg 3201, Level 16, State 1, Line 31
Cannot open backup device 'https://<storage-account-name>.blob.core.windows.net/<container-name>/AdventureWorks.bak'. Operating system error 5(Access is denied.).
Msg 3013, Level 16, State 1, Line 31
BACKUP DATABASE is terminating abnormally. 

Se all'account di archiviazione non viene assegnato il ruolo di Storage Blob Data Contributor per l'identità gestita per SQL Server in una macchina virtuale di Azure, l'operazione RESTORE avrà esito negativo con un messaggio di errore che indica che l'accesso viene negato.

SQL
Msg 3201, Level 16, State 1, Line 31
Cannot open backup device 'https://<storage-account-name>.blob.core.windows.net/<container-name>/AdventureWorks.bak'. Operating system error 5(Access is denied.).
Msg 3013, Level 16, State 1, Line 31
RESTORE DATABASE is terminating abnormally. 

Nome database duplicato

Quando il database originale con lo stesso nome esiste nella risorsa di archiviazione, il backup di un nuovo database nello stesso percorso di archiviazione avrà esito negativo con l'errore seguente:

SQL
Msg 1834, Level 16, State 1, Line 35
RESTORE DATABASE AdventureWorks 
from URL = 'https://<storage-account-name>.blob.core.windows.net/<container-name>/AdventureWorks.bak' 
Msg 1834, Level 16, State 1, Line 35 
The file 'C:\Server\sqlservr\data\AdventureWorks.mdf' cannot be overwritten.  It is being used by the database 'AdventureWorks'. 
Msg 3156, Level 16, State 4, Line 35 
File 'AdventureWorks' cannot be restored to 'C:\Server\sqlservr\data\AdventureWorks.mdf'. Use WITH MOVE to identify a valid location for the file.

Per risolvere questo problema, eliminare il database originale o spostare i file usati in un percorso diverso prima di ripristinare il database. Per ulteriori informazioni, consultare Ripristinare un database in un nuovo percorso (SQL Server).

Limitazioni

  • L'identità gestita a livello di server è supportata solo per SQL Server nella macchina virtuale di Azure e non in SQL Server locale. L'identità gestita a livello di server non è supportata per Linux.

  • BACKUP TO URL o RESTORE FROM URL con un'identità gestita è supportato solo per SQL Server nella macchina virtuale di Azure. BACKUP TO URL o RESTORE FROM URL non è supportato da SQL Server in locale.

  • Le identità gestite non sono supportate nell'istanza del cluster di failover (FCI).

  • BACKUP TO URL può essere eseguito solo con la stessa identità gestita usata per SQL Server nella macchina virtuale di Azure, indipendentemente dal fatto che il server disponga di una o più istanze di SQL Server nella macchina virtuale.