Udostępnij za pośrednictwem


Migrowanie aplikacji Node.js do używania połączeń bez hasła z usługą Azure SQL Database

Dotyczy: Azure SQL Database

Żądania aplikacji do usługi Azure SQL Database muszą być uwierzytelnione. Chociaż istnieje wiele opcji uwierzytelniania w usłudze Azure SQL Database, należy określić priorytety połączeń bez hasła w aplikacjach, jeśli to możliwe. Tradycyjne metody uwierzytelniania korzystające z haseł lub kluczy tajnych tworzą zagrożenia bezpieczeństwa i komplikacje. Odwiedź centrum usług platformy Azure bez hasła, aby dowiedzieć się więcej o zaletach przechodzenia do połączeń bez hasła.

W poniższym samouczku wyjaśniono, jak przeprowadzić migrację istniejącej aplikacji Node.js w celu nawiązania połączenia z usługą Azure SQL Database w celu używania połączeń bez hasła zamiast nazwy użytkownika i rozwiązania haseł.

Konfigurowanie usługi Azure SQL Database

Połączenia bez hasła używają uwierzytelniania Entra firmy Microsoft do łączenia się z usługami platformy Azure, w tym z usługą Azure SQL Database. Uwierzytelnianie firmy Microsoft Entra umożliwia zarządzanie tożsamościami w centralnej lokalizacji w celu uproszczenia zarządzania uprawnieniami. Dowiedz się więcej o konfigurowaniu uwierzytelniania usługi Microsoft Entra dla usługi Azure SQL Database:

W tym przewodniku migracji upewnij się, że masz administratora firmy Microsoft Entra przypisanego do usługi Azure SQL Database.

  1. Przejdź do strony Microsoft Entra serwera logicznego.

  2. Wybierz pozycję Ustaw administratora , aby otworzyć menu wysuwane Identyfikator entra firmy Microsoft.

  3. W menu wysuwany Microsoft Entra ID wyszukaj użytkownika, który chcesz przypisać jako administrator.

  4. Wybierz użytkownika i wybierz pozycję Wybierz.

    Zrzut ekranu przedstawiający sposób włączania administratora firmy Microsoft Entra.

Konfigurowanie lokalnego środowiska deweloperskiego

Połączenia bez hasła można skonfigurować tak, aby działały zarówno w środowiskach lokalnych, jak i hostowanych na platformie Azure. W tej sekcji zastosujesz konfiguracje, aby umożliwić poszczególnym użytkownikom uwierzytelnianie w usłudze Azure SQL Database na potrzeby programowania lokalnego.

Logowanie do platformy Azure

W przypadku programowania lokalnego upewnij się, że zalogowaliśmy się przy użyciu tego samego konta usługi Azure AD, którego chcesz użyć do uzyskiwania dostępu do usługi Azure SQL Database. Możesz uwierzytelnić się za pomocą popularnych narzędzi programistycznych, takich jak interfejs wiersza polecenia platformy Azure lub program Azure PowerShell. Narzędzia programistyczne, za pomocą których można uwierzytelniać się w różnych językach.

Zaloguj się do platformy Azure za pomocą interfejsu wiersza polecenia platformy Azure przy użyciu następującego polecenia:

az login

Tworzenie użytkownika bazy danych i przypisywanie ról

Tworzenie użytkownika w usłudze Azure SQL Database. Użytkownik powinien odpowiadać kontu platformy Azure użytego do logowania lokalnego w sekcji Logowanie do platformy Azure .

  1. W witrynie Azure Portal przejdź do bazy danych SQL i wybierz pozycję Edytor zapytań (wersja zapoznawcza).

  2. Wybierz pozycję Kontynuuj po <your-username> prawej stronie ekranu, aby zalogować się do bazy danych przy użyciu konta.

  3. W widoku edytora zapytań uruchom następujące polecenia języka T-SQL:

    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
    

    Zrzut ekranu przedstawiający sposób korzystania z edytora zapytań platformy Azure.

    Uruchomienie tych poleceń powoduje przypisanie roli Współautor bazy danych SQL do określonego konta. Ta rola umożliwia tożsamości odczytywanie, zapisywanie i modyfikowanie danych i schematu bazy danych. Aby uzyskać więcej informacji na temat przypisanych ról, zobacz Stałe role bazy danych.

Aktualizowanie konfiguracji połączenia lokalnego

  1. Utwórz ustawienia środowiska dla aplikacji.

    AZURE_SQL_SERVER=<YOURSERVERNAME>.database.windows.net
    AZURE_SQL_DATABASE=<YOURDATABASENAME>
    AZURE_SQL_PORT=1433
    
  2. Istniejący kod aplikacji łączący się z usługą Azure SQL Database przy użyciu sterownika Node.js SQL — żmudny nadal pracuje z połączeniami bez hasła z drobnymi zmianami. Aby użyć tożsamości zarządzanej przypisanej przez użytkownika, przekaż authentication.type właściwości i 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`);
    

    Zmienna środowiskowa zostanie utworzona AZURE_CLIENT_ID w dalszej części tego samouczka.

Testowanie aplikacji

Uruchom aplikację lokalnie i sprawdź, czy połączenia z usługą Azure SQL Database działają zgodnie z oczekiwaniami. Należy pamiętać, że propagowanie zmian użytkowników i ról platformy Azure za pośrednictwem środowiska platformy Azure może potrwać kilka minut. Aplikacja jest teraz skonfigurowana do uruchamiania lokalnie bez konieczności zarządzania wpisami tajnymi w samej aplikacji.

Konfigurowanie środowiska hostingu platformy Azure

Po skonfigurowaniu aplikacji do lokalnego używania połączeń bez hasła ten sam kod może uwierzytelniać się w usłudze Azure SQL Database po jej wdrożeniu na platformie Azure. W poniższych sekcjach opisano sposób konfigurowania wdrożonej aplikacji w celu nawiązania połączenia z usługą Azure SQL Database przy użyciu tożsamości zarządzanej. Tożsamości zarządzane zapewniają automatyczną tożsamość zarządzaną w usłudze Microsoft Entra ID (dawniej Azure Active Directory) dla aplikacji używanych podczas nawiązywania połączenia z zasobami obsługującymi uwierzytelnianie firmy Microsoft Entra. Dowiedz się więcej o tożsamościach zarządzanych:

Tworzenie tożsamości zarządzanej

Utwórz tożsamość zarządzaną przypisaną przez użytkownika przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure. Aplikacja używa tożsamości do uwierzytelniania w innych usługach.

  1. W górnej części witryny Azure Portal wyszukaj pozycję Tożsamości zarządzane. Wybierz wynik tożsamości zarządzanych.
  2. Wybierz pozycję + Utwórz w górnej części strony przeglądu tożsamości zarządzanych .
  3. Na karcie Podstawy wprowadź następujące wartości:
    • Subskrypcja: wybierz żądaną subskrypcję.
    • Grupa zasobów: wybierz żądaną grupę zasobów.
    • Region: wybierz region w pobliżu lokalizacji.
    • Nazwa: wprowadź rozpoznawalną nazwę tożsamości, taką jak MigrationIdentity.
  4. Wybierz pozycję Przejrzyj i utwórz w dolnej części strony.
  5. Po zakończeniu sprawdzania poprawności wybierz pozycję Utwórz. Platforma Azure tworzy nową tożsamość przypisaną przez użytkownika.

Po utworzeniu zasobu wybierz pozycję Przejdź do zasobu , aby wyświetlić szczegóły tożsamości zarządzanej.

Zrzut ekranu przedstawiający sposób tworzenia tożsamości zarządzanej przy użyciu witryny Azure Portal.

Kojarzenie tożsamości zarządzanej z aplikacją internetową

Skonfiguruj aplikację internetową tak, aby korzystała z utworzonej tożsamości zarządzanej przypisanej przez użytkownika.

Wykonaj następujące kroki w witrynie Azure Portal, aby skojarzyć tożsamość zarządzaną przypisaną przez użytkownika z aplikacją. Te same kroki dotyczą następujących usług platformy Azure:

  • Azure Spring Apps
  • Azure Container Apps
  • Maszyny wirtualne platformy Azure
  • Azure Kubernetes Service
  • Przejdź do strony przeglądu aplikacji internetowej.
  1. Wybierz pozycję Tożsamość w obszarze nawigacji po lewej stronie.

  2. Na stronie Tożsamość przejdź do karty Przypisane przez użytkownika.

  3. Wybierz pozycję + Dodaj, aby otworzyć okno wysuwane Dodawanie tożsamości zarządzanej przypisanej przez użytkownika.

  4. Wybierz subskrypcję użytą wcześniej do utworzenia tożsamości.

  5. Wyszukaj pozycję MigrationIdentity według nazwy i wybierz ją z wyników wyszukiwania.

  6. Wybierz pozycję Dodaj , aby skojarzyć tożsamość z aplikacją.

    Zrzut ekranu przedstawiający sposób przypisywania tożsamości zarządzanej.

Tworzenie użytkownika bazy danych dla tożsamości i przypisywanie ról

Utwórz użytkownika bazy danych SQL, który mapuje z powrotem na tożsamość zarządzaną przypisaną przez użytkownika. Przypisz użytkownikowi niezbędne role SQL, aby umożliwić aplikacji odczytywanie, zapisywanie i modyfikowanie danych i schematu bazy danych.

  1. W witrynie Azure Portal przejdź do bazy danych SQL i wybierz pozycję Edytor zapytań (wersja zapoznawcza).

  2. Wybierz pozycję Kontynuuj po <username> prawej stronie ekranu, aby zalogować się do bazy danych przy użyciu konta.

  3. W widoku edytora zapytań uruchom następujące polecenia języka T-SQL:

    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
    

    Zrzut ekranu przedstawiający sposób tworzenia użytkownika SQL dla tożsamości zarządzanej przy użyciu edytora zapytań platformy Azure.

    Uruchomienie tych poleceń powoduje przypisanie roli Współautor bazy danych SQL do tożsamości zarządzanej przypisanej przez użytkownika. Ta rola umożliwia tożsamości odczytywanie, zapisywanie i modyfikowanie danych i schematu bazy danych.


Ważne

Należy zachować ostrożność podczas przypisywania ról użytkowników bazy danych w środowiskach produkcyjnych przedsiębiorstwa. W tych scenariuszach aplikacja nie powinna wykonywać wszystkich operacji przy użyciu jednej tożsamości z podwyższonym poziomem uprawnień. Spróbuj zaimplementować zasadę najniższych uprawnień, konfigurując wiele tożsamości z określonymi uprawnieniami dla określonych zadań.

Więcej informacji na temat konfigurowania ról bazy danych i zabezpieczeń można uzyskać w następujących zasobach:

Tworzenie ustawienia aplikacji dla identyfikatora klienta tożsamości zarządzanej

Aby użyć tożsamości zarządzanej przypisanej przez użytkownika, utwórz zmienną AZURE_CLIENT_ID środowiskową i ustaw ją równą identyfikatorowi klienta tożsamości zarządzanej. Tę zmienną można ustawić w sekcji Konfiguracja aplikacji w witrynie Azure Portal. Identyfikator klienta można znaleźć w sekcji Przegląd zasobu tożsamości zarządzanej w witrynie Azure Portal.

Zapisz zmiany i uruchom ponownie aplikację, jeśli nie zostanie to wykonane automatycznie.

Jeśli musisz użyć tożsamości zarządzanej przypisanej przez system, pomiń options.clientId właściwość . Nadal musisz przekazać authentication.type właściwość .

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

Testowanie aplikacji

Przetestuj aplikację, aby upewnić się, że wszystko nadal działa. Propagacja wszystkich zmian w środowisku platformy Azure może potrwać kilka minut.

Następne kroki

W tym samouczku przedstawiono sposób migrowania aplikacji do połączeń bez hasła.

Aby zapoznać się z pojęciami omówionymi w tym artykule, zapoznaj się z następującymi zasobami: