使用 AAD 用户凭据解析连接字符串时出错
Error parsing connection string with AAD user credentials
在 Azure 帐户上,我创建了一个 AAD 用户。
我创建了 Azure SQL 数据库并将新创建的 AAD 用户分配为服务器管理员。
服务器同时具有 AAD 帐户登录和 SQL 服务器登录。
我测试了使用 AAD 用户通过 SSMS 连接到服务器,它有效。我测试了将其他 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。
我明白了。我根本不应该使用 System.Data.SqlClient 库。 Microsoft.Data.SqlClient lib 中有新的 SqlConnection 实现并且它有效。
问题是 VS 2022 建议使用 System.Data.SqlClient。
在 Azure 帐户上,我创建了一个 AAD 用户。
我创建了 Azure SQL 数据库并将新创建的 AAD 用户分配为服务器管理员。
服务器同时具有 AAD 帐户登录和 SQL 服务器登录。
我测试了使用 AAD 用户通过 SSMS 连接到服务器,它有效。我测试了将其他 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。
我明白了。我根本不应该使用 System.Data.SqlClient 库。 Microsoft.Data.SqlClient lib 中有新的 SqlConnection 实现并且它有效。
问题是 VS 2022 建议使用 System.Data.SqlClient。