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