我有一个托管在 Azure 应用服务中的 Web 应用程序(在 .NET 4.6.1 上运行),该应用程序使用实体框架通过 SQL Server 身份验证(用户名/密码)连接到 Azure SQL Server,继承自
DbContext
的
System.Data.Entity
类命名空间。
我计划使用 Active Directory 服务主体身份验证模式。因此,我将连接字符串修改为
Data Source= servername.database.windows.net; Encrypt=True;
Initial Catalog= dbname; Authentication=Active Directory Service Principal;
User Id=servicePrincipalID; Password=servicePrincipalPassword;
修改后的字符串会引发错误
System.ArgumentException:“密钥‘身份验证’的值无效。”
尝试打开连接时。许多在线文章/资源使用
Microsoft.EntityFrameworkCore
程序集对 .NET Core 应用程序进行了明确的集成,但对于在 .NET Framework 上运行的应用程序却没有太多内容。
如果您可以指导我们,请告诉我们。
On Microsoft Documentation 指出应按如下所示构建连接字符串:
string ConnectionString = @"Server=demo.database.windows.net; Authentication=Active Directory Service Principal; Encrypt=True; Database=testdb; User Id=AppId; Password=secret";
using (SqlConnection conn = new SqlConnection(ConnectionString)) {
conn.Open();
}
请注意,这种类型的身份验证需要 Entity Framework 4.6+ 上的 Microsoft.Data.SqlClient 版本 2.0.0+。
此外,您需要在 Azure SQL 数据库中创建与服务主体身份对应的用户。例如:
create user [servicePrincipalID] from external provider;
最后,确保设置所需的应用程序注册。