Esercizio - Controllare chi può accedere al database

Completato

Anche se si potrebbe essere in grado di connettersi al database in rete che non significa effettivamente poter accedere ai dati stessi. Seguendo un approccio a più livelli, si vuole assicurarsi che solo gli utenti che devono accedere ai dati possano accedervi effettivamente. A tale scopo, vengono usate l'autenticazione e l'autorizzazione.

Authentication

L'autenticazione è il processo di verifica di un'identità. Questa identità può essere un utente, un servizio in esecuzione in un sistema o un sistema stesso, ad esempio una macchina virtuale. Tramite il processo di autenticazione, assicurarsi che la persona o il sistema sia chi dichiara di essere. database SQL supporta due tipi di autenticazione: Autenticazione SQL e autenticazione di Microsoft Entra.

Autenticazione SQL

Il metodo di autenticazione SQL usa un nome utente e una password. Gli account utente possono essere creati nel database principale e possono essere concessi autorizzazioni in tutti i database nel server. È anche possibile creare utenti nel database stesso, denominati utenti indipendenti e concedere loro l'accesso solo a tale database. Quando è stato creato il server logico per il database, è stato specificato un accesso amministratore del server con un nome utente e una password. Usando queste credenziali, è possibile eseguire l'autenticazione a qualsiasi database in tale server come proprietario del database o dbo.

Autenticazione Microsoft Entra

Questo metodo di autenticazione usa le identità gestite dall'ID Microsoft Entra ed è supportato per i domini gestiti e integrati. Usare l'autenticazione di Microsoft Entra (sicurezza integrata), ove possibile. Con l'autenticazione di Microsoft Entra, è possibile gestire le identità degli utenti del database e di altri servizi Microsoft in una posizione centrale. La gestione centrale degli ID consente di gestire gli utenti del database da un unico punto e semplifica la gestione delle autorizzazioni. Se si desidera utilizzare l'autenticazione di Microsoft Entra, è necessario creare un altro amministratore del server denominato amministratore di Microsoft Entra, che è autorizzato ad amministrare utenti e gruppi di Microsoft Entra. Questo amministratore può eseguire anche tutte le operazioni eseguite da un normale amministratore del server.

Autorizzazione

Il termine "autorizzazione" indica le operazioni che possono essere eseguite da un'identità all'interno di un database SQL di Azure. Questa autorizzazione è controllata dalle autorizzazioni concesse direttamente all'account utente e alle appartenenze ai ruoli del database. Un ruolo del database viene usato per raggruppare le autorizzazioni insieme per semplificare l'amministrazione. Aggiungere un utente a un ruolo per concedere le autorizzazioni di cui dispone il ruolo. Queste autorizzazioni possono includere la possibilità di accedere al database, la possibilità di leggere una tabella e la possibilità di aggiungere e rimuovere colonne da un database. È consigliabile concedere agli utenti i privilegi minimi necessari. La procedura per concedere l'autorizzazione agli utenti di SQL e Microsoft Entra è la stessa.

Nell'esempio seguente, l'account amministratore del server a cui ci si connette è un membro del ruolo db_owner, che ha l'autorità di eseguire qualsiasi operazione all'interno del database.

Autenticazione e autorizzazione nella pratica

Come procedura consigliata, l'applicazione deve usare un account dedicato per l'autenticazione. In questo modo è possibile limitare le autorizzazioni concesse all'applicazione e ridurre i rischi di attività dannose nel caso in cui il codice dell'applicazione sia vulnerabile a un attacco SQL injection. È consigliabile creare un utente di database indipendente, che consente all'app di eseguire l'autenticazione direttamente nel database. Per altre informazioni, vedere Utenti di database indipendente: rendere portabile un database.

Usare l'autenticazione di Microsoft Entra per gestire centralmente le identità degli utenti del database e come alternativa all'autenticazione di SQL Server.

Esaminare come configurare un utente e concedere loro l'accesso a un database. In questo caso, si usa l'autenticazione SQL per l'utente, ma il processo sarà essenzialmente lo stesso se si usa l'autenticazione Di Microsoft Entra.

Creare un utente del database

Creare un nuovo utente a cui è possibile usare per concedere l'accesso.

  1. In Cloud Shell, nella macchina virtuale appServer, eseguire nuovamente la connessione al database come ADMINUSER.

    sqlcmd -S tcp:serverNNNNN.database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    
  2. Eseguire il comando seguente per creare un nuovo utente. Questo utente è un utente indipendente che ha consentito solo l'accesso al database del Marketplace . È possibile modificare la password in base alle esigenze, ma assicurarsi e annotarla perché è necessaria per un passaggio futuro.

    CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1';
    GO
    

Con queste credenziali, l'utente è in grado di eseguire l'autenticazione nel database, ma non è autorizzato ad accedere ai dati. Concedere all'utente l'accesso.

Concedere autorizzazioni a un utente

Rendere l'utente membro dei db_datareader ruoli e db_datawriter , concedendo rispettivamente l'accesso alla lettura e alla scrittura nel database. Si vuole anche impedire a questo utente di accedere a una tabella con indirizzi.

  1. Mentre è ancora connesso a sqlcmd in appServer, eseguire il T-SQL seguente per concedere i db_datareader ruoli e db_datawriter all'utente creato.

    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    GO
    
  2. È possibile restringere ulteriormente l'ambito di accesso. È possibile negare l'accesso di un utente ad altri elementi all'interno del database usando l'operatore DENY. Eseguire il codice T-SQL seguente per negare all'utente ApplicationUser la possibilità di selezionare dati dalla tabella SalesLT.Address.

    DENY SELECT ON SalesLT.Address TO ApplicationUser;
    GO
    

A questo punto accedere come tale utente e osservare questa configurazione in azione.

  1. Dal prompt T-SQL immettere exit per uscire dalla sessione.

  2. Accedere ora al database, ma come utente creato.

    sqlcmd -S tcp:serverNNNNN.database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
    
  3. Eseguire la query seguente. Questa query esegue il pull dei dati da una tabella a cui l'utente è autorizzato ad accedere.

    SELECT FirstName, LastName, EmailAddress, Phone FROM SalesLT.Customer;
    GO
    

    Viene visualizzato un elenco dei clienti.

    FirstName      LastName       EmailAddress                    Phone
    -------------- -------------- ------------------------------- ------------
    Orlando        Gee            orlando0@adventure-works.com    245-555-0173
    Keith          Harris         keith0@adventure-works.com      170-555-0127
    Donna          Carreras       donna0@adventure-works.com      279-555-0130
    Janet          Gates          janet1@adventure-works.com      710-555-0173
    ...
    
  4. Vedere cosa accade quando si tenta di eseguire una query su una tabella a cui non si ha accesso.

    SELECT * FROM SalesLT.Address;
    GO
    

    Viene visualizzato un messaggio che comunica che non si ha accesso alla tabella.

    Msg 229, Level 14, State 5, Server server-22942, Line 1
    The SELECT permission was denied on the object 'Address', database 'marketplace', schema 'SalesLT'.
    

Come si può vedere qui, anche se è stato concesso l'accesso in lettura/scrittura al database, è possibile proteggere ulteriormente l'accesso ai dati negando esplicitamente l'accesso alle tabelle. Se sono presenti più utenti che condividono un accesso simile, è possibile creare ruoli personalizzati con le autorizzazioni appropriate e semplificare l'amministrazione.

È importante proteggere correttamente il database e concedere l'accesso solo quando necessario. Il database SQL di Azure offre il controllo completo dell'autenticazione e dell'autorizzazione delle identità per l'accesso ai dati del database.