Dela via


Migrera ett Node.js-program för att använda lösenordslösa anslutningar med Azure SQL Database

Gäller för:Azure SQL Database

Programbegäranden till Azure SQL Database måste autentiseras. Även om det finns flera alternativ för autentisering till Azure SQL Database bör du prioritera lösenordslösa anslutningar i dina program när det är möjligt. Traditionella autentiseringsmetoder som använder lösenord eller hemliga nycklar skapar säkerhetsrisker och komplikationer. Gå till hubben för lösenordslösa anslutningar för Azure-tjänster för att lära dig mer om fördelarna med att flytta till lösenordslösa anslutningar.

I följande självstudie beskrivs hur du migrerar ett befintligt Node.js-program för att ansluta till Azure SQL Database för att använda lösenordslösa anslutningar i stället för en lösning för användarnamn och lösenord.

Konfigurera Azure SQL Database

Lösenordslösa anslutningar använder Microsoft Entra-autentisering för att ansluta till Azure-tjänster, inklusive Azure SQL Database. Med Microsoft Entra-autentisering kan du hantera identiteter på en central plats för att förenkla behörighetshanteringen. Läs mer om hur du konfigurerar Microsoft Entra-autentisering för din Azure SQL Database:

För den här migreringsguiden kontrollerar du att du har en Microsoft Entra-administratör tilldelad till din Azure SQL Database.

  1. Gå till Sidan Microsoft Entra på den logiska servern.

  2. Välj Ange administratör för att öppna den utfällbara menyn Microsoft Entra ID .

  3. I den utfällbara menyn Microsoft Entra ID söker du efter den användare som du vill tilldela som administratör.

  4. Välj användaren och välj Välj.

    A screenshot showing how to enable Microsoft Entra admin.

Konfigurera din lokala utvecklingsmiljö

Lösenordslösa anslutningar kan konfigureras för att fungera för både lokala och Azure-värdbaserade miljöer. I det här avsnittet använder du konfigurationer för att tillåta enskilda användare att autentisera till Azure SQL Database för lokal utveckling.

Logga in på Azure

För lokal utveckling kontrollerar du att du är inloggad med samma Azure AD-konto som du vill använda för att få åtkomst till Azure SQL Database. Du kan autentisera via populära utvecklingsverktyg, till exempel Azure CLI eller Azure PowerShell. De utvecklingsverktyg som du kan autentisera med varierar mellan olika språk.

Logga in på Azure via Azure CLI med följande kommando:

az login

Skapa en databasanvändare och tilldela roller

Skapa en användare i Azure SQL Database. Användaren bör motsvara det Azure-konto som du använde för att logga in lokalt i avsnittet Logga in på Azure .

  1. I Azure-portalen bläddrar du till din SQL-databas och väljer Frågeredigeraren (förhandsversion).

  2. Välj Fortsätt som <your-username> till höger på skärmen för att logga in på databasen med ditt konto.

  3. Kör följande T-SQL-kommandon i frågeredigerarens vy:

    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
    

    A screenshot showing how to use the Azure Query editor.

    När du kör de här kommandona tilldelas rollen SQL DB-deltagare till det angivna kontot. Med den här rollen kan identiteten läsa, skriva och ändra databasens data och schema. Mer information om tilldelade roller finns i Roller med fast databas.

Uppdatera konfigurationen för lokal anslutning

  1. Skapa miljöinställningar för ditt program.

    AZURE_SQL_SERVER=<YOURSERVERNAME>.database.windows.net
    AZURE_SQL_DATABASE=<YOURDATABASENAME>
    AZURE_SQL_PORT=1433
    
  2. Befintlig programkod som ansluter till Azure SQL Database med hjälp av Node.js SQL Driver – omständlig fortsätter att fungera med lösenordslösa anslutningar med mindre ändringar. Om du vill använda en användartilldelad hanterad identitet skickar du authentication.type egenskaperna och options.clientId .

    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`);
    

    Miljövariabeln AZURE_CLIENT_ID skapas senare i den här självstudien.

Testa appen

Kör appen lokalt och kontrollera att anslutningarna till Azure SQL Database fungerar som förväntat. Tänk på att det kan ta flera minuter innan ändringar av Azure-användare och roller sprids via Din Azure-miljö. Ditt program är nu konfigurerat att köras lokalt utan att utvecklare behöver hantera hemligheter i själva programmet.

Konfigurera Azure-värdmiljön

När appen har konfigurerats för att använda lösenordslösa anslutningar lokalt kan samma kod autentiseras till Azure SQL Database när den har distribuerats till Azure. I avsnitten nedan beskrivs hur du konfigurerar ett distribuerat program för att ansluta till Azure SQL Database med hjälp av en hanterad identitet. Hanterade identiteter tillhandahåller en automatiskt hanterad identitet i Microsoft Entra-ID (tidigare Azure Active Directory) för program som ska användas när de ansluter till resurser som stöder Microsoft Entra-autentisering. Läs mer om hanterade identiteter:

Skapa den hanterade identiteten

Skapa en användartilldelad hanterad identitet med hjälp av Azure-portalen eller Azure CLI. Ditt program använder identiteten för att autentisera till andra tjänster.

  1. Överst i Azure-portalen söker du efter hanterade identiteter. Välj resultatet Hanterade identiteter .
  2. Välj + Skapa överst på översiktssidan för hanterade identiteter .
  3. På fliken Grundläggande anger du följande värden:
    • Prenumeration: Välj önskad prenumeration.
    • Resursgrupp: Välj önskad resursgrupp.
    • Region: Välj en region nära din plats.
    • Namn: Ange ett igenkännbart namn för din identitet, till exempel MigrationIdentity.
  4. Välj Granska + skapa längst ned på sidan.
  5. När verifieringen har slutförts väljer du Skapa. Azure skapar en ny användartilldelad identitet.

När resursen har skapats väljer du Gå till resurs för att visa information om den hanterade identiteten.

A screenshot showing how to create a managed identity using the Azure portal.

Associera den hanterade identiteten med din webbapp

Konfigurera webbappen så att den använder den användartilldelade hanterade identitet som du skapade.

Slutför följande steg i Azure-portalen för att associera den användartilldelade hanterade identiteten med din app. Samma steg gäller för följande Azure-tjänster:

  • Azure Spring Apps
  • Azure Container Apps
  • Virtuella Azure-datorer
  • Azure Kubernetes Service
  • Gå till översiktssidan för webbappen.
  1. Välj Identitet i det vänstra navigeringsfältet.

  2. På sidan Identitet växlar du till fliken Användartilldelad .

  3. Välj + Lägg till för att öppna den utfällbara menyn Lägg till användartilldelad hanterad identitet .

  4. Välj den prenumeration som du använde tidigare för att skapa identiteten.

  5. Sök efter MigrationIdentity efter namn och välj den i sökresultaten.

  6. Välj Lägg till för att associera identiteten med din app.

    A screenshot showing how to assign a managed identity.

Skapa en databasanvändare för identiteten och tilldela roller

Skapa en SQL-databasanvändare som mappar tillbaka till den användartilldelade hanterade identiteten. Tilldela nödvändiga SQL-roller till användaren så att appen kan läsa, skriva och ändra data och schemat för databasen.

  1. I Azure-portalen bläddrar du till din SQL-databas och väljer Frågeredigeraren (förhandsversion).

  2. Välj Fortsätt som <username> till höger på skärmen för att logga in på databasen med ditt konto.

  3. Kör följande T-SQL-kommandon i frågeredigerarens vy:

    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
    

    A screenshot showing how to use the Azure Query editor to create a SQL user for a managed identity.

    När du kör dessa kommandon tilldelas rollen SQL DB-deltagare till den användartilldelade hanterade identiteten. Med den här rollen kan identiteten läsa, skriva och ändra databasens data och schema.


Viktigt!

Var försiktig när du tilldelar databasanvändarroller i företagsproduktionsmiljöer. I dessa scenarier bör appen inte utföra alla åtgärder med en enda upphöjd identitet. Försök att implementera principen om minsta behörighet genom att konfigurera flera identiteter med specifika behörigheter för specifika uppgifter.

Du kan läsa mer om hur du konfigurerar databasroller och säkerhet på följande resurser:

Skapa en appinställning för klient-ID för hanterad identitet

Om du vill använda den användartilldelade hanterade identiteten skapar du en AZURE_CLIENT_ID miljövariabel och anger den lika med klient-ID:t för den hanterade identiteten. Du kan ange den här variabeln i avsnittet Konfiguration i din app i Azure-portalen. Du hittar klient-ID:t i avsnittet Översikt över den hanterade identitetsresursen i Azure-portalen.

Spara ändringarna och starta om programmet om det inte gör det automatiskt.

Om du behöver använda en systemtilldelad hanterad identitet utelämnar du egenskapen options.clientId . Du måste fortfarande skicka egenskapen authentication.type .

const config = {
  server,
  port,
  database,
  authentication: {
    type: 'azure-active-directory-default'
  },
  options: {
    encrypt: true
  }
};

Testa programmet

Testa din app för att se till att allt fortfarande fungerar. Det kan ta några minuter innan alla ändringar sprids via Din Azure-miljö.

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: