Een Java-toepassing migreren om verbindingen zonder wachtwoord te gebruiken met Azure SQL Database

In dit artikel wordt uitgelegd hoe u migreert van traditionele verificatiemethoden naar veiligere, wachtwoordloze verbindingen met Azure SQL Database.

Toepassingsaanvragen voor Azure SQL Database moeten worden geverifieerd. Azure SQL Database biedt verschillende manieren om veilig verbinding te maken met apps. Een van de manieren is om wachtwoorden te gebruiken. U moet echter waar mogelijk prioriteit geven aan verbindingen zonder wachtwoord in uw toepassingen.

Verificatieopties vergelijken

Wanneer de toepassing wordt geverifieerd met Azure SQL Database, biedt deze een combinatie van gebruikersnaam en wachtwoord om verbinding te maken met de database. Afhankelijk van waar de identiteiten worden opgeslagen, zijn er twee typen verificatie: Microsoft Entra-verificatie en Azure SQL Database-verificatie.

Microsoft Entra-verificatie

Microsoft Entra-verificatie is een mechanisme voor het maken van verbinding met Azure SQL Database met behulp van identiteiten die zijn gedefinieerd in Microsoft Entra-id. Met Microsoft Entra-verificatie kunt u databasegebruikersidentiteiten en andere Microsoft-services op een centrale locatie beheren, waardoor het beheer van machtigingen wordt vereenvoudigd.

Het gebruik van Microsoft Entra ID voor verificatie biedt de volgende voordelen:

  • Verificatie van gebruikers in Azure Services op een uniforme manier.
  • Beheer van wachtwoordbeleid en wachtwoordrotatie op één plaats.
  • Meerdere vormen van verificatie die worden ondersteund door Microsoft Entra ID, waardoor wachtwoorden niet meer hoeven op te slaan.
  • Klanten kunnen databasemachtigingen beheren met behulp van externe (Microsoft Entra ID)-groepen.
  • Microsoft Entra-verificatie maakt gebruik van Azure SQL-databasegebruikers om identiteiten op databaseniveau te verifiëren.
  • Ondersteuning van verificatie op basis van tokens voor toepassingen die verbinding maken met Azure SQL Database.

Azure SQL Database-verificatie

U kunt accounts maken in Azure SQL Database. Als u ervoor kiest om wachtwoorden als referenties voor de accounts te gebruiken, worden deze referenties opgeslagen in de sys.database_principals tabel. Omdat deze wachtwoorden zijn opgeslagen in Azure SQL Database, moet u de rotatie van de wachtwoorden zelf beheren.

Hoewel het mogelijk is om verbinding te maken met Azure SQL Database met wachtwoorden, moet u ze voorzichtig gebruiken. U moet ijverig zijn om de wachtwoorden nooit zichtbaar te maken op een onbeveiligde locatie. Iedereen die toegang krijgt tot de wachtwoorden, kan worden geverifieerd. Er bestaat bijvoorbeeld een risico dat een kwaadwillende gebruiker toegang heeft tot de toepassing als een verbindingsreeks per ongeluk wordt ingecheckt bij broncodebeheer, wordt verzonden via een onbeveiligde e-mail, geplakt in de verkeerde chat of wordt bekeken door iemand die niet gemachtigd mag zijn. In plaats daarvan kunt u overwegen uw toepassing bij te werken voor het gebruik van verbindingen zonder wachtwoord.

Introductie van verbindingen zonder wachtwoord

Met een verbinding zonder wachtwoord kunt u verbinding maken met Azure-services zonder referenties op te slaan in de toepassingscode, de configuratiebestanden of in omgevingsvariabelen.

Veel Azure-services ondersteunen verbindingen zonder wachtwoord, bijvoorbeeld via Azure Managed Identity. Deze technieken bieden robuuste beveiligingsfuncties die u kunt implementeren met behulp van DefaultAzureCredential vanuit de Azure Identity-clientbibliotheken. In deze zelfstudie leert u hoe u een bestaande toepassing bijwerkt voor gebruik DefaultAzureCredential in plaats van alternatieven zoals verbindingsreeks s.

DefaultAzureCredential ondersteunt meerdere verificatiemethoden en bepaalt automatisch welke tijdens runtime moet worden gebruikt. Met deze aanpak kan uw app verschillende verificatiemethoden gebruiken in verschillende omgevingen (lokale ontwikkelomgeving versus productie) zonder omgevingsspecifieke code te implementeren.

De volgorde en locaties waarin DefaultAzureCredential wordt gezocht naar referenties, vindt u in het overzicht van de Azure Identity-bibliotheek. Wanneer u bijvoorbeeld lokaal werkt, DefaultAzureCredential wordt doorgaans geverifieerd met het account dat de ontwikkelaar heeft gebruikt om zich aan te melden bij Visual Studio. Wanneer de app wordt geïmplementeerd in Azure, DefaultAzureCredential wordt automatisch overgeschakeld naar het gebruik van een beheerde identiteit. Er zijn geen codewijzigingen vereist voor deze overgang.

Om ervoor te zorgen dat verbindingen zonder wachtwoord zijn, moet u rekening houden met zowel lokale ontwikkeling als de productieomgeving. Als een verbindingsreeks op beide plaatsen is vereist, is de toepassing niet wachtwoordloos.

In uw lokale ontwikkelomgeving kunt u zich verifiëren met Azure CLI, Azure PowerShell, Visual Studio of Azure-invoegtoepassingen voor Visual Studio Code of IntelliJ. In dit geval kunt u deze referentie in uw toepassing gebruiken in plaats van eigenschappen te configureren.

Wanneer u toepassingen implementeert in een Azure-hostingomgeving, zoals een virtuele machine, kunt u beheerde identiteit in die omgeving toewijzen. Vervolgens hoeft u geen referenties op te geven om verbinding te maken met Azure-services.

Notitie

Een beheerde identiteit biedt een beveiligingsidentiteit die een app of service vertegenwoordigt. De identiteit wordt beheerd door het Azure-platform en u hoeft geen geheimen in te richten of te draaien. Meer informatie over beheerde identiteiten vindt u in de overzichtsdocumentatie .

Notitie

Omdat het JDBC-stuurprogramma voor Azure SQL Database nog geen wachtwoordloze verbindingen van lokale omgevingen ondersteunt, richt dit artikel zich alleen op toepassingen die zijn geïmplementeerd in Azure-hostingomgevingen en hoe u deze migreert naar gebruikloze verbindingen zonder wachtwoord.

Een bestaande toepassing migreren om verbindingen zonder wachtwoord te gebruiken

In de volgende stappen wordt uitgelegd hoe u een bestaande toepassing migreert om verbindingen zonder wachtwoord te gebruiken in plaats van een oplossing op basis van een wachtwoord.

0) De werkomgeving voorbereiden

Gebruik eerst de volgende opdracht om enkele omgevingsvariabelen in te stellen.

export AZ_RESOURCE_GROUP=<YOUR_RESOURCE_GROUP>
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demo
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName --output tsv)
export CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id --output tsv)

Vervang de tijdelijke aanduidingen door de volgende waarden, die overal in dit artikel worden gebruikt:

  • <YOUR_RESOURCE_GROUP>: De naam van de resourcegroep waarin uw resources zich bevinden.
  • <YOUR_DATABASE_SERVER_NAME>: de naam van uw Azure SQL Database-server. Deze moet uniek zijn binnen Azure.

1) Azure SQL Database configureren

1.1) Verificatie op basis van Microsoft Entra-id inschakelen

Als u Microsoft Entra ID-toegang wilt gebruiken met Azure SQL Database, moet u eerst de Microsoft Entra-beheerdergebruiker instellen. Alleen een Microsoft Entra-Beheer gebruiker kan gebruikers maken/inschakelen voor verificatie op basis van Microsoft Entra ID.

Als u Azure CLI gebruikt, voert u de volgende opdracht uit om te controleren of deze voldoende machtigingen heeft:

az login --scope https://graph.microsoft.com/.default

Voer vervolgens de volgende opdracht uit om de Microsoft Entra-beheerder in te stellen:

az sql server ad-admin create \
    --resource-group $AZ_RESOURCE_GROUP \
    --server $AZ_DATABASE_SERVER_NAME \
    --display-name $CURRENT_USERNAME \
    --object-id $CURRENT_USER_OBJECTID

Met deze opdracht stelt u de Microsoft Entra-beheerder in op de huidige aangemelde gebruiker.

Notitie

U kunt slechts één Microsoft Entra-beheerder per Azure SQL Database-server maken. Als u een andere optie selecteert, wordt de bestaande Microsoft Entra-beheerder overschreven die is geconfigureerd voor de server.

2) Migreer de app-code om wachtwoordloze verbindingen te gebruiken

Gebruik vervolgens de volgende stappen om uw code bij te werken voor het gebruik van verbindingen zonder wachtwoord. Hoewel conceptueel vergelijkbaar, gebruikt elke taal verschillende implementatiedetails.

  1. Voeg in uw project de volgende verwijzing toe aan het azure-identity pakket. Deze bibliotheek bevat alle entiteiten die nodig zijn voor het implementeren van verbindingen zonder wachtwoord.

    <dependency>
         <groupId>com.azure</groupId>
         <artifactId>azure-identity</artifactId>
         <version>1.5.4</version>
    </dependency>
    
  2. Schakel de door Microsoft Entra beheerde identiteitsverificatie in de JDBC-URL.v De locaties in uw code identificeren die momenteel een java.sql.Connection verbinding maken met Azure SQL Database. Werk uw code bij zodat deze overeenkomt met het volgende voorbeeld:

    String url = "jdbc:sqlserver://$AZ_DATABASE_SERVER_NAME.database.windows.net:1433;databaseName=$AZ_DATABASE_NAME;authentication=ActiveDirectoryMSI;"   
    Connection con = DriverManager.getConnection(url);
    
  3. Vervang de twee $AZ_DATABASE_SERVER_NAME variabelen en één $AZ_DATABASE_NAME variabele door de waarden die u aan het begin van dit artikel hebt geconfigureerd.

  4. Verwijder de user en password uit de JDBC-URL.

3) De Azure-hostingomgeving configureren

Nadat uw toepassing is geconfigureerd voor het gebruik van verbindingen zonder wachtwoord, kan dezelfde code worden geverifieerd bij Azure-services nadat deze is geïmplementeerd in Azure. Een toepassing die is geïmplementeerd in een Azure-app Service-exemplaar waaraan een beheerde identiteit is toegewezen, kan bijvoorbeeld verbinding maken met Azure Storage.

In deze sectie voert u twee stappen uit om ervoor te zorgen dat uw toepassing op een wachtwoordloze manier kan worden uitgevoerd in een Azure-hostingomgeving:

  • Wijs de beheerde identiteit toe voor uw Azure-hostingomgeving.
  • Wijs rollen toe aan de beheerde identiteit.

Notitie

Azure biedt ook Service Verbinding maken or, waarmee u uw hostingservice kunt verbinden met SQL Server. Met Service Verbinding maken or voor het configureren van uw hostingomgeving kunt u de stap voor het toewijzen van rollen aan uw beheerde identiteit weglaten, omdat Service Verbinding maken or dit voor u doet. In de volgende sectie wordt beschreven hoe u uw Azure-hostingomgeving op twee manieren configureert: één via Service Verbinding maken or en de andere door elke hostingomgeving rechtstreeks te configureren.

Belangrijk

Voor opdrachten van de service Verbinding maken or is Azure CLI 2.41.0 of hoger vereist.

De beheerde identiteit toewijzen met behulp van Azure Portal

De volgende stappen laten zien hoe u een door het systeem toegewezen beheerde identiteit toewijst voor verschillende webhostingservices. De beheerde identiteit kan veilig verbinding maken met andere Azure-services met behulp van de app-configuraties die u eerder hebt ingesteld.

  1. Selecteer Identiteit in het navigatiedeelvenster op de hoofdpagina van uw Azure-app Service-exemplaar.

  2. Zorg ervoor dat u op het tabblad Systeem toegewezen het veld Status instelt op Aan. Een door het systeem toegewezen identiteit wordt intern beheerd door Azure en verwerkt beheertaken voor u. De details en id's van de identiteit worden nooit weergegeven in uw code.

    Screenshot of Azure portal Identity page of App Service resource with System assigned tab showing and Status field highlighted.

U kunt ook beheerde identiteit toewijzen in een Azure-hostingomgeving met behulp van de Azure CLI.

U kunt een beheerde identiteit toewijzen aan een Azure-app Service-exemplaar met de opdracht az webapp identity assign, zoals wordt weergegeven in het volgende voorbeeld:

export AZ_MI_OBJECT_ID=$(az webapp identity assign \
    --resource-group $AZ_RESOURCE_GROUP \
    --name <service-instance-name> \
    --query principalId \
    --output tsv)

Rollen toewijzen aan de beheerde identiteit

Vervolgens verleent u machtigingen aan de beheerde identiteit die u hebt gemaakt voor toegang tot uw SQL-database.

Als u uw services hebt verbonden met service Verbinding maken or, hebben de opdrachten van de vorige stap de rol al toegewezen, zodat u deze stap kunt overslaan.

De app testen

Nadat u deze codewijzigingen hebt aangebracht, kunt u de toepassing bouwen en opnieuw implementeren. Blader vervolgens naar uw gehoste toepassing in de browser. Uw app moet verbinding kunnen maken met de Azure SQL-database. Houd er rekening mee dat het enkele minuten kan duren voordat de roltoewijzingen zijn doorgegeven via uw Azure-omgeving. Uw toepassing is nu geconfigureerd om zowel lokaal als in een productieomgeving uit te voeren zonder dat de ontwikkelaars geheimen in de toepassing zelf hoeven te beheren.

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: