Поделиться через


Перенос приложения Node.js на использование бессерверных подключений с База данных SQL Azure

Применимо к: База данных SQL Azure

Запросы приложений к База данных SQL Azure должны проходить проверку подлинности. Хотя существует несколько вариантов проверки подлинности в База данных SQL Azure, вы должны по возможности определить приоритеты подключений без пароля в приложениях. Традиционные методы проверки подлинности, использующие пароли или секретные ключи, создают риски безопасности и осложнения. Ознакомьтесь с бессерверными подключениями для центра служб Azure, чтобы узнать больше о преимуществах перехода на бессерверные подключения.

В следующем руководстве объясняется, как перенести существующее приложение Node.js для подключения к База данных SQL Azure использовать бессерверные подключения вместо решения имени пользователя и пароля.

Настройка База данных SQL Azure

Подключения без пароля используют проверку подлинности Microsoft Entra для подключения к службам Azure, включая База данных SQL Azure. Проверка подлинности Microsoft Entra позволяет управлять удостоверениями в центральном расположении, чтобы упростить управление разрешениями. Дополнительные сведения о настройке проверки подлинности Microsoft Entra для База данных SQL Azure:

В этом руководстве по миграции убедитесь, что администратор Microsoft Entra назначен вашему База данных SQL Azure.

  1. Перейдите на страницу Microsoft Entra логического сервера.

  2. Выберите "Задать администратора", чтобы открыть всплывающее меню идентификатора Microsoft Entra.

  3. В всплывающем меню идентификатора Microsoft Entra id найдите пользователя, которого вы хотите назначить администратором.

  4. Выберите пользователя и нажмите кнопку "Выбрать".

    Снимок экрана: включение администратора Microsoft Entra.

Настройка локальной среды разработки.

Бессерверные подключения можно настроить для работы как для локальных, так и для размещенных в Azure сред. В этом разделе описано, как применить конфигурации, чтобы разрешить отдельным пользователям проходить проверку подлинности в База данных SQL Azure для локальной разработки.

Вход в Azure

Для локальной разработки убедитесь, что вы вошли с той же учетной записью Azure AD, которую вы хотите использовать для доступа к База данных SQL Azure. Вы можете пройти проверку подлинности с помощью популярных средств разработки, таких как Azure CLI или Azure PowerShell. Средства разработки, с помощью которых можно пройти проверку подлинности на разных языках.

Войдите в Azure с помощью Azure CLI, выполнив следующую команду:

az login

Создание пользователя базы данных и назначение ролей

Создайте пользователя в База данных SQL Azure. Пользователь должен соответствовать учетной записи Azure, используемой для локального входа в разделе входа в Azure .

  1. В портал Azure перейдите к базе данных SQL и выберите редактор запросов (предварительная версия).

  2. Нажмите кнопку "Продолжить" в <your-username> правой части экрана, чтобы войти в базу данных с помощью учетной записи.

  3. В представлении редактора запросов выполните следующие команды 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
    

    Снимок экрана: использование редактора запросов Azure.

    При выполнении этих команд роль участника базы данных SQL назначается указанной учетной записи. Эта роль позволяет удостоверению считывать, записывать и изменять данные и схему базы данных. Дополнительные сведения о назначенных ролях см. в разделе "Предопределенная база данных".

Обновление конфигурации локального подключения

  1. Создайте параметры среды для приложения.

    AZURE_SQL_SERVER=<YOURSERVERNAME>.database.windows.net
    AZURE_SQL_DATABASE=<YOURDATABASENAME>
    AZURE_SQL_PORT=1433
    
  2. Существующий код приложения, который подключается к База данных SQL Azure с помощью драйвера SQL Node.js , неумный продолжает работать с бессерверными подключениями с незначительными изменениями. Чтобы использовать управляемое удостоверение, назначаемое пользователем, передайте authentication.type и 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 application 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`);
    

    Переменная AZURE_CLIENT_ID среды создается далее в этом руководстве.

Тестирование приложения

Запустите приложение локально и убедитесь, что подключения к База данных SQL Azure работают должным образом. Помните, что для изменения пользователей и ролей Azure может потребоваться несколько минут. Теперь приложение настроено на локальное выполнение без необходимости управлять секретами в самом приложении.

Настройка среды размещения Azure

После локального использования бессерверных подключений приложение может пройти проверку подлинности в База данных SQL Azure после развертывания в Azure. В следующих разделах объясняется, как настроить развернутое приложение для подключения к База данных SQL Azure с помощью управляемого удостоверения. Управляемые удостоверения предоставляют автоматическое управляемое удостоверение в идентификаторе Microsoft Entra (прежнее название — Azure Active Directory) для приложений, используемых при подключении к ресурсам, поддерживающим проверку подлинности Microsoft Entra. Дополнительные сведения об управляемых удостоверениях:

Создание управляемого удостоверения

Создайте управляемое удостоверение, назначаемое пользователем, с помощью портал Azure или Azure CLI. Приложение использует удостоверение для проверки подлинности в других службах.

  1. В верхней части портал Azure найдите управляемые удостоверения. Выберите результат управляемых удостоверений.
  2. Нажмите кнопку " + Создать " в верхней части страницы обзора управляемых удостоверений.
  3. На вкладке "Основные сведения" введите следующие значения:
    • Подписка: выберите нужную подписку.
    • Группа ресурсов: выберите нужную группу ресурсов.
    • Регион: выберите ближайший регион.
    • Имя: введите распознаваемое имя удостоверения, например MigrationIdentity.
  4. В нижней части страницы выберите Review + create (Проверить и создать).
  5. По завершении проверки нажмите кнопку "Создать". Azure создает новое удостоверение, назначаемое пользователем.

После создания ресурса выберите "Перейти к ресурсу ", чтобы просмотреть сведения об управляемом удостоверении.

Снимок экрана: создание управляемого удостоверения с помощью портал Azure.

Связывание управляемого удостоверения с веб-приложением

Настройте веб-приложение для использования созданного управляемого удостоверения, назначаемого пользователем.

Выполните следующие действия в портал Azure, чтобы связать управляемое удостоверение, назначаемое пользователем, с приложением. Эти же действия применяются к следующим службам Azure:

  • Azure Spring Apps
  • Приложения-контейнеры Azure
  • Виртуальные машины Azure
  • Служба Azure Kubernetes
  • Перейдите на страницу обзора веб-приложения.
  1. Выберите удостоверение в области навигации слева.

  2. На странице "Удостоверение" перейдите на вкладку "Назначаемый пользователем".

  3. Нажмите кнопку +Добавить, чтобы открыть всплывающее окно добавления управляемого удостоверения, назначаемого пользователем.

  4. Выберите подписку, используемую ранее для создания удостоверения.

  5. Найдите идентификатор migrationIdentity по имени и выберите его из результатов поиска.

  6. Нажмите кнопку "Добавить ", чтобы связать удостоверение с приложением.

    Снимок экрана: назначение управляемого удостоверения.

Создание пользователя базы данных для удостоверения и назначение ролей

Создайте пользователя базы данных SQL, который сопоставляется с управляемым удостоверением, назначенным пользователем. Назначьте пользователям необходимые роли SQL, чтобы разрешить приложению читать, записывать и изменять данные и схему базы данных.

  1. В портал Azure перейдите к базе данных SQL и выберите редактор запросов (предварительная версия).

  2. Нажмите кнопку "Продолжить" в <username> правой части экрана, чтобы войти в базу данных с помощью учетной записи.

  3. В представлении редактора запросов выполните следующие команды 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
    

    Снимок экрана: использование редактора запросов Azure для создания пользователя SQL для управляемого удостоверения.

    При выполнении этих команд роль участника базы данных SQL назначается управляемому удостоверению, назначаемого пользователем. Эта роль позволяет удостоверению считывать, записывать и изменять данные и схему базы данных.


Внимание

Используйте осторожность при назначении ролей пользователей базы данных в рабочих средах предприятия. В этих сценариях приложение не должно выполнять все операции с использованием одного удостоверения с повышенными привилегиями. Попробуйте реализовать принцип наименьшей привилегии, настроив несколько удостоверений с определенными разрешениями для определенных задач.

Дополнительные сведения о настройке ролей базы данных и безопасности см. в следующих ресурсах:

Создание параметра приложения для идентификатора клиента управляемого удостоверения

Чтобы использовать управляемое удостоверение, назначаемое пользователем, создайте AZURE_CLIENT_ID переменную среды и задайте для него идентификатор клиента управляемого удостоверения. Эту переменную можно задать в разделе "Конфигурация" приложения в портал Azure. Идентификатор клиента можно найти в разделе "Обзор" ресурса управляемого удостоверения в портал Azure.

Сохраните изменения и перезапустите приложение, если это не делается автоматически.

Если необходимо использовать управляемое удостоверение, назначаемое системой, опустите options.clientId свойство. Вам по-прежнему authentication.type нужно передать свойство.

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

Тестирование приложения

Проверьте приложение, чтобы убедиться, что все еще работает. Для распространения всех изменений через среду Azure может потребоваться несколько минут.

Следующие шаги

Из этого учебника вы узнали, как выполнить переход приложения на подключение без пароля.

Дополнительные сведения о понятиях, описанных в этой статье, см. в следующих ресурсах: