Share via


Usare Microsoft Entra ID per l'autenticazione con MySQL

SI APPLICA A: Database di Azure per MySQL - Server singolo

Importante

Database di Azure per MySQL server singolo si trova nel percorso di ritiro. È consigliabile eseguire l'aggiornamento a Database di Azure per MySQL server flessibile. Per altre informazioni sulla migrazione a Database di Azure per MySQL server flessibile, vedere Che cosa accade a Database di Azure per MySQL server singolo?

Questo articolo illustra la procedura per configurare l'accesso a Microsoft Entra ID con Database di Azure per MySQL e come connettersi usando un token Microsoft Entra.

Importante

L'autenticazione Di Microsoft Entra è disponibile solo per MySQL 5.7 e versioni successive.

Impostazione dell'utente di Microsoft Entra Amministrazione

Solo un utente di Microsoft Entra Amministrazione può creare/abilitare gli utenti per l'autenticazione basata su ID di Microsoft Entra. Per creare un utente di Microsoft Entra Amministrazione, seguire questa procedura

  1. Nella portale di Azure selezionare l'istanza di Database di Azure per MySQL da abilitare per Microsoft Entra ID.
  2. In Impostazioni selezionare Amministratore di Active Directory:

set Microsoft Entra administrator

  1. Selezionare un utente Microsoft Entra valido nel tenant del cliente come amministratore di Microsoft Entra.

Importante

Quando si imposta l'amministratore, nel server di Database di Azure per MySQL viene aggiunto un nuovo utente con autorizzazioni di amministratore complete.

È possibile creare un solo amministratore di Microsoft Entra per ogni server MySQL e selezionare un altro utente sovrascriverà l'amministratore esistente di Microsoft Entra configurato per il server.

Dopo aver configurato l'amministratore, è possibile accedere:

Connessione per Database di Azure per MySQL tramite Microsoft Entra ID

Il diagramma generale seguente riepiloga il flusso di lavoro dell'uso dell'autenticazione di Microsoft Entra con Database di Azure per MySQL:

authentication flow

L'integrazione di Microsoft Entra è stata progettata per lavorare con strumenti MySQL comuni come l'interfaccia della riga di comando di mysql, che non sono consapevoli di Microsoft Entra e supportano solo la specifica di nome utente e password durante la connessione a MySQL. Passiamo il token Microsoft Entra come password, come illustrato nell'immagine precedente.

Attualmente sono stati testati i client seguenti:

  • MySQLWorkbench
  • Interfaccia della riga di comando di MySQL

Sono stati anche testati i driver di applicazione più comuni. I dettagli sono disponibili alla fine di questa pagina.

Questi sono i passaggi che un utente/applicazione dovrà eseguire l'autenticazione con l'ID Microsoft Entra descritto di seguito:

Prerequisiti

È possibile seguire la procedura in Azure Cloud Shell, in una macchina virtuale di Azure o nel computer locale. Assicurarsi di aver installato l'interfaccia della riga di comando di Azure.

Passaggio 1: Eseguire l'autenticazione con Microsoft Entra ID

Per iniziare, eseguire l'autenticazione con Microsoft Entra ID usando lo strumento dell'interfaccia della riga di comando di Azure. Questo passaggio non è obbligatorio in Azure Cloud Shell.

az login

Il comando avvierà una finestra del browser nella pagina di autenticazione di Microsoft Entra. Richiede di assegnare all'utente Microsoft Entra l'ID utente e la password.

Passaggio 2: Recuperare il token di accesso di Microsoft Entra

Richiamare lo strumento dell'interfaccia della riga di comando di Azure per acquisire un token di accesso per l'utente autenticato di Microsoft Entra dal passaggio 1 per accedere alle Database di Azure per MySQL.

Esempio (per il cloud pubblico):

az account get-access-token --resource https://ossrdbms-aad.database.windows.net

Il valore della risorsa precedente deve essere specificato esattamente come illustrato. Per gli altri cloud, è possibile cercare il valore della risorsa usando:

az cloud show

Per l'interfaccia della riga di comando di Azure versione 2.0.71 e successive, è possibile specificare il comando in questa versione più agevole per tutti i cloud:

az account get-access-token --resource-type oss-rdbms

Con PowerShell è possibile usare il comando seguente per acquisire il token di accesso:

$accessToken = Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net
$accessToken.Token | out-file C:\temp\MySQLAccessToken.txt

Al termine dell'autenticazione, l'ID Microsoft Entra restituirà un token di accesso:

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

Il token è una stringa Base 64 che codifica tutte le informazioni sull'utente autenticato e che è indirizzata al servizio Database di Azure per MySQL.

La validità del token di accesso è compresa tra 5 minuti e 60 minuti. È consigliabile ottenere il token di accesso appena prima di accedere a Database di Azure per MySQL. È possibile usare il comando di PowerShell seguente per visualizzare la validità del token.

$accessToken.ExpiresOn.DateTime

Passaggio 3: Usare il token come password per l'accesso con MySQL

Durante la connessione è necessario usare il token di accesso come password utente MySQL. Quando si usano client GUI come MySQLWorkbench, è possibile usare il metodo descritto in precedenza per recuperare il token.

Uso dell'interfaccia della riga di comando di MySQL

Quando si usa l'interfaccia della riga di comando, è possibile usare questa sintassi abbreviata per connettersi:

Esempio (Linux/macOS):

mysql -h mydb.mysql.database.azure.com \ 
  --user user@tenant.onmicrosoft.com@mydb \ 
  --enable-cleartext-plugin \ 
  --password=`az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken`

Uso di MySQL Workbench

  • Avviare MySQL Workbench e fare clic sull'opzione Database, quindi fare clic su "Connessione al database"
  • Nel campo nome host immettere l'FQDN MySQL, ad esempio. mydb.mysql.database.azure.com
  • Nel campo nome utente immettere il nome amministratore di Microsoft Entra di MySQL e aggiungerlo con il nome del server MySQL, non il nome FQDN, ad esempio user@tenant.onmicrosoft.com@mydb
  • Nel campo password fare clic su "Store in Vault" e incollare il token di accesso dal file, ad esempio C:\temp\MySQLAccessToken.txt
  • Fare clic sulla scheda Avanzate e assicurarsi di selezionare "Enable Cleartext Authentication Plugin" (Abilita plug-in di autenticazione cleartext)
  • Fare clic su OK per connettersi al database

Considerazioni importanti per la connessione:

  • user@tenant.onmicrosoft.com è il nome dell'utente o del gruppo di Microsoft Entra che si sta tentando di connettersi come
  • Aggiungere sempre il nome del server dopo il nome utente/gruppo di Microsoft Entra (ad esempio @mydb)
  • Assicurarsi di usare il modo esatto in cui viene digitato il nome dell'utente o del gruppo Microsoft Entra
  • I nomi di utenti e gruppi di Microsoft Entra fanno distinzione tra maiuscole e minuscole
  • Quando ci si connette come gruppo, usare solo il nome del gruppo ( ad esempio GroupName@mydb)
  • Se il nome contiene spazi, usare \ prima di ogni spazio per eseguire l'escape

Si noti l'impostazione "enable-cleartext-plugin". È necessario usare una configurazione simile con altri client per assicurarsi che il token venga inviato al server senza hash.

Si è ora autenticati nel server MySQL usando l'autenticazione Microsoft Entra.

Creazione di utenti di Microsoft Entra in Database di Azure per MySQL

Per aggiungere un utente di Microsoft Entra al database di Database di Azure per MySQL, seguire questa procedura dopo la connessione (vedere la sezione successiva su come connettersi):

  1. Assicurarsi innanzitutto che l'utente <user>@yourtenant.onmicrosoft.com di Microsoft Entra sia un utente valido nel tenant di Microsoft Entra.
  2. Accedere all'istanza di Database di Azure per MySQL come utente di Microsoft Entra Amministrazione.
  3. Creare l'utente <user>@yourtenant.onmicrosoft.com in Database di Azure per MySQL.

Esempio:

CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';

Per i nomi utente che superano i 32 caratteri, è consigliabile usare invece un alias per la connessione:

Esempio:

CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName'; 

Nota

  1. MySQL ignora gli spazi iniziali e finali in modo che il nome utente non abbia spazi iniziali o finali.
  2. L'autenticazione di un utente tramite Microsoft Entra ID non concede all'utente alcuna autorizzazione per accedere agli oggetti all'interno del database Database di Azure per MySQL. È necessario concedere manualmente le autorizzazioni necessarie all'utente.

Creazione di gruppi di Microsoft Entra in Database di Azure per MySQL

Per abilitare un gruppo Microsoft Entra per l'accesso al database, usare lo stesso meccanismo degli utenti, ma specificare invece il nome del gruppo:

Esempio:

CREATE AADUSER 'Prod_DB_Readonly';

Quando si esegue l'accesso, i membri del gruppo useranno i propri token di accesso personali, ma firmeranno usando il nome del gruppo specificato come nome utente.

Convalida dei token

L'autenticazione di Microsoft Entra in Database di Azure per MySQL garantisce che l'utente esista nel server MySQL e controlli la validità del token convalidando il contenuto del token. Vengono eseguiti i passaggi di convalida del token seguenti:

  • Il token è firmato dall'ID Microsoft Entra e non è stato manomesso
  • Il token è stato rilasciato dall'ID Microsoft Entra per il tenant associato al server
  • Il token non è scaduto
  • Il token è relativo alla risorsa Database di Azure per MySQL (e non a un'altra risorsa di Azure)

Compatibilità con i driver delle applicazioni

È disponibile il supporto per la maggior parte dei driver, ma assicurarsi di usare le impostazioni per l'invio della password in testo non crittografato, in modo che il token venga inviato senza modifiche.

  • C/C++
    • libmysqlclient: supportato
    • mysql-connector-c++: Supportato
  • Java
    • Connessione or/J (mysql-connector-java): supportato, deve usare l'impostazione useSSL
  • Python
    • Connessione or/Python: supportato
  • Rubino
    • mysql2: supportato
  • .NET
    • mysql-connector-net: supportato, è necessario aggiungere plug-in per mysql_clear_password
    • mysql-net/MySql Connessione or: supportato
  • Node.js
    • mysqljs: non supportato (non invia token in testo non crittografato senza patch)
    • node-mysql2: supportato
  • Perl
    • DBD::mysql: Supportato
    • Net::MySQL: non supportato
  • Andare
    • go-sql-driver: supportato, aggiunta ?tls=true&allowCleartextPasswords=true a stringa di connessione

Passaggi successivi