Een Node.js-toepassing migreren om wachtwoordloze verbindingen 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 Node.js-toepassing migreert om verbinding te maken met Azure SQL Database om verbindingen zonder wachtwoord te gebruiken in plaats van een oplossing voor gebruikersnaam en wachtwoord.
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
Maak omgevingsinstellingen voor uw toepassing.
AZURE_SQL_SERVER=<YOURSERVERNAME>.database.windows.net AZURE_SQL_DATABASE=<YOURDATABASENAME> AZURE_SQL_PORT=1433
Bestaande toepassingscode die verbinding maakt met Azure SQL Database met behulp van het SQL-stuurprogramma Node.js. Tedious blijft werken met wachtwoordloze verbindingen met kleine wijzigingen. Als u een door de gebruiker toegewezen beheerde identiteit wilt gebruiken, geeft u de
authentication.type
enoptions.clientId
eigenschappen door.import sql from 'mssql'; // Environment settings - no user or password const server = process.env.AZURE_SQL_SERVER; const database = process.env.AZURE_SQL_DATABASE; const port = parseInt(process.env.AZURE_SQL_PORT); // Passwordless configuration const config = { server, port, database, authentication: { type: 'azure-active-directory-default', }, options: { encrypt: true, clientId: process.env.AZURE_CLIENT_ID // <----- user-assigned managed identity } }; // Existing applicaton code export default class Database { config = {}; poolconnection = null; connected = false; constructor(config) { this.config = config; console.log(`Database: config: ${JSON.stringify(config)}`); } async connect() { try { console.log(`Database connecting...${this.connected}`); if (this.connected === false) { this.poolconnection = await sql.connect(this.config); this.connected = true; console.log('Database connection successful'); } else { console.log('Database already connected'); } } catch (error) { console.error(`Error connecting to database: ${JSON.stringify(error)}`); } } async disconnect() { try { this.poolconnection.close(); console.log('Database connection closed'); } catch (error) { console.error(`Error closing database connection: ${error}`); } } async executeQuery(query) { await this.connect(); const request = this.poolconnection.request(); const result = await request.query(query); return result.rowsAffected[0]; } } const databaseClient = new Database(config); const result = await databaseClient.executeQuery(`select * from mytable where id = 10`);
De
AZURE_CLIENT_ID
omgevingsvariabele wordt verderop in deze zelfstudie gemaakt.
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:
- Overzicht zonder wachtwoord
- Aanbevolen procedures voor beheerde identiteit
- Beheerde identiteiten in Microsoft Entra voor Azure SQL
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:
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.
Als u een door het systeem toegewezen beheerde identiteit wilt gebruiken, laat u de options.clientId
eigenschap weg. U moet de authentication.type
eigenschap nog steeds doorgeven.
const config = {
server,
port,
database,
authentication: {
type: 'azure-active-directory-default'
},
options: {
encrypt: true
}
};
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: