繁体   English   中英

Azure 托管标识:无密码连接字符串到 Azure SQL 数据库连接错误

[英]Azure managed identity: Passwordless connection string to Azure SQL database connection error

Microsoft Azure 使用其托管身份功能为 Azure SQL 数据库提供安全的无凭据连接字符串。 此功能使用户无需使用密码即可安全地连接到其 Azure SQL 数据库。 它还允许他们在密钥保管库中存储和管理他们的秘密,密钥保管库是 Microsoft 提供的安全存储服务。 此外,它还允许他们安全地访问第三方 API,而不必担心其凭据的安全性。

这很好地说明了当前的情况: 在此处输入图像描述

问题是,当尝试访问本地运行的 API(没有 App 服务)时,尝试访问托管在 Azure 中的 SQL 服务器数据库时,请求在尝试对数据库进行身份验证时返回错误,似乎在返回此错误时: SqlException: Login failed for user '<token-identified principal>'.

尝试使用 SSMS 连接到数据库时也出现错误:

在此处输入图像描述 在此处输入图像描述

我想知道在测试它在打包到容器中并部署到 App Service 时是否有效之前,我应该采取什么步骤让它在本地工作。

这是我在 Program.cs 中的代码:

var keyVaultEndpoint = builder.Configuration.GetSection("KeyVault").GetValue<string>("VaultURI");

if (!string.IsNullOrEmpty(keyVaultEndpoint))
{
    var azureServiceTokenProvider = new AzureServiceTokenProvider();
    var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
    builder.Configuration.AddAzureKeyVault(keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
}


// Get the migrations assembly name using reflection
var migrationsAssemblyName = typeof(Program).GetTypeInfo().Assembly.GetName().Name;

// Add the database context, in this case Sql Server + Entity Framework Core DbContext
builder.Services.AddSqlServerDatabase(builder.Configuration.GetConnectionString("AzureDbConnection"), migrationsAssemblyName);

这是我的 appsettings.json 配置: 在此处输入图像描述

对于managed i.netity ,请执行以下步骤:

  • 在您的 web 应用程序中启用managed idenity ,请参阅此处的说明。
  • 在你的 Azure SQL 允许 Azure 服务访问资源。 这里
  • 最后一步是根据您在 SQL 数据库中的身份分配权限。 运行以下命令:
CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
GO

根据需要添加适当的角色。 这里[<identity-name>]是您的托管身份的名称。

您可以在此处找到更详细的说明

我使用以下防火墙规则创建了一个 Azure SQL 数据库:

在此处输入图像描述

在此处输入图像描述

我为 sql 服务器设置了管理员:

在此处输入图像描述

我尝试在 SSMS 中不使用密码连接到数据库

在此处输入图像描述

我有登录页面

在此处输入图像描述

我选择了密码选项并输入了成功连接的密码。

在此处输入图像描述

根据您的错误,您输入的用户不是 AAD 服务器管理员。 创建一个基于 Azure AD 的包含数据库用户(拥有数据库的服务器管理员除外,使用 Azure AD 身份连接到数据库。向用户添加权限。

如果您想使用无密码连接字符串连接到 Azure SQL 数据库。 参考这个它可能对你有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM