Ошибка синтаксического анализа строки подключения с учетными данными пользователя AAD

В учетной записи Azure я создал пользователя AAD.
Я создал базу данных Azure SQL и назначил вновь созданного пользователя AAD администратором сервера.
На сервере есть вход в учетную запись AAD и вход в SQL Server.
Я протестировал подключение к серверу через SSMS с использованием пользователя AAD, все работает. Я протестировал добавление других пользователей AAD в базу данных, это работает (в SSMS).

Сейчас я тестирую подключение к базе данных из консольного приложения.
Я хочу подключиться к базе данных, используя учетные данные пользователя AAD.
Консольное приложение должно работать без входа пользователя в систему, поэтому я хочу жестко закодировать пользователя в строке подключения.

Моя строка подключения:

      string connectionString = @"Server=tcp:test-server.database.windows.net,1433; Authentication=Active Directory Password; Database=mydb; User Id=aad_user_name@myaccount.onmicrosoft.com; Password=mypassword";

Консоль ломается, как только она пытается создать SqlConnection, из того, что я вижу при разборе строки подключения.

      System.ArgumentException: Keyword not supported: 'authentication'.
   at System.Data.Common.DbConnectionOptions.ParseInternal(Dictionary`2 parsetable, String connectionString, Boolean buildChain, Dictionary`2 synonyms, Boolean firstKey)
   at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Dictionary`2 synonyms)
   at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
   at System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key)
   at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
   at System.Data.SqlClient.SqlConnection..ctor(String connectionString)
   at MyApp.Program.TestDb() in C:\path\Program.cs:line 28

Файл проекта:

      <Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Data.SqlClient" Version="4.1.0" />
    <PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
  </ItemGroup>

</Project>

Итак, я использую последнюю версию .NET 6, Microsoft.Data.SqlClient и System.Data.SqlClient.

1 ответ

Я понял. Я вообще не должен был использовать System.Data.SqlClient lib. В библиотеке Microsoft.Data.SqlClient появилась новая реализация SqlConnection, и она сработала.

Проблема заключалась в том, что VS 2022 предлагал использовать System.Data.SqlClient.