[英]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);
对于managed i.netity
,请执行以下步骤:
managed idenity
,请参阅此处的说明。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.