Migrera ett Java-program för att använda lösenordslösa anslutningar med Azure SQL Database
Den här artikeln beskriver hur du migrerar från traditionella autentiseringsmetoder till säkrare, lösenordslösa anslutningar med Azure SQL Database.
Programbegäranden till Azure SQL Database måste autentiseras. Azure SQL Database tillhandahåller flera olika sätt för appar att ansluta på ett säkert sätt. Ett av sätten är att använda lösenord. Du bör dock prioritera lösenordslösa anslutningar i dina program när det är möjligt.
Jämför autentiseringsalternativ
När programmet autentiseras med Azure SQL Database tillhandahåller det ett användarnamn och lösenordspar för att ansluta till databasen. Beroende på var identiteterna lagras finns det två typer av autentisering: Microsoft Entra-autentisering och Azure SQL Database-autentisering.
Microsoft Entra-autentisering
Microsoft Entra-autentisering är en mekanism för att ansluta till Azure SQL Database med hjälp av identiteter som definierats i Microsoft Entra-ID. Med Microsoft Entra-autentisering kan du hantera databasanvändares identiteter och andra Microsoft usluge på en central plats, vilket förenklar behörighetshanteringen.
Användning av Microsoft Entra-ID för autentisering ger följande fördelar:
- Autentisering av användare i Azure Services på ett enhetligt sätt.
- Hantering av lösenordsprinciper och lösenordsrotation på en enda plats.
- Flera former av autentisering som stöds av Microsoft Entra-ID, vilket kan eliminera behovet av att lagra lösenord.
- Kunder kan hantera databasbehörigheter med hjälp av externa (Microsoft Entra ID)-grupper.
- Microsoft Entra-autentisering använder Azure SQL-databasanvändare för att autentisera identiteter på databasnivå.
- Stöd för tokenbaserad autentisering för program som ansluter till Azure SQL Database.
Azure SQL Database-autentisering
Du kan skapa konton i Azure SQL Database. Om du väljer att använda lösenord som autentiseringsuppgifter för kontona lagras dessa autentiseringsuppgifter i sys.database_principals
tabellen. Eftersom dessa lösenord lagras i Azure SQL Database måste du hantera rotationen av lösenorden själv.
Även om det är möjligt att ansluta till Azure SQL Database med lösenord bör du använda dem med försiktighet. Du måste vara noggrann för att aldrig exponera lösenorden på en osäker plats. Alla som får åtkomst till lösenorden kan autentisera. Det finns till exempel en risk att en obehörig användare kan komma åt programmet om en niska veze av misstag checkas in i källkontrollen, skickas via ett osäkert e-postmeddelande, klistras in i fel chatt eller visas av någon som inte borde ha behörighet. Överväg i stället att uppdatera ditt program för att använda lösenordslösa anslutningar.
Introduktion till lösenordslösa anslutningar
Med en lösenordslös anslutning kan du ansluta till Azure-tjänster utan att lagra några autentiseringsuppgifter i programkoden, dess konfigurationsfiler eller i miljövariabler.
Många Azure-tjänster stöder lösenordslösa anslutningar, till exempel via Azure Managed Identity. De här teknikerna ger robusta säkerhetsfunktioner som du kan implementera med hjälp av DefaultAzureCredential från Azure Identity-klientbiblioteken. I den här självstudien får du lära dig hur du uppdaterar ett befintligt program så att det kan användas DefaultAzureCredential
i stället för alternativ som niska veze.
DefaultAzureCredential
stöder flera autentiseringsmetoder och avgör automatiskt vilka som ska användas vid körning. Med den här metoden kan din app använda olika autentiseringsmetoder i olika miljöer (lokal utveckling jämfört med produktion) utan att implementera miljöspecifik kod.
Ordningen och platserna där DefaultAzureCredential
sökningar efter autentiseringsuppgifter finns i översikten över Azure Identity Library. När du till exempel arbetar lokalt DefaultAzureCredential
autentiseras vanligtvis med det konto som utvecklaren använde för att logga in i Visual Studio. När appen distribueras till Azure DefaultAzureCredential
växlar den automatiskt till att använda en hanterad identitet. Inga kodändringar krävs för den här övergången.
För att säkerställa att anslutningarna är lösenordslösa måste du ta hänsyn till både lokal utveckling och produktionsmiljön. Om en niska veze krävs på något av dessa ställe är programmet inte lösenordslöst.
I din lokala utvecklingsmiljö kan du autentisera med Azure CLI, Azure PowerShell, Visual Studio eller Azure-plugin-program för Visual Studio Code eller IntelliJ. I det här fallet kan du använda autentiseringsuppgifterna i ditt program i stället för att konfigurera egenskaper.
När du distribuerar program till en Azure-värdmiljö, till exempel en virtuell dator, kan du tilldela hanterad identitet i den miljön. Sedan behöver du inte ange autentiseringsuppgifter för att ansluta till Azure-tjänster.
Kommentar
En hanterad identitet tillhandahåller en säkerhetsidentitet som representerar en app eller tjänst. Identiteten hanteras av Azure-plattformen och kräver inte att du etablerar eller roterar några hemligheter. Du kan läsa mer om hanterade identiteter i översiktsdokumentationen.
Kommentar
Eftersom JDBC-drivrutinen för Azure SQL Database inte stöder lösenordslösa anslutningar från lokala miljöer ännu, fokuserar den här artikeln bara på program som distribueras till Azure-värdmiljöer och hur du migrerar dem för att använda lösenordslösa anslutningar.
Migrera ett befintligt program för att använda lösenordslösa anslutningar
Följande steg beskriver hur du migrerar ett befintligt program för att använda lösenordslösa anslutningar i stället för en lösenordsbaserad lösning.
0) Förbereda arbetsmiljön
Använd först följande kommando för att konfigurera vissa miljövariabler.
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)
Ersätt platshållarna med följande värden, som används i hela artikeln:
<YOUR_RESOURCE_GROUP>
: Namnet på resursgruppen som resurserna finns i.<YOUR_DATABASE_SERVER_NAME>
: Namnet på din Azure SQL Database-server. Det ska vara unikt i Azure.
1) Konfigurera Azure SQL Database
1.1) Aktivera Microsoft Entra ID-baserad autentisering
Om du vill använda Microsoft Entra ID-åtkomst med Azure SQL Database bör du först ange Microsoft Entra-administratörsanvändaren. Endast en Microsoft Entra-administratörsanvändare kan skapa/aktivera användare för Microsoft Entra-ID-baserad autentisering.
Om du använder Azure CLI kör du följande kommando för att se till att det har tillräcklig behörighet:
az login --scope https://graph.microsoft.com/.default
Kör sedan följande kommando för att ange Microsoft Entra-administratören:
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
Det här kommandot anger Microsoft Entra-administratören till den aktuella inloggade användaren.
Kommentar
Du kan bara skapa en Microsoft Entra-administratör per Azure SQL Database-server. Om du väljer en annan skrivs den befintliga Microsoft Entra-administratören som har konfigurerats för servern över.
2) Migrera appkoden för att använda lösenordslösa anslutningar
Använd sedan följande steg för att uppdatera koden för att använda lösenordslösa anslutningar. Även om de är konceptuellt lika använder varje språk olika implementeringsinformation.
Lägg till följande referens till
azure-identity
paketet i projektet. Det här biblioteket innehåller alla entiteter som krävs för att implementera lösenordslösa anslutningar.<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.5.4</version> </dependency>
Aktivera Microsoft Entra-hanterad identitetsautentisering i JDBC URL.v Identifiera de platser i koden som för närvarande skapar en
java.sql.Connection
för att ansluta till Azure SQL Database. Uppdatera koden så att den matchar följande exempel:String url = "jdbc:sqlserver://$AZ_DATABASE_SERVER_NAME.database.windows.net:1433;databaseName=$AZ_DATABASE_NAME;authentication=ActiveDirectoryMSI;" Connection con = DriverManager.getConnection(url);
Ersätt de två
$AZ_DATABASE_SERVER_NAME
variablerna och en$AZ_DATABASE_NAME
variabel med de värden som du konfigurerade i början av den här artikeln.user
Ta bort ochpassword
från JDBC-URL:en.
3) Konfigurera Azure-värdmiljön
När programmet har konfigurerats för att använda lösenordslösa anslutningar kan samma kod autentiseras till Azure-tjänster när den har distribuerats till Azure. Ett program som distribueras till en Azure App Service-instans som har en tilldelad hanterad identitet kan till exempel ansluta till Azure Storage.
I det här avsnittet kör du två steg för att göra det möjligt för ditt program att köras i en Azure-värdmiljö på ett lösenordslöst sätt:
- Tilldela den hanterade identiteten för din Azure-värdmiljö.
- Tilldela roller till den hanterade identiteten.
Kommentar
Azure tillhandahåller även Service Connector, som kan hjälpa dig att ansluta din värdtjänst till SQL Server. Med Service Connector för att konfigurera din värdmiljö kan du utelämna steget att tilldela roller till din hanterade identitet eftersom Service Connector gör det åt dig. I följande avsnitt beskrivs hur du konfigurerar din Azure-värdmiljö på två sätt: en via Service Connector och den andra genom att konfigurera varje värdmiljö direkt.
Viktigt!
Service Connector-kommandon kräver Azure CLI 2.41.0 eller senare.
Tilldela den hanterade identiteten med hjälp av Azure-portalen
Följande steg visar hur du tilldelar en systemtilldelad hanterad identitet för olika webbvärdtjänster. Den hanterade identiteten kan säkert ansluta till andra Azure-tjänster med hjälp av de appkonfigurationer som du konfigurerade tidigare.
På huvudöversiktssidan för din Azure App Service-instans väljer du Identitet i navigeringsfönstret.
På fliken Systemtilldelat ser du till att ange fältet Status till på. En systemtilldelad identitet hanteras av Azure internt och hanterar administrativa uppgifter åt dig. Informationen och ID:t för identiteten visas aldrig i din kod.
Du kan också tilldela hanterad identitet i en Azure-värdmiljö med hjälp av Azure CLI.
Du kan tilldela en hanterad identitet till en Azure App Service-instans med kommandot az webapp identity assign , enligt följande exempel:
export AZ_MI_OBJECT_ID=$(az webapp identity assign \
--resource-group $AZ_RESOURCE_GROUP \
--name <service-instance-name> \
--query principalId \
--output tsv)
Tilldela roller till den hanterade identiteten
Bevilja sedan behörigheter till den hanterade identitet som du skapade för att få åtkomst till din SQL-databas.
Om du har anslutit dina tjänster med hjälp av Service Connector har föregående stegs kommandon redan tilldelat rollen, så du kan hoppa över det här steget.
Testa appen
När du har gjort dessa kodändringar kan du skapa och distribuera om programmet. Bläddra sedan till ditt värdbaserade program i webbläsaren. Din app bör kunna ansluta till Azure SQL-databasen. Tänk på att det kan ta flera minuter innan rolltilldelningarna sprids via din Azure-miljö. Ditt program är nu konfigurerat att köras både lokalt och i en produktionsmiljö utan att utvecklarna behöver hantera hemligheter i själva programmet.
Nästa steg
I den här självstudien har du lärt dig hur du migrerar ett program till lösenordslösa anslutningar.
Du kan läsa följande resurser för att utforska begreppen som beskrivs i den här artikeln mer ingående: