Configurare e gestire l'autenticazione di Azure AD con Azure SQL

Si applica a: Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics

Questo articolo illustra come creare e popolare un'istanza di Azure Active Directory (Azure AD) e quindi usare Azure AD con database di Azure SQL, Istanza gestita di SQL di Azure e Azure Synapse Analytics. Per una panoramica, vedere Autenticazione di Azure Active Directory.

Metodi di autenticazione di Azure AD

L'autenticazione di Azure AD supporta i metodi di autenticazione seguenti:

  • Identità Azure AD solo cloud
  • Identità ibride di Azure AD che supportano:
    • Autenticazione cloud con due opzioni abbinate all'accesso Single Sign-On facile (SSO)
      • Autenticazione dell'hash delle password di Azure AD
      • Autenticazione pass-through di Azure AD
    • Autenticazione federata

Per altre informazioni sui metodi di autenticazione di Azure AD e su quale scegliere, vedere Scegliere il metodo di autenticazione appropriato per la soluzione di gestione delle identità ibrida di Azure Active Directory.

Per altre informazioni sulle identità ibride, la configurazione e la sincronizzazione di Azure AD, vedere:

Creare e popolare un'istanza di Azure AD

Creare un'istanza di Azure AD e popolarla con utenti e gruppi. Azure AD può essere il dominio gestito di Azure AD iniziale. Azure AD può anche essere un set di servizi di dominio Active Directory locali federato con Azure AD.

Per altre informazioni, vedere:

Associare o aggiungere una sottoscrizione di Azure ad Azure Active Directory

  1. Associare la sottoscrizione di Azure ad Azure Active Directory impostando la directory come directory attendibile per la sottoscrizione di Azure che ospita il database. Per informazioni dettagliate, vedere Associare o aggiungere una sottoscrizione di Azure al tenant di Azure Active Directory.

  2. Usare il controllo per cambiare directory nel portale di Azure per passare alla sottoscrizione associata al dominio.

    Importante

    Ogni sottoscrizione di Azure ha una relazione di trust con un'istanza di Azure AD. Ciò significa che considera attendibile quella directory per l'autenticazione di utenti, servizi e dispositivi. Più sottoscrizioni possono considerare attendibile la stessa directory, ma una sottoscrizione considera attendibile una sola directory. Questa relazione di trust tra la sottoscrizione e la directory è diversa dalla relazione tra la sottoscrizione e tutte le altre risorse in Azure, ad esempio siti Web, database e così via, le quali sono da considerarsi più come risorse figlio di una sottoscrizione. Se la sottoscrizione scade, non sarà più possibile accedere a tutte queste altre risorse associate alla sottoscrizione anche se la directory rimane in Azure, quindi sarà possibile associarvi un'altra sottoscrizione e continuare a gestire gli utenti della directory. Per altre informazioni sulle risorse, vedere Informazioni sull'accesso alle risorse di Azure. Per altre informazioni su questa relazione attendibile, vedere Associare o aggiungere una sottoscrizione di Azure ad Azure Active Directory.

Amministratore di Azure AD con un server in database SQL

Ogni server in Azure (che ospita database SQL o Azure Synapse) inizia con un singolo account amministratore del server che è l'amministratore dell'intero server. Creare un secondo account amministratore come account Azure AD. Questa entità viene creata come utente di database indipendente nel database master del server. Gli account amministratore sono membri del ruolo db_owner in ogni database utente e immettono ogni database utente come utente dbo . Per altre informazioni sugli account amministratore, vedere Gestione di database e account di accesso.

Quando si usa Azure Active Directory con la replica geografica, l'amministratore di Azure Active Directory deve essere configurato sia per i server primari che per quelli secondari. Se un server non dispone di un amministratore di Azure Active Directory, gli account di accesso e gli utenti di Azure Active Directory ricevono un Cannot connect errore per il server.

Nota

Gli utenti che non si basano su un account Azure AD (incluso l'account amministratore del server) non possono creare utenti basati su Azure AD, perché non hanno l'autorizzazione per convalidare gli utenti di database proposti con Azure AD.

Effettuare il provisioning dell'amministratore di Azure AD (Istanza gestita di SQL)

Importante

Seguire questa procedura solo se si esegue il provisioning di un Istanza gestita di SQL di Azure. Questa operazione può essere eseguita solo dall'amministratore globale o da un amministratore del ruolo con privilegi in Azure AD.

È possibile assegnare il ruolo Lettori directory a un gruppo in Azure AD. I proprietari del gruppo possono quindi aggiungere l'identità dell'istanza gestita come membro di questo gruppo, che consente di effettuare il provisioning di un amministratore di Azure AD per il Istanza gestita di SQL. Per altre informazioni su questa funzionalità, vedere Ruolo con autorizzazioni di lettura nella directory in Azure Active Directory per Azure SQL.

Il Istanza gestita di SQL necessita delle autorizzazioni per leggere Azure AD per eseguire correttamente attività come l'autenticazione degli utenti tramite l'appartenenza al gruppo di sicurezza o la creazione di nuovi utenti. A tale scopo, è necessario concedere all'Istanza gestita di SQL l'autorizzazione per leggere Azure AD. A tale scopo, è possibile usare il portale di Azure o PowerShell.

Portale di Azure

Per concedere all'Istanza gestita di SQL l'autorizzazione di lettura di Azure AD usando il portale di Azure, accedere come amministratore globale in Azure AD e seguire questa procedura:

  1. Nell'portale di Azure selezionare l'account nell'angolo in alto a destra e quindi scegliere Cambia directory per confermare quale Active Directory è attualmente la directory attiva. Cambiare directory, se necessario.

    Screenshot del portale di Azure che mostra dove cambiare directory

  2. Scegliere la directory corretta come directory predefinita di Azure AD.

    Questo passaggio collega la sottoscrizione associata ad Active Directory al Istanza gestita di SQL, assicurandosi che la stessa sottoscrizione venga usata sia per l'istanza di Azure AD che per il Istanza gestita di SQL.

  3. Passare alla Istanza gestita di SQL che si vuole usare per l'integrazione di Azure AD.

    Screenshot del portale di Azure che mostra la pagina di amministrazione di Active Directory aperta per l'istanza gestita di SQL selezionata.

  4. Selezionare il banner nella parte superiore della pagina di amministrazione di Active Directory e concedere l'autorizzazione all'utente corrente.

    Screenshot della finestra di dialogo per la concessione delle autorizzazioni a un'istanza gestita di SQL per l'accesso ad Active Directory. Il pulsante Concedi autorizzazioni è selezionato.

  5. Al termine dell'operazione, nell'angolo superiore destro verrà visualizzata la notifica seguente:

    Screenshot di una notifica che conferma che le autorizzazioni di lettura di Active Directory sono state aggiornate correttamente per l'istanza gestita.

  6. È ora possibile scegliere l'amministratore di Azure AD per il Istanza gestita di SQL. Nella pagina Amministratore di Active Directory selezionare il comando Imposta amministratore.

    Screenshot che mostra il comando Imposta amministratore evidenziato nella pagina amministratore di Active Directory per l'istanza gestita di SQL selezionata.

  7. Nella pagina Di amministrazione di Azure AD cercare un utente, selezionare l'utente o il gruppo come amministratore e quindi selezionare Seleziona.

    La pagina Amministratore di Active Directory mostra tutti i membri e i gruppi di Active Directory. Gli utenti e i gruppi non disponibili (in grigio) non possono essere selezionati, perché non sono supportati come amministratori di Azure AD. Vedere l'elenco degli amministratori supportati in Funzionalità e limitazioni di Azure AD. Il controllo degli accessi in base al ruolo di Azure si applica solo al portale di Azure e non viene propagato a database SQL, Istanza gestita di SQL o Azure Synapse.

    Aggiungere l'amministratore di Azure Active Directory

  8. Nella parte superiore della pagina Amministratore di Active Directory selezionare Salva.

    Screenshot della pagina amministratore di Active Directory con il pulsante Salva nella riga superiore accanto ai pulsanti Imposta amministratore e Rimuovi amministratore.

    Il processo di modifica dell'amministratore può richiedere alcuni minuti. Al termine del processo, nella casella Amministratore di Active Directory verrà visualizzato il nome del nuovo amministratore.

    Per gli utenti e i gruppi di Azure AD, l'ID oggetto viene visualizzato accanto al nome amministratore. Per le applicazioni (entità servizio), viene visualizzato l'ID applicazione .

Dopo aver effettuato il provisioning di un amministratore di Azure AD per il Istanza gestita di SQL, è possibile iniziare a creare entità server (account di accesso) di Azure AD con la sintassi CREATE LOGIN. Per altre informazioni, vedere panoramica di Istanza gestita di SQL.

Suggerimento

Per rimuovere un amministratore in un secondo momento, nella parte superiore della pagina Amministratore di Active Directory scegliere Rimuovi amministratore e quindi Salva.

PowerShell

Per concedere all'Istanza gestita di SQL l'autorizzazione di lettura di Azure AD usando PowerShell, eseguire questo script:

# Gives Azure Active Directory read permission to a Service Principal representing the SQL Managed Instance.
# Can be executed only by a "Global Administrator" or "Privileged Role Administrator" type of user.

$aadTenant = "<YourTenantId>" # Enter your tenant ID
$managedInstanceName = "MyManagedInstance"

# Get Azure AD role "Directory Users" and create if it doesn't exist
$roleName = "Directory Readers"
$role = Get-AzureADDirectoryRole | Where-Object {$_.displayName -eq $roleName}
if ($role -eq $null) {
    # Instantiate an instance of the role template
    $roleTemplate = Get-AzureADDirectoryRoleTemplate | Where-Object {$_.displayName -eq $roleName}
    Enable-AzureADDirectoryRole -RoleTemplateId $roleTemplate.ObjectId
    $role = Get-AzureADDirectoryRole | Where-Object {$_.displayName -eq $roleName}
}

# Get service principal for your SQL Managed Instance
$roleMember = Get-AzureADServicePrincipal -SearchString $managedInstanceName
$roleMember.Count
if ($roleMember -eq $null) {
    Write-Output "Error: No Service Principals with name '$    ($managedInstanceName)', make sure that managedInstanceName parameter was     entered correctly."
    exit
}
if (-not ($roleMember.Count -eq 1)) {
    Write-Output "Error: More than one service principal with name pattern '$    ($managedInstanceName)'"
    Write-Output "Dumping selected service principals...."
    $roleMember
    exit
}

# Check if service principal is already member of readers role
$allDirReaders = Get-AzureADDirectoryRoleMember -ObjectId $role.ObjectId
$selDirReader = $allDirReaders | where{$_.ObjectId -match     $roleMember.ObjectId}

if ($selDirReader -eq $null) {
    # Add principal to readers role
    Write-Output "Adding service principal '$($managedInstanceName)' to     'Directory Readers' role'..."
    Add-AzureADDirectoryRoleMember -ObjectId $role.ObjectId -RefObjectId     $roleMember.ObjectId
    Write-Output "'$($managedInstanceName)' service principal added to     'Directory Readers' role'..."

    #Write-Output "Dumping service principal '$($managedInstanceName)':"
    #$allDirReaders = Get-AzureADDirectoryRoleMember -ObjectId $role.ObjectId
    #$allDirReaders | where{$_.ObjectId -match $roleMember.ObjectId}
}
else {
    Write-Output "Service principal '$($managedInstanceName)' is already     member of 'Directory Readers' role'."
}

PowerShell per Istanza gestita di SQL

Per eseguire i cmdlet di PowerShell, è necessario che Azure PowerShell sia installato e in esecuzione. Per informazioni dettagliate, vedere Come installare e configurare Azure PowerShell.

Importante

Il modulo powerShell Azure Resource Manager (RM) è ancora supportato da Istanza gestita di SQL di Azure, ma tutto lo sviluppo futuro è per il modulo Az.Sql. Il modulo AzureRM continuerà a ricevere correzioni di bug almeno fino a dicembre 2020. Gli argomenti per i comandi nei moduli Az e AzureRm sono sostanzialmente identici. Per altre informazioni sulla compatibilità, vedere Introduzione del nuovo modulo Az di Azure PowerShell.

Per eseguire il provisioning di un amministratore di Azure AD, eseguire i comandi di Azure PowerShell seguenti:

  • Connect-AzAccount
  • Select-AzSubscription

I cmdlet usati per effettuare il provisioning e gestire l'amministratore di Azure AD per la Istanza gestita di SQL sono elencati nella tabella seguente:

Nome del cmdlet Descrizione
Set-AzSqlInstanceActiveDirectoryAdministrator Effettua il provisioning di un amministratore di Azure AD per il Istanza gestita di SQL nella sottoscrizione corrente. (Deve essere dalla sottoscrizione corrente)
Remove-AzSqlInstanceActiveDirectoryAdministrator Rimuove un amministratore di Azure AD per il Istanza gestita di SQL nella sottoscrizione corrente.
Get-AzSqlInstanceActiveDirectoryAdministrator Restituisce informazioni su un amministratore di Azure AD per il Istanza gestita di SQL nella sottoscrizione corrente.

Il comando seguente ottiene informazioni su un amministratore di Azure AD per un Istanza gestita di SQL denominato ManagedInstance01 associato a un gruppo di risorse denominato ResourceGroup01.

Get-AzSqlInstanceActiveDirectoryAdministrator -ResourceGroupName "ResourceGroup01" -InstanceName "ManagedInstance01"

Il comando seguente esegue il provisioning di un gruppo di amministratore di Azure AD denominato DBAs per il Istanza gestita di SQL denominato ManagedInstance01. Questo server è associato al gruppo di risorse ResourceGroup01.

Set-AzSqlInstanceActiveDirectoryAdministrator -ResourceGroupName "ResourceGroup01" -InstanceName "ManagedInstance01" -DisplayName "DBAs" -ObjectId "40b79501-b343-44ed-9ce7-da4c8cc7353b"

Il comando seguente rimuove l'amministratore di Azure AD per la Istanza gestita di SQL denominata ManagedInstanceName01 associata al gruppo di risorse ResourceGroup01.

Remove-AzSqlInstanceActiveDirectoryAdministrator -ResourceGroupName "ResourceGroup01" -InstanceName "ManagedInstanceName01" -Confirm -PassThru

Effettuare il provisioning dell'amministratore di Azure AD (database SQL)

Importante

Seguire questa procedura solo se si esegue il provisioning di un server per database SQL o Azure Synapse.

Le due procedure seguenti illustrano come effettuare il provisioning di un amministratore di Azure Active Directory per il server nel portale di Azure e usando PowerShell.

Portale di Azure

  1. Nell'angolo in alto a destra del portale di Azure scegliere la connessione per visualizzare un elenco a discesa delle possibili directory di Active Directory. Scegliere la directory corretta come directory predefinita di Azure AD. Questo passaggio collega la sottoscrizione associata a Active Directory con il server, assicurandosi che la stessa sottoscrizione venga usata sia per Azure AD che per il server.

  2. Cercare e selezionare SQL Server.

    Cercare e selezionare server SQL

    Nota

    In questa pagina, prima di selezionare SQL Server è possibile selezionare la stella accanto al nome per aggiungere ai preferiti la categoria e aggiungere SQL Serveralla barra di navigazione sinistra.

  3. Nella pagina SQL Server selezionare Amministratore di Active Directory.

  4. Nella pagina Amministratore di Active Directory selezionare Imposta amministratore.

    I server SQL impostano l'amministratore di Active Directory

  5. Nella pagina Aggiungi amministratore cercare un utente, selezionare l'utente o il gruppo da amministratore e quindi selezionare Seleziona. La pagina Amministratore di Active Directory mostra tutti i membri e i gruppi di Active Directory. Gli utenti e i gruppi non disponibili (in grigio) non possono essere selezionati, perché non sono supportati come amministratori di Azure AD. Vedere l'elenco degli amministratori supportati nella sezione Funzionalità e limitazioni di Azure AD di Usare l'autenticazione di Azure Active Directory per l'autenticazione con database SQL o Azure Synapse. Il controllo degli accessi in base al ruolo di Azure si applica solo al portale e non viene propagato a SQL Server.

    Selezionare Amministratore di Azure Active Directory

  6. Nella parte superiore della pagina Amministratore di Active Directory selezionare Salva.

    salvare l'amministratore

    Per gli utenti e i gruppi di Azure AD, l'ID oggetto viene visualizzato accanto al nome amministratore. Per le applicazioni (entità servizio), viene visualizzato l'ID applicazione .

Il processo di modifica dell'amministratore può richiedere alcuni minuti. Il nuovo amministratore è quindi visualizzato nella casella Amministratore di Active Directory .

Nota

Quando si configura l'amministratore di Azure AD, il nuovo nome amministratore (utente o gruppo) non può essere già presente nel database master virtuale come utente di autenticazione server. Se presente, l’impostazione dell’amministratore di Microsoft Azure avrà esito negativo; eseguire il rollback della creazione e indicare che tale (nome) di amministratore già esiste. Poiché tale utente di autenticazione del server non fa parte di Azure AD, non è possibile connettersi al server usando l'autenticazione di Azure AD.

Per rimuovere un amministratore in un secondo momento, nella parte superiore della pagina Amministratore di Active Directory scegliere Rimuovi amministratore e quindi Salva.

PowerShell per database SQL e Azure Synapse

Per eseguire i cmdlet di PowerShell, è necessario che Azure PowerShell sia installato e in esecuzione. Per informazioni dettagliate, vedere Come installare e configurare Azure PowerShell. Per eseguire il provisioning di un amministratore di Azure AD, eseguire i comandi di Azure PowerShell seguenti:

  • Connect-AzAccount
  • Select-AzSubscription

Cmdlet usati per effettuare il provisioning e gestire l'amministratore di Azure AD per database SQL e Azure Synapse:

Nome del cmdlet Descrizione
Set-AzSqlServerActiveDirectoryAdministrator Effettua il provisioning di un amministratore di Azure Active Directory per il server che ospita database SQL o Azure Synapse. (Deve essere dalla sottoscrizione corrente)
Remove-AzSqlServerActiveDirectoryAdministrator Rimuove un amministratore di Azure Active Directory per il server che ospita database SQL o Azure Synapse.
Get-AzSqlServerActiveDirectoryAdministrator Restituisce informazioni su un amministratore di Azure Active Directory attualmente configurato per il server che ospita database SQL o Azure Synapse.

Usare il comando get-help di PowerShell per visualizzare altre informazioni per ognuno di questi comandi. Ad esempio, get-help Set-AzSqlServerActiveDirectoryAdministrator.

Lo script seguente esegue il provisioning di un gruppo di amministratore di Azure AD denominato DBA_Group (ID 40b79501-b343-44ed-9ce7-da4c8cc7353foggetto ) per il server di demo_server in un gruppo di risorse denominato Group-23:

Set-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server" -DisplayName "DBA_Group"

Il parametro di input DisplayName accetta il nome visualizzato di Azure AD o il nome dell'entità utente. Ad esempio, DisplayName="John Smith" e DisplayName="johns@contoso.com". Per i gruppi di Azure AD è supportato solo il nome visualizzato di Azure AD.

Nota

Il comando Set-AzSqlServerActiveDirectoryAdministrator Azure PowerShell non impedisce di effettuare il provisioning degli amministratori di Azure AD per utenti non supportati. È possibile eseguire il provisioning di un utente non supportato il quale non può tuttavia connettersi a un database.

L'esempio seguente usa il valore ObjectIDopzionale:

Set-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server" `
    -DisplayName "DBA_Group" -ObjectId "40b79501-b343-44ed-9ce7-da4c8cc7353f"

Nota

Il valore ObjectID di Azure AD è obbligatorio quando DisplayName non è univoco. Per recuperare i valori ObjectID e DisplayName, usare la sezione Active Directory del portale di Azure classico e visualizzare le proprietà di un utente o di un gruppo.

Nell'esempio seguente vengono restituite informazioni sull'amministratore di Azure AD corrente per il server:

Get-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server" | Format-List

L'esempio seguente illustra come rimuovere un amministratore di Azure AD:

Remove-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server"

Nota

È anche possibile effettuare il provisioning di un amministratore di Azure Active Directory usando le API REST. Per altre informazioni, vedere Service Management REST API Reference and Operations for Azure SQL Database (Informazioni di riferimento e operative sull'API REST di gestione dei servizi per le operazioni del database SQL di Azure)

Configurare i computer client

Nota

System.Data.SqlClient usa Azure Active Directory Authentication Library (ADAL), che verrà deprecato. Se si usa lo spazio dei nomi System.Data.SqlClient per l'autenticazione di Azure Active Directory, eseguire la migrazione delle applicazioni a Microsoft. Data.SqlClient e la libreria di autenticazione Microsoft (MSAL). Per altre informazioni sull'uso dell'autenticazione di Azure AD con SqlClient, vedere Uso dell'autenticazione di Azure Active Directory con SqlClient.

SSMS e SSDT usano ancora Azure Active Directory Authentication Library (ADAL). Per continuare a usare ADAL.DLL nelle applicazioni, è possibile usare i collegamenti in questa sezione per installare il driver SSMS, ODBC e OLE DB più recente che contiene la libreria di ADAL.DLL più recente.

In tutti i computer client, da cui le applicazioni o gli utenti si connettono a database SQL o Azure Synapse usando le identità di Azure AD, è necessario installare il software seguente:

È possibile soddisfare questi requisiti tramite:

Creare utenti indipendenti mappati a identità di Azure AD

Poiché Istanza gestita di SQL supporta le entità server di Azure AD (account di accesso), l'uso di utenti di database indipendenti non è obbligatorio. Le entità di sicurezza del server Azure AD (accessi) consentono di creare gli accessi dagli utenti, dai gruppi o dalle applicazioni di Azure AD. Ciò significa che è possibile eseguire l'autenticazione con il Istanza gestita di SQL usando l'account di accesso del server Azure AD anziché un utente del database indipendente. Per altre informazioni, vedere panoramica Istanza gestita di SQL. Per la sintassi sulla creazione di entità server (account di accesso) di Azure AD, vedere CREATE LOGIN.

Tuttavia, l'uso dell'autenticazione di Azure Active Directory con database SQL e Azure Synapse richiede l'uso di utenti di database indipendenti in base a un'identità di Azure AD. Un utente del database indipendente non dispone di un account di accesso nel database master e esegue il mapping a un'identità in Azure AD associata al database. L'identità di Azure AD può essere un singolo account utente o un gruppo. Per altre informazioni sugli utenti di database indipendente, vedere Utenti di database indipendente: rendere portabile un database.

Nota

Gli utenti del database, tranne gli amministratori, non possono essere creati tramite il portale di Azure. I ruoli di Azure non vengono propagati al database in database SQL, Istanza gestita di SQL o Azure Synapse. I ruoli di Azure vengono usati per la gestione delle risorse di Azure e non si applicano alle autorizzazioni del database. Ad esempio, il ruolo collaboratore SQL Server non concede l'accesso per connettersi al database in database SQL, il Istanza gestita di SQL o Azure Synapse. L'autorizzazione di accesso deve essere concessa direttamente nel database tramite istruzioni Transact-SQL.

Avviso

I caratteri speciali come i due punti : o gli amperandi & quando sono inclusi come nomi utente nelle istruzioni T-SQL CREATE LOGIN e CREATE USER non sono supportati.

Importante

Gli utenti e le entità servizio di Azure AD (applicazioni di Azure AD) che sono membri di oltre 2048 gruppi di sicurezza di Azure AD non sono supportati per l'accesso al database nel database SQL, in Istanza gestita o in Azure Synapse.

Per creare un utente di database indipendente basato su Azure AD, diverso dall'amministratore del server proprietario del database, connettersi al database con un'identità di Azure AD come utente con almeno l'autorizzazione ALTER ANY USER . Usare quindi la sintassi Transact-SQL seguente:

CREATE USER [<Azure_AD_principal_name>] FROM EXTERNAL PROVIDER;

Azure_AD_principal_name può essere il nome dell'entità utente di un utente di Azure AD o il nome visualizzato di un gruppo di Azure AD.

Esempi: per creare un utente di database indipendente che rappresenta un utente di dominio gestito o federato di Azure AD:

CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER;
CREATE USER [alice@fabrikam.onmicrosoft.com] FROM EXTERNAL PROVIDER;

Per creare un utente di database indipendente che rappresenta un gruppo di dominio federato o di Azure AD, specificare il nome visualizzato di un gruppo di sicurezza:

CREATE USER [ICU Nurses] FROM EXTERNAL PROVIDER;

Per creare un utente di database indipendente che rappresenta un'applicazione che si connette usando un token di Azure AD:

CREATE USER [appName] FROM EXTERNAL PROVIDER;

Nota

Questo comando richiede che sql access Azure AD (il "provider esterno") per conto dell'utente connesso. A volte, le circostanze si verificheranno che causano la restituzione di un'eccezione ad Azure AD a SQL. In questi casi, l'utente visualizzerà l'errore SQL 33134, che deve contenere il messaggio di errore specifico di Azure AD. La maggior parte del tempo, l'errore indica che l'accesso viene negato o che l'utente deve registrare in MFA per accedere alla risorsa o che l'accesso tra applicazioni di prima parte deve essere gestito tramite l'autenticazione preliminare. Nei primi due casi, il problema viene in genere causato dai criteri di accesso condizionale impostati nel tenant di Azure AD dell'utente: impediscono all'utente di accedere al provider esterno. L'aggiornamento dei criteri di accesso condizionale per consentire l'accesso all'applicazione '0000003-0000-0000-c00000000000' (ID applicazione del Microsoft API Graph) deve risolvere il problema. Nel caso in cui l'errore indica che l'accesso tra le applicazioni di prima parte deve essere gestito tramite l'autenticazione preliminare, il problema è dovuto al fatto che l'utente è connesso come entità servizio. Il comando deve avere esito positivo se viene eseguito da un utente.

Suggerimento

È possibile creare un utente direttamente da Azure Active Directory solo se si usa l'Azure Active Directory associata alla sottoscrizione di Azure. Tuttavia, i membri di altre directory di Active Directory che sono utenti importati nell'Active Directory associata (chiamati utenti esterni) possono essere aggiunti a un gruppo Active Directory nell'Active Directory tenant. Tramite la creazione di un utente del database indipendente per il gruppo AD, gli utenti dell'Active Directory esterna possono ottenere l'accesso al database SQL.

Per altre informazioni sulla creazione di utenti di database indipendente basati su identità di Azure Active Directory, vedere CREATE USER (Transact-SQL).

Nota

La rimozione dell'amministratore di Azure Active Directory per il server impedisce a qualsiasi utente di autenticazione di Azure AD di connettersi al server. Se necessario, un amministratore del database SQL può eliminare manualmente gli utenti di Azure AD inutilizzabili.

Nota

Se si riceve un messaggio di timeout della connessione scaduto, potrebbe essere necessario impostare il parametro TransparentNetworkIPResolution della stringa di connessione su false. Per altre informazioni, vedere Connection timeout issue with .NET Framework 4.6.1 - TransparentNetworkIPResolution (Problema di timeout della connessione con .NET Framework 4.6.1 - TransparentNetworkIPResolution).

Quando si crea un database utente, questo riceve l'autorizzazione CONNECT e può connettersi al database come membro del ruolo PUBLIC. Inizialmente le sole autorizzazioni disponibili per l'utente sono quelle concesse al ruolo PUBLIC o quelle concesse a qualsiasi gruppo di Azure AD di cui è membro. Dopo avere effettuato il provisioning di un utente di database indipendente basato su Azure AD, è possibile concedere all'utente altre autorizzazioni, esattamente come si concede un'autorizzazione a qualsiasi altro tipo di utente. In genere si concedono autorizzazioni ai ruoli del database e si aggiungono gli utenti ai ruoli. Per altre informazioni, vedere l'articolo relativo alle nozioni di base delle autorizzazioni per il motore di database. Per altre informazioni sui ruoli speciali del database SQL, vedere Gestione di database e account di accesso nel database SQL di Azure. Un account utente di dominio federato importato in un dominio gestito come utente esterno deve usare l'identità del dominio gestito.

Nota

Gli utenti di Azure AD sono contrassegnati nei metadati del database con il tipo E (EXTERNAL_USER). I gruppi sono contrassegnati con il tipo X (EXTERNAL_GROUPS). Per altre informazioni, vedere sys.database_principals.

Connettersi al database usando SSMS o SSDT

Per verificare che l'amministratore di Azure AD sia configurato correttamente, connettersi al database usando l'account master amministratore di Azure AD. Per effettuare il provisioning di un utente di database indipendente basato su Azure AD, diverso dall'amministratore del server proprietario del database, connettersi al database con un'identità di Azure AD che abbia accesso al database.

Importante

Il supporto per l'autenticazione di Azure Active Directory è disponibile con SQL Server Management Studio (SSMS) a partire dal 2016 e SQL Server Data Tools a partire dal 2015. La versione di agosto 2016 di SQL Server Management Studio include anche il supporto per l'autenticazione universale di Active Directory, che consente agli amministratori di richiedere la Multi-Factor Authentication mediante chiamata telefonica, SMS, smart card con pin, o notifica dell'app per dispositivi mobili.

Uso di un'identità di Azure AD per la connessione con SSMS o SSDT

Le procedure seguenti illustrano come connettersi a database SQL con un'identità di Azure AD usando SQL Server Management Studio o SQL Server Strumenti di database.

Autenticazione integrata di Active Directory

Usare questo metodo se si è connessi a Windows usando le credenziali di Azure Active Directory da un dominio federato o un dominio gestito configurato per l'accesso Single Sign-On semplice per l'autenticazione hash pass-through e password. Per altre informazioni, vedere Accesso Single Sign-On facile di Azure Active Directory.

  1. Avviare Management Studio o Strumenti di dati e nella finestra di dialogo Connetti al server (o Connettersi al motore di database) selezionare Azure Active Directory - Integrato. La password non è necessaria e non può essere immessa, perché per la connessione vengono presentate le credenziali esistenti.

    Selezionare Autenticazione integrata di ACTIVE Active Directory

  2. Scegliere il pulsante Opzioni, quindi nella pagina Proprietà connessione digitare il nome del database utente a cui si desidera connettersi nella casella Connect to database (Connetti al database). Per altre informazioni, vedere l'articolo Autenticazione di Azure AD a più fattori sulle differenze tra le proprietà di connessione per SSMS 17.x e 18.x.

    Selezionare il nome del database

Autenticazione della password di Active Directory

Usare questo metodo per connettersi con il nome dell'entità di Azure AD tramite il dominio gestito di Azure AD. È anche possibile usarlo per gli account federati senza accesso al dominio, ad esempio quando si lavora in remoto.

Usare questo metodo per eseguire l'autenticazione al database in database SQL o nel Istanza gestita di SQL con gli utenti di identità solo cloud di Azure AD o quelli che usano identità ibride di Azure AD. Questo metodo supporta gli utenti che vogliono usare le credenziali di Windows, ma il computer locale non è aggiunto al dominio, ad esempio usando l'accesso remoto. In questo caso, un utente di Windows può indicare il proprio account di dominio e la password e può eseguire l'autenticazione nel database in database SQL, l'Istanza gestita di SQL o l'Azure Synapse.

  1. Avviare Management Studio o Strumenti dati e nella finestra di dialogo Connetti al server (o Connettersi al motore di database) selezionare Azure Active Directory - Password.

  2. Nella casella Nome utente digitare il nome utente di Azure Active Directory nel formato username@domain.com. I nomi utente devono essere un account di Azure Active Directory o un account da un dominio gestito o federato con Azure Active Directory.

  3. Nella casella Password digitare la password utente per l'account di Azure Active Directory o l'account di dominio gestito/federato.

    Selezionare Autenticazione password di Active Directory

  4. Scegliere il pulsante Opzioni, quindi nella pagina Proprietà connessione digitare il nome del database utente a cui si desidera connettersi nella casella Connect to database (Connetti al database). Vedere il grafico nell'opzione precedente.

Autenticazione interattiva di Active Directory

Usare questo metodo per l'autenticazione interattiva con o senza Multi-Factor Authentication (MFA), con la password richiesta in modo interattivo. Questo metodo può essere usato per eseguire l'autenticazione al database in database SQL, il Istanza gestita di SQL e Azure Synapse per gli utenti dell'identità solo cloud di Azure AD o per coloro che usano identità ibride di Azure AD.

Per altre informazioni, vedere Uso dell'autenticazione di Azure AD a più fattori con database SQL e Azure Synapse (supporto SSMS per MFA).

Utilizzo di un'identità di Azure Active Directory per connettersi da un'applicazione client

Le procedure seguenti illustrano come connettersi a un database SQL con un'identità di Azure AD da un'applicazione client.

Autenticazione integrata di Active Directory

Per usare autenticazione di Windows integrato, è necessario che Active Directory del dominio sia federato con Azure Active Directory o sia un dominio gestito configurato per l'accesso Single Sign-On semplice per l'autenticazione hash pass-through o password. Per altre informazioni, vedere Accesso Single Sign-On facile di Azure Active Directory.

L'applicazione client (o un servizio) che si connette al database deve essere in esecuzione in un computer aggiunto al dominio con le credenziali di dominio di un utente.

Per connettersi a un database usando l'autenticazione integrata e un'identità di Azure AD, la parola chiave Di autenticazione nella stringa di connessione del database deve essere impostata su Active Directory Integrated. L'esempio di codice C# seguente usa ADO .NET.

string ConnectionString = @"Data Source=n9lxnyuzhv.database.windows.net; Authentication=Active Directory Integrated; Initial Catalog=testdb;";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();

La parola chiave Integrated Security=True della stringa di connessione non è supportata per la connessione al database SQL di Azure. Quando si esegue una connessione ODBC, è necessario rimuovere gli spazi e impostare l'autenticazione su 'ActiveDirectoryIntegrated'.

Autenticazione della password di Active Directory

Per connettersi a un database usando gli account utente dell'identità solo cloud di Azure AD o quelli che usano identità ibride di Azure AD, la parola chiave Di autenticazione deve essere impostata su Active Directory Password. La stringa di connessione deve contenere le parole chiave e i valori User ID/UID e Password/PWD. L'esempio di codice C# seguente usa ADO .NET.

string ConnectionString =
@"Data Source=n9lxnyuzhv.database.windows.net; Authentication=Active Directory Password; Initial Catalog=testdb;  UID=bob@contoso.onmicrosoft.com; PWD=MyPassWord!";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();

Per altre informazioni sui metodi di autenticazione di Azure AD, usare gli esempi di codice dimostrativo disponibili in Azure AD Authentication GitHub Demo(Dimostrazione GitHub dell'autenticazione di Azure AD).

Token Azure AD

Questo metodo di autenticazione consente ai servizi di livello intermedio di ottenere token Web JSON (JWT) per connettersi al database in database SQL, il Istanza gestita di SQL o Azure Synapse ottenendo un token da Azure AD. Questo metodo consente diversi scenari dell'applicazione, tra cui identità del servizio, entità servizio e applicazioni usando l'autenticazione basata su certificati. Per usare l'autenticazione tramite token di Azure AD, è necessario completare quattro passaggi fondamentali:

  1. Registrare l'applicazione con Azure Active Directory e ottenere l'ID client per il codice.
  2. Creare un utente del database che rappresenta l'applicazione. (Completato in precedenza al passaggio 6).
  3. Creare un certificato nel computer client che esegue l'applicazione.
  4. Aggiungere il certificato come chiave per l'applicazione.

Stringa di connessione di esempio:

string ConnectionString = @"Data Source=n9lxnyuzhv.database.windows.net; Initial Catalog=testdb;";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.AccessToken = "Your JWT token";
conn.Open();

Per altre informazioni, vedere SQL Server Security Blog(Blog sulla sicurezza del server SQL). Per informazioni sull'aggiunta di un certificato, vedere Introduzione all'autenticazione basata su certificati di Azure Active Directory.

sqlcmd

Le istruzioni seguenti eseguono la connessione usando la versione 13.1 di sqlcmd disponibile in Download Center.

Nota

sqlcmd con il -G comando non funziona con le identità di sistema e richiede un account di accesso dell'entità utente.

sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G  
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -U bob@contoso.com -P MyAADPassword -G -l 30

Risolvere i problemi di autenticazione di Azure AD

Le indicazioni sulla risoluzione dei problemi relativi all'autenticazione di Azure AD sono disponibili nel blog seguente: https://techcommunity.microsoft.com/t5/azure-sql-database/troubleshooting-problems-related-to-azure-ad-authentication-with/ba-p/1062991

Passaggi successivi