Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
mastercon 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 - Usare la
WITH OBJECT_IDsintassi per i nomi visualizzati non univoci - 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. Azure SQL Managed Instance e SQL Server 2022 e versioni successive possono già utilizzare i login Microsoft Entra in generale disponibilità.
Prerequisiti
- Un database SQL o un'Istanza gestita di SQL con un database. Vedere Avvio rapido: creare un database singolo di database SQL di Azure se non è già stato creato un database SQL di Azure o Avvio rapido: creare un'Istanza gestita di SQL di Azure.
- Set di autenticazione Microsoft Entra per database SQL o Istanza gestita di SQL. Per altre informazioni, vedere Configurare e gestire l'autenticazione di Microsoft Entra con Azure SQL.
- Questo articolo illustra come creare un account di accesso e un utente di Microsoft Entra all'interno del database virtuale
master. Solo un amministratore di Microsoft Entra può creare un utente all'interno del database virtualemaster, quindi è consigliabile usare l'account amministratore di Microsoft Entra durante questa esercitazione. Un'entità di sicurezza Microsoft Entra con il ruolologinmanagerpuò creare un account di accesso, ma non un utente all'interno del database virtualemaster.
Nota
Per le organizzazioni che gestiscono nomi visualizzati non univoci in Microsoft Entra ID (in particolare per le entità servizio), assicurarsi di disporre delle informazioni sull'ID oggetto disponibili per tutte le entità servizio per cui si prevede di creare gli account di accesso. L'estensione WITH OBJECT_ID della sintassi consente di risolvere questi scenari.
Creare un account di accesso a Microsoft Entra
Creare un account di accesso database SQL di Azure per un account di Microsoft Entra. In questo esempio si userà
bob@contoso.comche esiste nel dominio Microsoft Entra denominatocontoso. È 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 login SQL non può creare logins di Microsoft Entra.
Suggerimento
Se si verificano problemi con i nomi visualizzati non univoci in Microsoft Entra ID, è possibile usare l'estensione della
WITH OBJECT_IDsintassi. Questa funzionalità è particolarmente utile per i principali di servizio con nomi visualizzati duplicati. Per esempio:CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'Per ulteriori informazioni, vedere Accessi e utenti Microsoft Entra con nomi visualizzati non univoci.
Usando SQL Server Management Studio (SSMS), accedere al database SQL con l'account amministratore di Microsoft Entra configurato per il server.
Espandi il database >database di sistema. Fare clic con il pulsante destro del mouse sul database di
mastere selezionare Nuova query per aprire una nuova finestra di query nel contesto del databasemaster.Eseguire la query riportata di seguito:
CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER GOControllare 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 0L'account di accesso
bob@contoso.comè stato creato nel database virtualemaster.
Creare un utente da un account di accesso Microsoft Entra
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'esempiobob@contoso.comper creare un utente nel database virtualemaster, 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 virtualemaster.Si sta ancora usando il database
mastervirtuale, ma è possibile riconnettersi a un database di propria scelta se si desidera creare utenti in altri database. Eseguire la query seguente.CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]Suggerimento
Anche se non è necessario usare gli alias utente di 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.Se è necessario creare un utente direttamente da un provider esterno con un ID oggetto specifico (ad esempio, per risolvere i problemi relativi al nome visualizzato non univoco), è anche possibile usare:
CREATE USER [user_name] FROM EXTERNAL PROVIDER WITH OBJECT_ID = 'objectid'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 sintassi seguente crea un utente contenuto nel database specifico a cui si è connessi. 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 , ad esempio ##MS_DefinitionReader##, ##MS_ServerStateReader##o ##MS_ServerStateManager## nel database master.
Nota
I ruoli a livello di server indicati qui non sono supportati per i gruppi di 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.
Eseguire la query riportata di seguito:
ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com] ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]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.