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
Le richieste dell'applicazione al database SQL di Azure devono essere autenticate. Anche se sono disponibili più opzioni per l'autenticazione al database SQL di Azure, è consigliabile assegnare priorità alle connessioni senza password nelle applicazioni, laddove possibile. I metodi di autenticazione tradizionali che utilizzano password o chiavi private generano rischi e complicazioni per la sicurezza. Visitare l’hub delle connessioni senza password per i servizi di Azure per ricevere altre informazioni sui vantaggi del passaggio alle connessioni senza password. L'esercitazione seguente spiega come eseguire la migrazione di un'applicazione Python esistente per la connessione a Database SQL di Azure al fine di usare connessioni senza password anziché una soluzione che preveda nome utente e password.
Il driver mssql-python offre il supporto predefinito per l'autenticazione di Microsoft Entra, rendendo le connessioni senza password semplici con modifiche minime al codice.
Configurare il database SQL di Azure
Le connessioni senza password usano l'autenticazione di Microsoft Entra per connettersi ai servizi di Azure, compreso Database SQL di Azure. Con l'autenticazione di Microsoft Entra, è possibile gestire centralmente le identità per semplificare la gestione delle autorizzazioni. Informazioni su come configurare l'autenticazione di Microsoft Entra per Database SQL di Azure:
Per questa guida alla migrazione, verificare di disporre di un amministratore di Microsoft Entra assegnato al database SQL di Azure.
Passare alla pagina Microsoft Entra del server logico.
Selezionare Imposta amministratore per aprire il menu a comparsa Microsoft Entra ID.
Nel menu a comparsa Microsoft Entra ID, cercare l'utente da assegnare come amministratore.
Selezionare l’utente e scegliere Seleziona.
Configurare l'ambiente di sviluppo locale
Le connessioni senza password possono essere configurate in modo da funzionare sia per gli ambienti locali che per quelli ospitati in Azure. In questa sezione vengono applicate configurazioni per consentire ai singoli utenti di eseguire l'autenticazione a database SQL di Azure per lo sviluppo locale.
Accedere ad Azure
Per lo sviluppo locale, assicurarsi di aver eseguito l'accesso con lo stesso account Microsoft Entra che si vuole usare per accedere al database SQL di Azure. È possibile eseguire l'autenticazione tramite strumenti di sviluppo diffusi, come l'interfaccia della riga di comando di Azure o Azure PowerShell. Gli strumenti di sviluppo con cui è possibile eseguire l'autenticazione variano a seconda dei linguaggi.
Accedere ad Azure tramite l'interfaccia della riga di comando di Azure usando il comando seguente. Funziona in Windows, macOS e Linux.
az login
Creare un utente del database e assegnare i ruoli
Creare un utente nel database SQL di Azure. L'utente deve corrispondere all'account Azure usato per accedere in locale nella sezione Accedi ad Azure.
Nel portale di Azure, passare al database SQL e selezionare Editor di query (anteprima).
Selezionare Continua come
<your-username>sul lato destro della schermata per accedere al database con il proprio account.Nella visualizzazione dell'editor di query eseguire i seguenti comandi T-SQL:
CREATE USER [user@domain] FROM EXTERNAL PROVIDER; ALTER ROLE db_datareader ADD MEMBER [user@domain]; ALTER ROLE db_datawriter ADD MEMBER [user@domain]; ALTER ROLE db_ddladmin ADD MEMBER [user@domain]; GOL'esecuzione di questi comandi assegna il ruolo Collaboratore database SQL all'account specificato. Questo ruolo consente all'identità di leggere, scrivere e modificare i dati e lo schema del database. Per altre informazioni sui ruoli assegnati, vedere Ruoli predefiniti del database.
Aggiornare la configurazione della connessione locale
La migrazione a connessioni senza password con mssql-python richiede solo una modifica della stringa di connessione. Il driver ha il supporto predefinito per le modalità di autenticazione di Microsoft Entra, eliminando la necessità di gestire manualmente i token.
from os import getenv
from dotenv import load_dotenv
from mssql_python import connect
load_dotenv()
connection_string = getenv("AZURE_SQL_CONNECTIONSTRING")
def get_all():
with connect(connection_string) as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM Persons")
# Do something with the data
return
Per aggiornare la stringa di connessione di riferimento (AZURE_SQL_CONNECTIONSTRING) per lo sviluppo locale, creare un .env file nella cartella del progetto con il formato della stringa di connessione senza password usando ActiveDirectoryDefault l'autenticazione:
AZURE_SQL_CONNECTIONSTRING=Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;Authentication=ActiveDirectoryDefault
ActiveDirectoryDefault individua automaticamente le credenziali da più origini (interfaccia della riga di comando di Azure, variabili di ambiente, Visual Studio e così via) senza richiedere l'accesso interattivo. Questo approccio è pratico per lo sviluppo, ma aggiunge latenza perché prova ogni origine delle credenziali in sequenza.
Importante
ActiveDirectoryDefault è destinato solo allo sviluppo locale. Prova più metodi di autenticazione in sequenza, che aggiungono latenza e possono causare comportamenti imprevisti nell'ambiente di produzione. Per le applicazioni di produzione, usare il metodo di autenticazione specifico per lo scenario:
-
Servizio app di Azure/Funzioni: usare
ActiveDirectoryMSI(identità gestita) -
Accesso utente interattivo: usare
ActiveDirectoryInteractive -
Principale del servizio: Usare
ActiveDirectoryServicePrincipal
Testare l'app
Eseguire l'app in locale e verificare che le connessioni al database SQL di Azure funzionino come previsto. Tenere presente che possono essere necessari alcuni minuti prima che le modifiche apportate agli utenti e ai ruoli di Azure vengano propagate nell'ambiente Azure. L'applicazione è ora configurata per l'esecuzione in locale senza che gli sviluppatori debbano gestire i segreti nell'applicazione stessa.
Configurare l'ambiente host di Azure
Dopo aver configurato l'app per l'uso delle connessioni senza password in locale, lo stesso codice può eseguire l'autenticazione al database SQL di Azure dopo la distribuzione in Azure. Le sezioni seguenti spiegano come configurare un'applicazione distribuita per la connessione a database SQL di Azure usando un'identità gestita. Le identità gestite forniscono un'identità gestita automaticamente in Microsoft Entra ID (precedentemente Azure Active Directory) per le applicazioni da usare per la connessione alle risorse che supportano l'autenticazione di Microsoft Entra. Vedere altre informazioni sulle identità gestite:
Creare l'identità gestita
Creare un'identità gestita assegnata dall'utente tramite il portale di Azure o l’interfaccia della riga di comando di Azure. L'applicazione utilizza l'identità per eseguire l'autenticazione ad altri servizi.
- Nella parte superiore del portale di Azure cercare Identità gestite. Selezionare il risultato Identità gestite.
- Selezionare + Crea nella parte superiore della pagina di panoramica Identità gestite.
- Nella scheda Informazioni di base digitare i valori seguenti:
- Sottoscrizione: selezionare la sottoscrizione desiderata.
- Gruppo di risorse: selezionare il gruppo di risorse desiderato.
- Area: selezionare un'area nelle vicinanze della propria posizione.
- Nome: immettere un nome riconoscibile per l'identità, ad esempio IdentitàMigrazione.
- Selezionare Rivedi e crea nella parte inferiore della pagina.
- Al termine dei controlli di convalida, selezionare Crea. Azure crea una nuova identità assegnata all'utente.
Dopo aver creato la risorsa, selezionare Vai alla risorsa per visualizzare i dettagli dell'identità gestita.
Associare l'identità gestita all'app Web
Configurare l'app Web per usare l'identità gestita assegnata creata dall'utente.
Completare i passaggi seguenti nel portale di Azure per associare l'identità gestita assegnata dall'utente all'app. Gli stessi passaggi si applicano ai servizi di Azure seguenti:
- App Spring di Azure
- App contenitore di Azure
- Macchine virtuali di Azure
- Servizio Azure Kubernetes
Passare alla pagina di panoramica dell'app Web.
Selezionare Identità nel pannello di spostamento sinistro.
Nella pagina Identità passare alla scheda Assegnata dall'utente.
Selezionare + Aggiungi per aprire il riquadro a comparsa Aggiungi identità gestita assegnata dall'utente .
Selezionare la sottoscrizione usata in precedenza per creare l'identità.
Cercare il nome IdentitàMigrazione e selezionarlo nei risultati della ricerca.
Selezionare Aggiungi per associare l'identità all'app.
Creare un utente del database per l’identità e assegnare i ruoli
Creare un utente del database SQL che esegua il mapping con l'identità gestita assegnata dall'utente. Assegnare i ruoli SQL necessari all'utente per consentire all'app di leggere, scrivere e modificare i dati e lo schema del database.
Nel portale di Azure, passare al database SQL e selezionare Editor di query (anteprima).
Selezionare Continua come
<username>sul lato destro della schermata per accedere al database con il proprio account.Nella visualizzazione dell'editor di query eseguire i seguenti comandi T-SQL:
CREATE USER [user-assigned-identity-name] FROM EXTERNAL PROVIDER; ALTER ROLE db_datareader ADD MEMBER [user-assigned-identity-name]; ALTER ROLE db_datawriter ADD MEMBER [user-assigned-identity-name]; ALTER ROLE db_ddladmin ADD MEMBER [user-assigned-identity-name]; GOL'esecuzione di questi comandi assegna il ruolo Collaboratore database SQL all'identità gestita assegnata dall'utente. Questo ruolo consente all'identità di leggere, scrivere e modificare i dati e lo schema del database.
Importante
Prestare attenzione mentre si assegnano ruoli utente del database in ambienti di produzione aziendali. In tali scenari l'app non deve eseguire tutte le operazioni mediante un'unica identità con privilegi elevati. Provare ad adottare il principio dei privilegi minimi configurando più identità con autorizzazioni specifiche per attività specifiche.
Per altre informazioni sulle configurazioni di ruoli del database e sicurezza, vedere le seguenti risorse:
Aggiornare la stringa di connessione
Aggiorna la configurazione dell'app di Azure per utilizzare il formato di stringa di connessione senza password con l'autenticazione ActiveDirectoryMSI per l'identità gestita.
Le stringhe di connessione possono essere archiviate come variabili di ambiente nell'ambiente host dell'app. Le istruzioni seguenti sono incentrate sul servizio app, ma altri servizi di hosting di Azure forniscono configurazioni simili.
Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;Authentication=ActiveDirectoryMSI
<database-server-name> è il nome del server database SQL di Azure e <database-name> è il nome del Database SQL di Azure.
Creare un'impostazione app per l'ID client dell'identità gestita
Per usare l'identità gestita assegnata dall'utente, creare una AZURE_CLIENT_ID variabile di ambiente e impostarla come ID client dell'identità gestita. È possibile impostare questa variabile nella sezione Configurazione dell'app nel portale di Azure. È possibile trovare l'ID client nella sezione Panoramica della risorsa di identità gestita nel portale di Azure.
Salvare le modifiche e riavviare l'applicazione, se ciò non avviene automaticamente.
Nota
Quando si usa un'identità gestita assegnata dall'utente, includere l'ID client nella stringa di connessione usando il User Id parametro :
Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;Authentication=ActiveDirectoryMSI;User Id=<managed-identity-client-id>
Se si omette il User Id parametro , il driver usa l'identità gestita assegnata dal sistema se ne è configurata una.
Testare l'applicazione
Testare l’app, verificando che tutto funzioni ancora. La propagazione di tutte le modifiche nell'ambiente Azure può richiedere alcuni minuti.