Esercitazione: Garantire la sicurezza dell'istanza gestita di SQL di Azure con le entità server (account di accesso) di Azure AD

Si applica a: Istanza gestita di SQL di Azure

L'istanza gestita di SQL di Azure offre quasi tutte le funzionalità di sicurezza incluse nella versione più recente del motore di database di SQL Server (Enterprise Edition):

  • Limitare l'accesso in un ambiente isolato
  • Usare meccanismi di autenticazione che verificano l'identità: Azure Active Directory (Azure AD) e Autenticazione SQL
  • Concedere autorizzazioni tramite appartenenze e autorizzazioni basate sui ruoli
  • Abilitare le funzionalità di sicurezza

In questa esercitazione verranno illustrate le procedure per:

  • Creare un'entità server (account di accesso) di Azure AD per un'istanza gestita
  • Concedere le autorizzazioni alle entità server (account di accesso) di Azure AD in un'istanza gestita
  • Creare utenti di Azure AD da entità server (account di accesso) di Azure AD
  • Assegnare autorizzazioni agli utenti di Azure AD e gestire la sicurezza dei database
  • Usare la rappresentazione con utenti di Azure AD
  • Usare query tra database con utenti di Azure AD
  • Informazioni sulle funzionalità di sicurezza come la protezione da minacce, il controllo, il data masking e la crittografia

Per altre informazioni, vedere Panoramica dell'istanza gestita di SQL di Azure.

Prerequisiti

Per completare questa esercitazione, verificare di avere i prerequisiti seguenti:

Limitare l'accesso

Le istanze gestite sono accessibili tramite un indirizzo IP privato. Analogamente a quanto avviene con un ambiente SQL Server isolato, le applicazioni o gli utenti devono accedere alla rete dell'istanza gestita di SQL (rete virtuale) prima di poter stabilire una connessione. Per altre informazioni, vedere Connettere l'applicazione a Istanza gestita di SQL di Azure.

È anche possibile configurare nell'istanza gestita un endpoint servizio che consente le connessioni pubbliche, in modo analogo al database SQL di Azure. Per altre informazioni, vedere Configurare l'endpoint pubblico nell'istanza gestita di SQL di Azure.

Nota

Le regole del firewall del database SQL di Azure non si applicano neanche in caso di endpoint servizio abilitati. Per gestire la connettività, l'istanza gestita di SQL di Azure è dotata di un proprio firewall predefinito.

Creare un'entità server (account di accesso) di Azure AD con SSMS

La prima entità server (account di accesso) di Azure AD può essere creata tramite l'account amministratore SQL standard (non Azure AD), ovvero sysadmin, o l'amministratore di Azure AD per l'istanza gestita creata durante il processo di provisioning. Per altre informazioni, vedere Effettuare il provisioning di un amministratore di Azure Active Directory per l'istanza gestita di SQL.

Per esempi relativi alla connessione all'istanza gestita di SQL, vedere gli articoli seguenti:

  1. Accedere all'istanza gestita con un account di accesso SQL standard (non Azure AD), ovvero sysadmin, o un amministratore di Azure AD per l'istanza gestita di SQL usando SQL Server Management Studio.

  2. In Esplora oggetti fare clic con il pulsante destro del mouse sul server e scegliere Nuova query.

  3. Nella finestra di query usare la sintassi seguente per creare un account di accesso per un account Azure AD locale:

    USE master
    GO
    CREATE LOGIN login_name FROM EXTERNAL PROVIDER
    GO
    

    Questo esempio mostra come creare un account di accesso per l'account nativeuser@aadsqlmi.onmicrosoft.com.

    USE master
    GO
    CREATE LOGIN [nativeuser@aadsqlmi.onmicrosoft.com] FROM EXTERNAL PROVIDER
    GO
    
  4. Sulla barra degli strumenti selezionare Esegui per creare l'account di accesso.

  5. Verificare l'account di accesso appena aggiunto eseguendo il comando T-SQL seguente:

    SELECT *  
    FROM sys.server_principals;  
    GO
    

    Screenshot della scheda Risultati in Esplora oggetti di SSMS che mostra i parametri name, principal_id, sid, type e type_desc dell'account di accesso appena aggiunto.

Per altre informazioni, vedere CREATE LOGIN.

Concedere le autorizzazioni per la creazione degli account di accesso

Per creare altre entità server (account di accesso) di Azure AD, è necessario concedere autorizzazioni o ruoli di SQL Server all'entità di sicurezza (SQL o Azure AD).

Autenticazione SQL

  • Se l'account di accesso è un'entità di sicurezza SQL, solo gli account di accesso che fanno parte del ruolo sysadmin possono usare il comando per creare gli account di accesso per un account Azure AD.

Autenticazione di Azure AD

  • Per consentire all'entità server (account di accesso) di Azure AD appena creata di creare altri account di accesso per altri utenti, gruppi o applicazioni di Azure AD, concedere all'account di accesso il ruolo del server sysadmin o securityadmin.
  • Per consentire all'entità server (account di accesso) di Azure AD di creare altre entità server (account di accesso) di Azure AD, è necessario concedere almeno l'autorizzazione ALTER ANY LOGIN.
  • Per impostazione predefinita, le autorizzazioni standard concesse alle entità server (account di accesso) di Azure AD appena create nel database master sono: CONNECT SQL e VIEW ANY DATABASE.
  • Il ruolo del server sysadmin può essere concesso a più entità server (account di accesso) AD Azure all'interno di un'istanza gestita.

Per aggiungere l'account di accesso al ruolo del server sysadmin:

  1. Accedere di nuovo all'istanza gestita oppure usare la connessione esistente con l'amministratore di Azure AD o un'entità di sicurezza SQL, ovvero sysadmin.

  2. In Esplora oggetti fare clic con il pulsante destro del mouse sul server e scegliere Nuova query.

  3. Concedere all'entità server (account di accesso) di Azure AD il ruolo del server sysadmin usando la sintassi T-SQL seguente:

    ALTER SERVER ROLE sysadmin ADD MEMBER login_name
    GO
    

    L'esempio seguente mostra come concedere il ruolo del server sysadmin all'account di accesso nativeuser@aadsqlmi.onmicrosoft.com

    ALTER SERVER ROLE sysadmin ADD MEMBER [nativeuser@aadsqlmi.onmicrosoft.com]
    GO
    

Creare altre entità server (account di accesso) AD Azure con SQL Server Management Studio

Dopo aver creato l'entità server (account di accesso) di Azure AD e aver concesso i privilegi di sysadmin, tale account può creare altri account di accesso usando la clausola FROM EXTERNAL PROVIDER con CREATE LOGIN.

  1. Connettersi all'istanza gestita con l'entità server (account di accesso) di Azure AD usando SQL Server Management Studio. Immettere il nome host dell'istanza gestita di SQL. Per l'autenticazione in SSMS è possibile scegliere tra tre opzioni quando si esegue l'accesso con un account Azure AD:

  2. Selezionare Active Directory - Universale con supporto MFA. Verrà visualizzata una finestra di accesso per Multi-Factor Authentication (MFA). Accedere con la password di Azure AD.

    Screenshot della finestra di accesso a Multi-Factor Authentication con il cursore nel campo Immetti password.

  3. In Esplora oggetti di SSMS fare clic con il pulsante destro del mouse sul server e scegliere Nuova query.

  4. Nella finestra di query usare la sintassi seguente per creare un account di accesso per un altro account Azure AD:

    USE master
    GO
    CREATE LOGIN login_name FROM EXTERNAL PROVIDER
    GO
    

    Questo esempio mostra come creare un account di accesso per l'utente di Azure AD bob@aadsqlmi.net, il cui dominio aadsqlmi.net è federato con il dominio aadsqlmi.onmicrosoft.com di Azure AD.

    Eseguire il comando T-SQL seguente. Gli account Azure AD federati sono le sostituzioni dell'istanza gestita di SQL per account di accesso e utenti di Windows locali.

    USE master
    GO
    CREATE LOGIN [bob@aadsqlmi.net] FROM EXTERNAL PROVIDER
    GO
    
  5. Creare un database nell'istanza gestita usando la sintassi CREATE DATABASE. Questo database verrà usato per testare gli account di accesso nella sezione successiva.

    1. In Esplora oggetti fare clic con il pulsante destro del mouse sul server e scegliere Nuova query.

    2. Nella finestra di query usare la sintassi seguente per creare un database denominato MyMITestDB.

      CREATE DATABASE MyMITestDB;
      GO
      
  6. Creare un account di accesso dell'istanza gestita SQL per un gruppo in Azure AD. Il gruppo deve essere già presente in Azure AD prima di poter aggiungere l'account di accesso all'istanza gestita di SQL. Vedere Creare un gruppo di base e aggiungere membri con Azure Active Directory. Creare un gruppo mygroup e aggiungere membri a tale gruppo.

  7. Aprire una nuova finestra di query in SQL Server Management Studio.

    Questo esempio presuppone l'esistenza di un gruppo denominato mygroup in Azure AD. Eseguire il comando seguente:

    USE master
    GO
    CREATE LOGIN [mygroup] FROM EXTERNAL PROVIDER
    GO
    
  8. A scopo di test, accedere all'istanza gestita con l'account di accesso o il gruppo appena creato. Aprire una nuova connessione all'istanza gestita e usare il nuovo account di accesso per l'autenticazione.

  9. In Esplora oggetti fare clic con il pulsante destro del mouse sul server e scegliere Nuova query per la nuova connessione.

  10. Per verificare le autorizzazioni del server per l'entità server (account di accesso) di Azure AD appena creata, eseguire il comando seguente:

    SELECT * FROM sys.fn_my_permissions (NULL, 'DATABASE')
    GO
    

Gli utenti guest sono supportati come singoli utenti (senza essere parte di un gruppo AAD (anche se possono essere) e gli account di accesso possono essere creati direttamente nel master (ad esempio , joe@contoso.con) usando la sintassi di accesso corrente.

Creare un utente di Azure AD dall'entità server (account di accesso) di Azure AD

Il funzionamento delle autorizzazioni per i singoli database nell'istanza gestita di SQL è analogo a quello delle autorizzazioni per i database in SQL Server. È possibile creare un utente da un account di accesso esistente in un database e concedere le autorizzazioni per il database oppure aggiungerlo a un ruolo del database.

A questo punto, dopo aver creato un database denominato MyMITestDB e un account di accesso che dispone solo delle autorizzazioni predefinite, il passaggio successivo consiste nel creare un utente da tale account di accesso. Al momento, l'account di accesso può connettersi all'istanza gestita e visualizzare tutti i database, ma non può interagire con essi. Se si accede con l'account Azure AD con le autorizzazioni predefinite e si prova a espandere il database appena creato, verrà visualizzato l'errore seguente:

Screenshot di un messaggio di errore del Esplora oggetti S M S che legge

Per altre informazioni sulla concessione delle autorizzazioni per i database, vedere Introduzione alle autorizzazioni del motore di database.

Creare un utente di Azure AD e una tabella di esempio

  1. Accedere all'istanza gestita con un account sysadmin usando SQL Server Management Studio.

  2. In Esplora oggetti fare clic con il pulsante destro del mouse sul server e scegliere Nuova query.

  3. Nella finestra di query usare la sintassi seguente per creare un utente di Azure AD da un'entità server (account di accesso) di Azure AD:

    USE <Database Name> -- provide your database name
    GO
    CREATE USER user_name FROM LOGIN login_name
    GO
    

    Nell'esempio seguente viene creato un utente bob@aadsqlmi.net dall'account di accesso bob@aadsqlmi.net:

    USE MyMITestDB
    GO
    CREATE USER [bob@aadsqlmi.net] FROM LOGIN [bob@aadsqlmi.net]
    GO
    
  4. È anche possibile creare un utente di Azure AD da un'entità server (account di accesso) di Azure AD che corrisponde a un gruppo.

    Nell'esempio seguente viene creato un account di accesso per il gruppo mygroup di Azure AD esistente nell'istanza di Azure AD.

    USE MyMITestDB
    GO
    CREATE USER [mygroup] FROM LOGIN [mygroup]
    GO
    

    Tutti gli utenti che appartengono a mygroup possono accedere al database MyMITestDB.

    Importante

    Quando si crea un utente USER da un'entità server (account di accesso) di Azure AD, specificare per user_name lo stesso valore di login_name indicato in LOGIN.

    Per altre informazioni, vedere CREATE USER.

  5. In una nuova finestra di query creare una tabella di test usando il comando T-SQL seguente:

    USE MyMITestDB
    GO
    CREATE TABLE TestTable
    (
    AccountNum varchar(10),
    City varchar(255),
    Name varchar(255),
    State varchar(2)
    );
    
  6. Creare una connessione in SQL Server Management Studio con l'utente che è stato creato. Si noterà che non è possibile visualizzare la tabella TestTable che è stato creato da sysadmin in precedenza. È necessario fornire all'utente le autorizzazioni per leggere i dati dal database.

  7. È possibile verificare l'autorizzazione corrente disponibile per l'utente eseguendo il comando seguente:

    SELECT * FROM sys.fn_my_permissions('MyMITestDB','DATABASE')
    GO
    

Aggiungere utenti a ruoli a livello di database

Per consentire all'utente di visualizzare i dati nel database, è possibile concedergli i ruoli a livello di database.

  1. Accedere all'istanza gestita con un account sysadmin usando SQL Server Management Studio.

  2. In Esplora oggetti fare clic con il pulsante destro del mouse sul server e scegliere Nuova query.

  3. Concedere all'utente di Azure AD il ruolo del database db_datareader usando la sintassi T-SQL seguente:

    Use <Database Name> -- provide your database name
    ALTER ROLE db_datareader ADD MEMBER user_name
    GO
    

    L'esempio seguente mostra come concedere all'utente bob@aadsqlmi.net e al gruppo mygroup le autorizzazioni di db_datareader per il database MyMITestDB:

    USE MyMITestDB
    GO
    ALTER ROLE db_datareader ADD MEMBER [bob@aadsqlmi.net]
    GO
    ALTER ROLE db_datareader ADD MEMBER [mygroup]
    GO
    
  4. Per verificare l'esistenza dell'utente di Azure AD creato nel database, eseguire questo comando:

    SELECT * FROM sys.database_principals
    GO
    
  5. Creare una nuova connessione all'istanza gestita con l'utente che è stato aggiunto al ruolo db_datareader.

  6. Espandere il database in Esplora oggetti per visualizzare la tabella.

    Screenshot da Esplora oggetti in S M S S che mostra la struttura di cartelle per tabelle in MyMITestDB. Dbo. La cartella TestTable è evidenziata.

  7. Aprire una nuova finestra di query ed eseguire l'istruzione SELECT seguente:

    SELECT *
    FROM TestTable
    

    I dati della tabella sono visibili? Dovrebbe essere possibile visualizzare le colonne restituite.

    Screenshot della scheda Risultati in Esplora oggetti di SSMS che mostra le intestazioni di colonna AccountNum, City, Name e State della tabella.

Rappresentare le entità di livello server (account di accesso) di Azure AD

L'istanza gestita di SQL supporta la rappresentazione di entità di livello server (account di accesso) di Azure AD.

Testare la rappresentazione

  1. Accedere all'istanza gestita con un account sysadmin usando SQL Server Management Studio.

  2. In Esplora oggetti fare clic con il pulsante destro del mouse sul server e scegliere Nuova query.

  3. Nella finestra di query usare il comando seguente per creare una nuova stored procedure:

    USE MyMITestDB
    GO  
    CREATE PROCEDURE dbo.usp_Demo  
    WITH EXECUTE AS 'bob@aadsqlmi.net'  
    AS  
    SELECT user_name();  
    GO
    
  4. Usare il comando seguente per verificare che l'utente rappresentato durante volta l'esecuzione della stored procedure sia bob@aadsqlmi.net.

    Exec dbo.usp_Demo
    
  5. Per testare la rappresentazione, usare l'istruzione EXECUTE AS LOGIN:

    EXECUTE AS LOGIN = 'bob@aadsqlmi.net'
    GO
    SELECT SUSER_SNAME()
    REVERT
    GO
    

Nota

Solo le entità di livello server SQL (account di accesso) che fanno parte del ruolo sysadmin possono eseguire le operazioni seguenti destinate a entità di sicurezza di Azure AD:

  • EXECUTE AS USER
  • EXECUTE AS LOGIN

Usare le query tra database

Le query tra database sono supportate per gli account Azure AD con entità server (account di accesso) di Azure AD. Per testare una query tra database con un gruppo di Azure AD, è necessario creare un altro database e un'altra tabella. È possibile non creare un altro database e un'altra tabella se esistono già.

  1. Accedere all'istanza gestita con un account sysadmin usando SQL Server Management Studio.

  2. In Esplora oggetti fare clic con il pulsante destro del mouse sul server e scegliere Nuova query.

  3. Nella finestra di query usare il comando seguente per creare un database denominato MyMITestDB2 e una tabella denominata TestTable2:

    CREATE DATABASE MyMITestDB2;
    GO
    USE MyMITestDB2
    GO
    CREATE TABLE TestTable2
    (
    EmpId varchar(10),
    FirstName varchar(255),
    LastName varchar(255),
    Status varchar(10)
    );
    
  4. In una nuova finestra di query eseguire il comando seguente per creare l'utente mygroup nel nuovo database MyMITestDB2 e concedere le autorizzazioni SELECT per tale database a mygroup:

    USE MyMITestDB2
    GO
    CREATE USER [mygroup] FROM LOGIN [mygroup]
    GO
    GRANT SELECT TO [mygroup]
    GO
    
  5. Accedere all'istanza gestita usando SQL Server Management Studio come membro del gruppo di Azure AD mygroup. Aprire una nuova finestra di query ed eseguire l'istruzione SELECT tra database:

    USE MyMITestDB
    SELECT * FROM MyMITestDB2..TestTable2
    GO
    

    Dovrebbero essere visualizzati i risultati della tabella di TestTable2.

Altri scenari supportati

  • Per le entità server (account di accesso) di Azure AD sono supportate la gestione dell'agente SQL e le esecuzioni di processi.
  • Le operazioni di backup e ripristino del database possono essere eseguite dalle entità server (account di accesso) di Azure AD.
  • Controllo di tutte le istruzioni relative agli eventi di autenticazione e alle entità server (account di accesso) di Azure AD.
  • Connessione amministrativa dedicata per le entità server (account di accesso) di Azure AD che fanno parte del ruolo del server sysadmin.
  • Le entità server (account di accesso) di Azure AD sono supportate con l'utilità sqlcmd e lo strumento SQL Server Management Studio.
  • Sono supportati i trigger di accesso per gli eventi di accesso provenienti dalle entità server (account di accesso) di Azure AD.
  • Usando le entità server (account di accesso) di Azure AD è possibile configurare Service Broker e la posta elettronica del database.

Passaggi successivi

Abilitare le funzionalità di sicurezza

Vedere l'articolo sulle funzionalità di sicurezza delle istanze gestite di SQL per un elenco completo di soluzioni per proteggere il database. Sono illustrate le funzionalità di sicurezza seguenti:

Funzionalità delle istanze gestite di SQL

Per una panoramica completa delle funzionalità delle istanze gestite di SQL, vedere: