Een Python-toepassing migreren om verbindingen zonder wachtwoord te gebruiken met Azure SQL Database
Van toepassing op: Azure SQL Database
Toepassingsaanvragen voor Azure SQL Database moeten worden geverifieerd. Hoewel er meerdere opties zijn voor verificatie bij Azure SQL Database, moet u waar mogelijk prioriteit geven aan verbindingen zonder wachtwoord in uw toepassingen. Traditionele verificatiemethoden die gebruikmaken van wachtwoorden of geheime sleutels maken beveiligingsrisico's en complicaties. Ga naar de verbindingen zonder wachtwoord voor Azure Services Hub voor meer informatie over de voordelen van het verplaatsen naar verbindingen zonder wachtwoord. In de volgende zelfstudie wordt uitgelegd hoe u een bestaande Python-toepassing migreert om verbinding te maken met Azure SQL Database om verbindingen zonder wachtwoord te gebruiken in plaats van een gebruikersnaam- en wachtwoordoplossing.
De Azure SQL Database configureren
Verbindingen zonder wachtwoord maken gebruik van Microsoft Entra-verificatie om verbinding te maken met Azure-services, waaronder Azure SQL Database. Microsoft Entra-verificatie: u kunt identiteiten op een centrale locatie beheren om het beheer van machtigingen te vereenvoudigen. Meer informatie over het configureren van Microsoft Entra-verificatie voor uw Azure SQL Database:
Zorg ervoor dat voor deze migratiehandleiding een Microsoft Entra-beheerder is toegewezen aan uw Azure SQL Database.
Navigeer naar de Microsoft Entra-pagina van uw logische server.
Selecteer Beheerder instellen om het flyoutmenu Microsoft Entra ID te openen.
Zoek in het flyoutmenu van Microsoft Entra ID naar de gebruiker die u als beheerder wilt toewijzen.
Selecteer de gebruiker en kies Selecteren.
Uw lokale ontwikkelomgeving configureren
Verbindingen zonder wachtwoord kunnen worden geconfigureerd voor zowel lokale als door Azure gehoste omgevingen. In deze sectie past u configuraties toe zodat afzonderlijke gebruikers zich kunnen verifiëren bij Azure SQL Database voor lokale ontwikkeling.
Aanmelden bij Azure
Zorg ervoor dat u bent aangemeld met hetzelfde Azure AD-account dat u wilt gebruiken voor toegang tot Azure SQL Database voor lokale ontwikkeling. U kunt zich verifiëren via populaire ontwikkelhulpprogramma's, zoals de Azure CLI of Azure PowerShell. De ontwikkelhulpprogramma's waarmee u zich kunt verifiëren, variëren per taal.
Meld u aan bij Azure via de Azure CLI met behulp van de volgende opdracht:
az login
Een databasegebruiker maken en rollen toewijzen
Maak een gebruiker in Azure SQL Database. De gebruiker moet overeenkomen met het Azure-account dat u hebt gebruikt om u lokaal aan te melden in de sectie Aanmelden bij Azure .
Blader in Azure Portal naar uw SQL-database en selecteer Query-editor (preview).
Selecteer Doorgaan aan
<your-username>
de rechterkant van het scherm om u met uw account aan te melden bij de database.Voer in de weergave queryeditor de volgende T-SQL-opdrachten uit:
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]; GO
Als u deze opdrachten uitvoert, wordt de rol Inzender voor SQL DB toegewezen aan het opgegeven account. Met deze rol kan de identiteit de gegevens en het schema van uw database lezen, schrijven en wijzigen. Zie Rollen met vaste databases voor meer informatie over de toegewezen rollen.
De configuratie van de lokale verbinding bijwerken
Bestaande toepassingscode die verbinding maakt met Azure SQL Database met behulp van het Python SQL-stuurprogramma: pyodbc blijft werken met wachtwoordloze verbindingen met kleine wijzigingen. De volgende code werkt bijvoorbeeld met zowel SQL-verificatie als verbindingen zonder wachtwoord wanneer deze lokaal worden uitgevoerd en wanneer deze worden geïmplementeerd in Azure-app Service.
import os
import pyodbc, struct
from azure.identity import DefaultAzureCredential
connection_string = os.environ["AZURE_SQL_CONNECTIONSTRING"]
def get_all():
with get_conn() as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM Persons")
# Do something with the data
return
def get_conn():
credential = DefaultAzureCredential(exclude_interactive_browser_credential=False)
token_bytes = credential.get_token("https://database.windows.net/.default").token.encode("UTF-16-LE")
token_struct = struct.pack(f'<I{len(token_bytes)}s', len(token_bytes), token_bytes)
SQL_COPT_SS_ACCESS_TOKEN = 1256 # This connection option is defined by microsoft in msodbcsql.h
conn = pyodbc.connect(connection_string, attrs_before={SQL_COPT_SS_ACCESS_TOKEN: token_struct})
return conn
Tip
In deze voorbeeldcode wordt de Omgevingsvariabele WEBSITE_HOSTNAME
van App Service gebruikt om te bepalen in welke omgeving de code wordt uitgevoerd. Voor andere implementatiescenario's kunt u andere omgevingsvariabelen gebruiken om de omgeving te bepalen.
Als u de verbindingsreeks waarnaar wordt verwezen (AZURE_SQL_CONNECTIONSTRING
) wilt bijwerken voor lokale ontwikkeling, gebruikt u de indeling zonder wachtwoord verbindingsreeks:
Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30
De app testen
Voer uw app lokaal uit en controleer of de verbindingen met Azure SQL Database werken zoals verwacht. Houd er rekening mee dat het enkele minuten kan duren voordat wijzigingen in Azure-gebruikers en -rollen zijn doorgevoerd via uw Azure-omgeving. Uw toepassing is nu geconfigureerd voor lokaal uitvoeren zonder dat ontwikkelaars geheimen in de toepassing zelf hoeven te beheren.
De Azure-hostingomgeving configureren
Zodra uw app is geconfigureerd voor lokaal gebruik van verbindingen zonder wachtwoord, kan dezelfde code worden geverifieerd bij Azure SQL Database nadat deze is geïmplementeerd in Azure. In de volgende secties wordt uitgelegd hoe u een geïmplementeerde toepassing configureert om verbinding te maken met Azure SQL Database met behulp van een beheerde identiteit. Beheerde identiteiten bieden een automatisch beheerde identiteit in Microsoft Entra ID (voorheen Azure Active Directory) die toepassingen kunnen gebruiken bij het maken van verbinding met resources die ondersteuning bieden voor Microsoft Entra-verificatie. Meer informatie over beheerde identiteiten:
De beheerde identiteit maken
Maak een door de gebruiker toegewezen beheerde identiteit met behulp van Azure Portal of de Azure CLI. Uw toepassing gebruikt de identiteit om te verifiëren bij andere services.
- Zoek boven aan Azure Portal naar beheerde identiteiten. Selecteer het resultaat beheerde identiteiten .
- Selecteer + Maken boven aan de overzichtspagina beheerde identiteiten .
- Voer op het tabblad Basisinformatie de volgende waarden in:
- Abonnement: Selecteer uw gewenste abonnement.
- Resourcegroep: Selecteer de gewenste resourcegroep.
- Regio: Selecteer een regio in de buurt van uw locatie.
- Naam: Voer een herkenbare naam in voor uw identiteit, zoals MigrationIdentity.
- Selecteer Controleren en maken onderaan de pagina.
- Wanneer de validatiecontroles zijn voltooid, selecteert u Maken. Azure maakt een nieuwe door de gebruiker toegewezen identiteit.
Nadat de resource is gemaakt, selecteert u Ga naar de resource om de details van de beheerde identiteit weer te geven.
De beheerde identiteit koppelen aan uw web-app
Configureer uw web-app voor het gebruik van de door de gebruiker toegewezen beheerde identiteit die u hebt gemaakt.
Voer de volgende stappen uit in Azure Portal om de door de gebruiker toegewezen beheerde identiteit te koppelen aan uw app. Dezelfde stappen zijn van toepassing op de volgende Azure-services:
- Azure Spring Apps
- Azure Container Apps
- Azure-VM's
- Azure Kubernetes Service
- Navigeer naar de overzichtspagina van uw web-app.
Selecteer Identiteit in het linkernavigatievenster.
Schakel op de pagina Identiteit over naar het tabblad Door de gebruiker toegewezen .
Selecteer + Toevoegen om de flyout Door de gebruiker toegewezen beheerde identiteit toevoegen te openen.
Selecteer het abonnement dat u eerder hebt gebruikt om de identiteit te maken.
Zoek op naam naar MigrationIdentity en selecteer deze in de zoekresultaten.
Selecteer Toevoegen om de identiteit aan uw app te koppelen.
Een databasegebruiker maken voor de identiteit en rollen toewijzen
Maak een SQL-databasegebruiker die wordt toegewezen aan de door de gebruiker toegewezen beheerde identiteit. Wijs de benodigde SQL-rollen toe aan de gebruiker zodat uw app de gegevens en het schema van uw database kan lezen, schrijven en wijzigen.
Blader in Azure Portal naar uw SQL-database en selecteer Query-editor (preview).
Selecteer Doorgaan aan
<username>
de rechterkant van het scherm om u met uw account aan te melden bij de database.Voer in de weergave queryeditor de volgende T-SQL-opdrachten uit:
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]; GO
Als u deze opdrachten uitvoert, wordt de rol Inzender voor SQL DB toegewezen aan de door de gebruiker toegewezen beheerde identiteit toegewezen. Met deze rol kan de identiteit de gegevens en het schema van uw database lezen, schrijven en wijzigen.
Belangrijk
Wees voorzichtig bij het toewijzen van databasegebruikersrollen in bedrijfsproductieomgevingen. In deze scenario's mag de app niet alle bewerkingen uitvoeren met één, verhoogde identiteit. Probeer het principe van minimale bevoegdheden te implementeren door meerdere identiteiten met specifieke machtigingen voor specifieke taken te configureren.
Meer informatie over het configureren van databaserollen en beveiliging vindt u in de volgende resources:
De verbindingsreeks bijwerken
Werk uw Azure-app-configuratie bij om de indeling zonder wachtwoord te gebruiken verbindingsreeks. De indeling moet hetzelfde zijn als in uw lokale omgeving.
Verbinding maken iontekenreeksen kunnen worden opgeslagen als omgevingsvariabelen in uw app-hostingomgeving. De volgende instructies richten zich op App Service, maar andere Azure-hostingservices bieden vergelijkbare configuraties.
Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30
<database-server-name>
is de naam van uw Azure SQL Database-server en <database-name>
is de naam van uw Azure SQL Database.
Een app-instelling maken voor de client-id van de beheerde identiteit
Als u de door de gebruiker toegewezen beheerde identiteit wilt gebruiken, maakt u een AZURE_CLIENT_ID omgevingsvariabele en stelt u deze in op de client-id van de beheerde identiteit. U kunt deze variabele instellen in de sectie Configuratie van uw app in Azure Portal. U vindt de client-id in de sectie Overzicht van de resource voor beheerde identiteiten in Azure Portal.
Sla uw wijzigingen op en start de toepassing opnieuw op als dit niet automatisch gebeurt.
Notitie
In de voorbeeldverbindingscode die in deze migratiehandleiding wordt weergegeven, wordt de klasse DefaultAzureCredential gebruikt wanneer deze wordt geïmplementeerd. In het bijzonder wordt de DefaultAzureCredential gebruikt zonder de client-id van de door de gebruiker toegewezen beheerde identiteit door te geven aan de constructor. In dit scenario is de terugval om te controleren op de omgevingsvariabele AZURE_CLIENT_ID. Als de omgevingsvariabele AZURE_CLIENT_ID niet bestaat, wordt een door het systeem toegewezen beheerde identiteit gebruikt als deze is geconfigureerd.
Als u de client-id van de beheerde identiteit doorgeeft in de DefaultAzureCredential-constructor, kan de verbindingscode nog steeds lokaal worden gebruikt en geïmplementeerd omdat het verificatieproces terugvalt op interactieve verificatie in het lokale scenario. Zie de Azure Identity-clientbibliotheek voor Python voor meer informatie.
De toepassing testen
Test uw app om te controleren of alles nog steeds werkt. Het kan enkele minuten duren voordat alle wijzigingen zijn doorgevoerd via uw Azure-omgeving.
Volgende stappen
In deze zelfstudie hebt u geleerd hoe u een toepassing migreert naar verbindingen zonder wachtwoord.
U kunt de volgende bronnen lezen om de concepten die in dit artikel worden besproken, uitgebreider te verkennen: