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


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

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

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

Драйвер mssql-python обеспечивает встроенную поддержку проверки подлинности Microsoft Entra, что упрощает подключение без пароля с минимальными изменениями кода.

Настройка База данных 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

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

Войдите в Azure с помощью Azure CLI с помощью следующей команды. Это работает в Windows, macOS и Linux.

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 назначается указанной учетной записи. Эта роль позволяет удостоверению считывать, записывать и изменять данные и схему базы данных. Дополнительные сведения о назначенных ролях см. в разделе "Предопределенная база данных".

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

Для миграции на беспарольные подключения с помощью mssql-python требуется только изменение строки подключения. Драйвер имеет встроенную поддержку режимов аутентификации Microsoft Entra, что устраняет необходимость ручной обработки токенов.

from os import getenv
from dotenv import load_dotenv
from mssql_python import connect

load_dotenv()

connection_string = getenv("AZURE_SQL_CONNECTIONSTRING")

def get_all():
    with connect(connection_string) as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM Persons")
        # Do something with the data
    return

Чтобы обновить указанную строку подключения (AZURE_SQL_CONNECTIONSTRING) для локальной разработки, создайте .env файл в папке проекта с форматом строки подключения без пароля с помощью ActiveDirectoryDefault проверки подлинности:

AZURE_SQL_CONNECTIONSTRING=Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;Authentication=ActiveDirectoryDefault

ActiveDirectoryDefault автоматически обнаруживает учетные данные из нескольких источников (Azure CLI, переменных среды, Visual Studio и т. д.) без необходимости интерактивного входа. Этот подход удобно для разработки, но добавляет задержку, так как он пытается использовать каждый источник учетных данных в последовательности.

Внимание

ActiveDirectoryDefault предназначен только для локальной разработки. Он пытается выполнить несколько методов проверки подлинности в последовательности, что добавляет задержку и может привести к непредвиденному поведению в рабочей среде. Для рабочих приложений используйте конкретный метод проверки подлинности для вашего сценария:

  • Azure App Service/Functions: использовать ActiveDirectoryMSI (управляемое удостоверение)
  • Интерактивный вход пользователя: ActiveDirectoryInteractive
  • Субъект-служба: использование ActiveDirectoryServicePrincipal

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

Запустите приложение локально и убедитесь, что подключения к База данных 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. Выберите подписку, используемую ранее для создания удостоверения.

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

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

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

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

Создайте пользователя базы данных 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, чтобы использовать формат строки подключения без пароля с ActiveDirectoryMSI проверкой подлинности для управляемого удостоверения.

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

Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;Authentication=ActiveDirectoryMSI

<database-server-name>— это имя сервера База данных SQL Azure и <database-name> имя База данных SQL Azure.

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

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

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

Примечание.

При использовании управляемого удостоверения, назначаемого пользователем, добавьте идентификатор клиента в строку подключения с помощью User Id параметра:

Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;Authentication=ActiveDirectoryMSI;User Id=<managed-identity-client-id>

Если параметр User Id не указан, драйвер использует управляемое удостоверение, которое назначено системой, если оно настроено.

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

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