Esercitazione: creare e usare account di accesso al server Microsoft Entra

Si applica a: Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics (solo pool SQL dedicati)

Questo articolo illustra come creare e usare account di accesso supportati da Microsoft Entra ID (precedentemente Azure Active Directory) all'interno del database virtuale master di Azure SQL.

In questa esercitazione apprenderai a:

  • Creare un account di accesso Microsoft Entra nel database virtuale master con la nuova estensione della sintassi per database SQL di Azure
  • Creare un utente mappato a un account di accesso Microsoft Entra nel database virtuale master
  • Concedere ruoli server a un utente Microsoft Entra
  • Disabilitare un account di accesso Microsoft Entra

Nota

Le entità server (account di accesso) di Microsoft Entra attualmente sono in anteprima pubblica per database SQL di Azure. Istanza gestita di SQL di Azure può già utilizzare gli account di accesso Microsoft Entra.

Prerequisiti

Creare un account di accesso a Microsoft Entra

  1. Creare un account di accesso database SQL di Azure per un account di Microsoft Entra. In questo esempio si userà bob@contoso.com che esiste nel dominio Microsoft Entra denominato contoso. È anche possibile creare un account di accesso da un gruppo Microsoft Entra o da un'entità servizio (applicazioni). Ad esempio, mygroup è un gruppo Microsoft Entra costituito da account Microsoft Entra che sono membri di tale gruppo. Per altre informazioni, vedere CREATE LOGIN (Transact-SQL).

    Nota

    Il primo account di accesso di Microsoft Entra deve essere creato dall'amministratore di Microsoft Entra. L'amministratore di Microsoft Entra può essere un utente o un gruppo Microsoft Entra. Un account di accesso SQL non può creare account di accesso Microsoft Entra.

  2. Usando SQL Server Management Studio (SSMS), accedere al database SQL con l'account amministratore di Microsoft Entra configurato per il server.

  3. Eseguire la query riportata di seguito:

    Use master
    CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
    GO
    
  4. Controllare l'account di accesso creato in sys.server_principals. Eseguire la query seguente:

    SELECT name, type_desc, type, is_disabled
    FROM sys.server_principals
    WHERE type_desc like 'external%'
    

    L'output visualizzato sarà simile al seguente:

    Name                            type_desc       type   is_disabled
    bob@contoso.com                 EXTERNAL_LOGIN  E      0
    
  5. L'account di accesso bob@contoso.com è stato creato nel database virtuale master.

Creare un utente da un account di accesso Microsoft Entra

  1. Ora che è stato creato un account di accesso di Microsoft Entra, è possibile creare un utente Microsoft Entra a livello di database mappato all'account di accesso di Microsoft Entra nel database virtuale master. Si continuerà a usare l'esempio bob@contoso.com per creare un utente nel database virtuale master, perché si vuole dimostrare l'aggiunta dell'utente a ruoli speciali. Solo un amministratore di Microsoft Entra o un amministratore di SQL Server può creare utenti nel database virtuale master.

  2. Viene usato il database virtuale master, ma è possibile passare a un database di propria scelta se si vogliono creare utenti in altri database. Eseguire la query seguente.

    Use master
    CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]
    

    Suggerimento

    Anche se non è necessario usare gli alias utente Microsoft Entra (ad esempio, bob@contoso.com), è consigliabile usare lo stesso alias per gli utenti di Microsoft Entra e gli account di accesso di Microsoft Entra.

  3. Controllare l'utente creato in sys.database_principals. Eseguire la query seguente:

    SELECT name, type_desc, type
    FROM sys.database_principals
    WHERE type_desc like 'external%'
    

    L'output visualizzato sarà simile al seguente:

    Name                            type_desc       type
    bob@contoso.com                 EXTERNAL_USER   E
    

Nota

La sintassi esistente per creare un utente Microsoft Entra senza un account di accesso di Microsoft Entra è ancora supportata. L'esecuzione della seguente sintassi crea un utente indipendente nel database all'interno del database specifico a cui si è connessi. Cosa più importante, questo utente non è associato ad alcun account di accesso, anche se esiste un account di accesso con lo stesso nome nel database virtuale master.

Ad esempio: CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER.

È possibile creare un account di accesso di Microsoft Entra usando un'entità servizio con un nome visualizzato non univoco. Per altre informazioni, vedere Account di accesso e utenti di Microsoft Entra con nomi visualizzati non univoci

Concedere i ruoli a livello di server agli account di accesso di Microsoft Entra

È possibile aggiungere account di accesso ai ruoli predefiniti a livello di server, come ad esempio il ruolo ##MS_DefinitionReader##, ##MS_ServerStateReader## o ##MS_ServerStateManager##.

Nota

I ruoli a livello di server indicati qui non sono supportati per i gruppi Microsoft Entra.

ALTER SERVER ROLE ##MS_DefinitionReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateManager## ADD MEMBER [AzureAD_object];

Le autorizzazioni non sono effettive fino a quando l'utente non si riconnette. Scaricare anche la cache DBCC:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Per verificare quali account di accesso Microsoft Entra fanno parte dei ruoli a livello di server, eseguire la seguente query:

SELECT roles.principal_id AS RolePID,roles.name AS RolePName,
       server_role_members.member_principal_id AS MemberPID, members.name AS MemberPName
       FROM sys.server_role_members AS server_role_members
       INNER JOIN sys.server_principals AS roles
       ON server_role_members.role_principal_id = roles.principal_id
       INNER JOIN sys.server_principals AS members
       ON server_role_members.member_principal_id = members.principal_id;

Concedere ruoli speciali per gli utenti Microsoft Entra

I ruoli speciali per il database SQL possono essere assegnati agli utenti nel database virtuale master.

Per concedere uno dei ruoli speciali del database a un utente, l'utente deve esistere nel database virtuale master.

Per aggiungere un utente a un ruolo, è possibile eseguire la seguente query:

ALTER ROLE [dbmanager] ADD MEMBER [AzureAD_object]

Per rimuovere un utente da un ruolo, eseguire la seguente query:

ALTER ROLE [dbmanager] DROP MEMBER [AzureAD_object]

AzureAD_object può essere un utente, un gruppo o un'entità servizio di Microsoft Entra in Microsoft Entra ID.

Nell'esempio, è stato creato l'utente bob@contoso.com. All'utente verranno assegnati i ruoli dbmanager e loginmanager.

  1. Eseguire la query riportata di seguito:

    ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com]
    ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]
    
  2. Controllare l'assegnazione di ruolo del database eseguendo la seguente query:

    SELECT DP1.name AS DatabaseRoleName,
      isnull (DP2.name, 'No members') AS DatabaseUserName
    FROM sys.database_role_members AS DRM
    RIGHT OUTER JOIN sys.database_principals AS DP1
      ON DRM.role_principal_id = DP1.principal_id
    LEFT OUTER JOIN sys.database_principals AS DP2
      ON DRM.member_principal_id = DP2.principal_id
    WHERE DP1.type = 'R'and DP2.name like 'bob%'
    

    L'output visualizzato sarà simile al seguente:

    DatabaseRoleName       DatabaseUserName
    dbmanager              bob@contoso.com
    loginmanager           bob@contoso.com
    

Facoltativo: disabilitare un account di accesso

La sintassi DDL ALTER LOGIN (Transact-SQL) può essere usata per abilitare o disabilitare un account di accesso di Microsoft Entra nel database SQL di Azure.

ALTER LOGIN [bob@contoso.com] DISABLE

Per rendere immediatamente effettive le modifiche DISABLE o ENABLE, è necessario cancellare la cache di autenticazione e la cache TokenAndPermUserStore usando i seguenti comandi T-SQL:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Verificare che l'account di accesso sia stato disabilitato eseguendo la seguente query:

SELECT name, type_desc, type
FROM sys.server_principals
WHERE is_disabled = 1

Un caso d'uso per questo consiste nel consentire la sola lettura nelle repliche geografiche, ma negare la connessione in un server primario.