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


Подключение к базе данных SQL Azure и выполнение запросов с использованием .NET и библиотеки Microsoft.Data.SqlClient

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

В этом кратком руководстве описывается подключение приложения к базе данных в База данных SQL Azure и выполнение запросов с помощью .NET и библиотеки Microsoft.Data.SqlClient. В этом кратком руководстве описан рекомендуемый подход без пароля для подключения к базе данных. Дополнительные сведения о подключениях без пароля можно узнать в парольном центре.

Предварительные условия

  • Подписка Azure
  • База данных SQL Azure, настроенная для проверки подлинности с помощью идентификатора Microsoft Entra (ранее — Azure Active Directory). Вы можете создать базу данных с помощью краткого руководства по созданию базы данных.
  • Последняя версия Azure CLI.
  • Visual Studio или более поздней версии с рабочей нагрузкой ASP.NET и веб-разработки .
  • .NET 7.0 или более поздней версии.

Настройка базы данных

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

  1. Для локальных подключений разработки убедитесь, что сервер настроен таким образом, чтобы разрешать подключение IP-адреса вашего локального компьютера, а также других служб Azure.

    • Перейдите на страницу "Сеть " сервера.

    • Переключите радиокнопку Выбранные сети, чтобы отобразить дополнительные параметры конфигурации.

    • Выберите Добавить IP-адрес клиента (xx.xx.xx.xx):, чтобы добавить правило брандмауэра, которое будет разрешать подключения с вашего локального IP-адреса IPv4. Кроме того, можно выбрать + Добавить правило брандмауэра, чтобы ввести конкретный IP-адрес.

    • Убедитесь, что установлен флажок разрешить службам и ресурсам Azure доступ к этому серверу .

      Снимок экрана: настройка правил брандмауэра.

      Предупреждение

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

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

  2. На сервере также должна быть включена проверка подлинности Microsoft Entra и назначена учетная запись администратора Microsoft Entra. Для локальной разработки учетная запись администратора Microsoft Entra должна быть такой, с которой вы также можете войти в Visual Studio или Azure CLI. Вы можете проверить, включена ли проверка подлинности Microsoft Entra на странице идентификатора Microsoft Entra вашего логического сервера.

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

  3. Если вы используете личную учетную запись Azure, убедитесь, что Microsoft Entra установлена и настроена для Azure SQL Database, чтобы назначить свою учетную запись администратором сервера. Если вы используете корпоративную учетную запись, Microsoft Entra ID, скорее всего, уже будет настроен для вас.

Создание проекта

Для следующих шагов создайте минимальное API .NET с помощью .NET CLI или Visual Studio 2022.

  1. В меню Visual Studio перейдите в раздел "Файл>>проекта..".

  2. В окне диалога введите ASP.NET в поле поиска шаблона проекта и выберите результат "ASP.NET Core Web API". Нажмите Далее в нижней части диалогового окна.

  3. В поле "Имя проекта" введите DotNetSQL. Оставьте в остальных полях значения по умолчанию и выберите Далее.

  4. Для платформы выберите .NET 7.0 и снимите флажок Использовать контроллеры (снимите флажок, чтобы использовать минимальные API). В этом кратком руководстве используется шаблон минимального API для упрощения создания и настройки точек завершения.

  5. Выберите Создать. Новый проект открывается в среде Visual Studio.

Добавление библиотеки Microsoft.Data.SqlClient

Чтобы подключиться к База данных SQL Azure с помощью .NET, установите Microsoft.Data.SqlClient. Этот пакет выступает в качестве поставщика данных для подключения к базам данных, выполнения команд и получения результатов.

Примечание.

Не забудьте установить Microsoft.Data.SqlClient и не System.Data.SqlClient. Microsoft.Data.SqlClient — это более новая версия клиентской библиотеки SQL, которая предоставляет дополнительные возможности.

  1. В окне Обозреватель решений щелкните правой кнопкой мыши узел зависимостей проекта и выберите пункт "Управление пакетами NuGet".

  2. В результирующем окне найдите SqlClient. Microsoft.Data.SqlClient Найдите результат и нажмите кнопку "Установить".

Настройка строки подключения

Для локальной разработки с подключениями без пароля к База данных SQL Azure добавьте следующий ConnectionStrings раздел в appsettings.json файл. Замените заполнители <database-server-name> и <database-name> собственными значениями.

"ConnectionStrings": {
    "AZURE_SQL_CONNECTIONSTRING": "Server=tcp:<database-server-name>.database.windows.net,1433;Initial Catalog=<database-name>;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication=\"Active Directory Default\";"
}

Строка подключения без пароля задает значение Authentication="Active Directory Default"конфигурации, которое указывает Microsoft.Data.SqlClient библиотеке подключаться к База данных SQL Azure с помощью класса с именемDefaultAzureCredential. DefaultAzureCredential позволяет устанавливать подключение к службам Azure без пароля и предоставляется библиотекой удостоверений Azure, от которой зависит клиентская библиотека SQL. DefaultAzureCredential поддерживает несколько методов проверки подлинности и определяет, какие из них следует использовать во время выполнения для разных сред.

Например, когда приложение запускается локально, DefaultAzureCredential выполняется аутентификация через пользователя, с которым вы вошли в Visual Studio, или через другие локальные инструменты, такие как Azure CLI. После развертывания приложения в Azure тот же код обнаруживает и применяет управляемое удостоверение, связанное с размещенным приложением, которое будет настроено позже. Обзор библиотеки удостоверений Azure объясняет порядок и места, где DefaultAzureCredential ищет учетные данные.

Примечание.

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

Добавление кода для подключения к База данных SQL Azure

Замените содержимое Program.cs файла следующим кодом, который выполняет следующие важные действия:

  • Извлекает строку подключения без пароля из appsettings.json
  • Создает таблицу Persons в базе данных во время запуска (только для сценариев тестирования)
  • Создает конечную точку HTTP GET для получения всех записей, хранящихся в Persons таблице
  • Создает конечную точку HTTP POST для добавления новых записей в таблицу Persons
using Microsoft.Data.SqlClient;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// For production scenarios, consider keeping Swagger configurations behind the environment check
// if (app.Environment.IsDevelopment())
// {
    app.UseSwagger();
    app.UseSwaggerUI();
// }

app.UseHttpsRedirection();

string connectionString = app.Configuration.GetConnectionString("AZURE_SQL_CONNECTIONSTRING")!;

try
{
    // Table would be created ahead of time in production
    using var conn = new SqlConnection(connectionString);
    conn.Open();

    var command = new SqlCommand(
        "CREATE TABLE Persons (ID int NOT NULL PRIMARY KEY IDENTITY, FirstName varchar(255), LastName varchar(255));",
        conn);
    using SqlDataReader reader = command.ExecuteReader();
}
catch (Exception e)
{
    // Table may already exist
    Console.WriteLine(e.Message);
}

app.MapGet("/Person", () => {
    var rows = new List<string>();

    using var conn = new SqlConnection(connectionString);
    conn.Open();

    var command = new SqlCommand("SELECT * FROM Persons", conn);
    using SqlDataReader reader = command.ExecuteReader();

    if (reader.HasRows)
    {
        while (reader.Read())
        {
            rows.Add($"{reader.GetInt32(0)}, {reader.GetString(1)}, {reader.GetString(2)}");
        }
    }

    return rows;
})
.WithName("GetPersons")
.WithOpenApi();

app.MapPost("/Person", (Person person) => {
    using var conn = new SqlConnection(connectionString);
    conn.Open();

    var command = new SqlCommand(
        "INSERT INTO Persons (firstName, lastName) VALUES (@firstName, @lastName)",
        conn);

    command.Parameters.Clear();
    command.Parameters.AddWithValue("@firstName", person.FirstName);
    command.Parameters.AddWithValue("@lastName", person.LastName);

    using SqlDataReader reader = command.ExecuteReader();
})
.WithName("CreatePerson")
.WithOpenApi();

app.Run();

Наконец, добавьте Person класс в нижней Program.cs части файла. Этот класс представляет одну запись в таблице базы данных Persons .

public class Person
{
    public required string FirstName { get; set; }
    public required string LastName { get; set; }
}

Локальный запуск и проверка приложения

Приложение готово к локальному тестированию. Убедитесь, что вы вошли в Visual Studio или Azure CLI с той же учетной записью, что и администратор базы данных.

  1. Нажмите кнопку запуска в верхней части Visual Studio, чтобы запустить проект API.

  2. На странице пользовательского интерфейса Swagger разверните метод POST и выберите "Попробовать".

  3. Измените пример JSON, чтобы добавить значения для имени first и last. Выберите "Выполнить" , чтобы добавить новую запись в базу данных. API возвращает успешный ответ.

    Снимок экрана: тестирование API.

  4. Разверните метод GET на странице пользовательского интерфейса Swagger и выберите "Попробовать". Выберите Execute, и возвращается человек, которого вы только что создали.

Развертывание в Службу приложений Azure

Приложение готово к развертыванию в Azure. Visual Studio может создать службу приложение Azure и развернуть приложение в одном рабочем процессе.

  1. Убедитесь, что приложение остановлено и сборка выполнена успешно.

  2. В окне Обозреватель решений Visual Studio щелкните правой кнопкой мыши узел проекта верхнего уровня и выберите "Опубликовать".

  3. В диалоговом окне публикации выберите Azure в качестве цели развертывания, а затем нажмите кнопку Далее.

  4. Для конкретной цели выберите службу приложений Azure (Windows), затем нажмите Далее.

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

    • Имя: оставьте значение по умолчанию.

    • Имя подписки: выберите подписку для развертывания.

    • Группа ресурсов: выберите "Создать " и создайте новую группу ресурсов с именем msdocs-dotnet-sql.

    • План размещения: выберите "Создать" , чтобы открыть диалоговое окно плана размещения. Оставьте значения по умолчанию и нажмите кнопку "ОК".

    • Нажмите кнопку "Создать", чтобы закрыть исходное диалоговое окно. Visual Studio создает ресурс Служба приложений в Azure.

      Снимок экрана: развертывание с помощью Visual Studio.

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

  7. На шаге Управление API установите флажок "Пропустить этот шаг" в нижней части и нажмите кнопку "Готово".

  8. На шаге "Готово" нажмите кнопку "Закрыть ", если диалоговое окно не закрывается автоматически.

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

По завершении развертывания Visual Studio запускает браузер для отображения размещенного приложения, но на этом этапе приложение работает неправильно в Azure. Для получения данных необходимо настроить безопасное подключение между Служба приложений и базой данных SQL.

Подключите Службу приложений Azure к базе данных SQL Azure

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

  1. Создайте управляемое удостоверение для Службы приложений. Библиотека Microsoft.Data.SqlClient, включенная в ваше приложение, автоматически обнаруживает управляемое удостоверение, так же как она обнаружила локального пользователя Visual Studio.
  2. Создайте пользователя базы данных SQL и свяжите его с управляемым удостоверением службы приложений.
  3. Назначьте роли SQL пользователю базы данных, разрешающим чтение, запись и потенциально другие разрешения.

Существует несколько средств, доступных для реализации следующих действий.

Соединитель служб — это средство, которое упрощает аутентификацию подключений между различными службами в Azure. Соединитель службы в настоящее время поддерживает подключение службы приложений к базе данных SQL через Azure CLI команду az webapp connection create sql. Эта одна команда выполняет три описанных выше шага.

az webapp connection create sql \
    -g <app-service-resource-group> \
    -n <app-service-name> \
    --tg <database-server-resource-group> \
    --server <database-server-name> \
    --database <database-name> \
    --system-identity

Изменения, внесенные коннектором службы, можно проверить в параметрах службы приложений.

  1. Перейдите на страницу Идентификация для Службы приложений. На вкладке "Назначаемая системой" статус должен быть установлен на "Вкл". Это значение означает, что управляемое удостоверение, назначенное системой, было включено для вашего приложения.

  2. Перейдите на страницу конфигурации для службы приложений. На вкладке "Строки подключения" должна появиться строка подключения с именем AZURE_SQL_CONNECTIONSTRING. Выберите текст Нажмите, чтобы показать значение, чтобы увидеть созданную строку подключения без пароля. Имя этой строки подключения совпадает с именем, которое вы настроили в приложении, поэтому оно будет обнаружено автоматически при запуске в Azure.

Внимание

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

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

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

  1. Нажмите кнопку «Обзор» в верхней части страницы обзора Службы приложений, чтобы открыть корневой URL-адрес вашего приложения.

  2. Добавьте путь /swagger/index.html к URL-адресу, чтобы загрузить ту же самую тестовую страницу Swagger, которую вы использовали локально.

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

Совет

Если во время тестирования вы получаете ошибку внутреннего сервера 500, это может быть связано с конфигурациями сети базы данных. Убедитесь, что логический сервер настроен с параметрами, описанными в разделе "Настройка базы данных ".

Теперь приложение подключено к База данных SQL Azure как в локальных, так и в размещенных средах.

Очистка ресурсов

После завершения работы с База данных SQL Azure удалите ресурс, чтобы избежать непредвиденных затрат.

  1. В строке поиска портала Azure найдите Azure SQL и выберите соответствующий результат.

  2. Найдите и выберите базу данных в списке баз данных.

  3. На странице "Обзор" вашей базы данных SQL Azure выберите Удалить.

  4. На странице Azure, где необходимо подтвердить желание удалить... введите имя базы данных, чтобы подтвердить, а затем выберите "Удалить".