【问题标题】:Accessing Azure SQL from Web App with EF Core, Docker and System Assigned Identity使用 EF Core、Docker 和系统分配的标识从 Web 应用程序访问 Azure SQL
【发布时间】:2020-11-30 03:49:50
【问题描述】:

我正在尝试从在 Linux 下运行 docker 容器的 Azure Web 应用程序访问无服务器 Azure SQL 数据库。该容器是使用最新 EF Core 的 .Net Core 3.1 Web 应用程序。 Web 应用程序已配置为使用系统分配的身份。

对于 SQL 用户,我使用以下 PS 脚本获取 SID,其中对象 ID 是系统分配的身份对象 ID:

$principal = Get-AzADServicePrincipal -ObjectId $objectId
 
foreach ($byte in $principal.ApplicationId.ToByteArray())
{
    $byteGuid += [System.String]::Format("{0:X2}", $byte)
}
 
$sid = "0x" + $byteGuid

然后,我使用这样的 SID 在数据库中创建了具有 db_owner 角色的用户...
'CREATE USER [AppUser] WITH DEFAULT_SCHEMA=[dbo], SID=' + '$(AppSiD)' + ' , TYPE = E' ...类似于此处描述的过程:
https://blog.bredvid.no/handling-azure-managed-identity-access-to-azure-sql-in-an-azure-devops-pipeline-1e74e1beb10b

我还使用以下方法更新了 EF 实例:
https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi#modify-aspnet-core

当应用程序尝试访问数据库时,会引发以下异常:
Microsoft.Data.SqlClient.SqlException (0x80131904): Login failed for user '<token-identified principal>'.
EDIT 我不认为 SQL 用户会导致问题,因为无论用户是否存在都会发生错误。

我更愿意修复上述错误,但如果有其他方法可以在不使用 SQL 用户的情况下连接到数据库,我将不胜感激。

谢谢

编辑
由于在发布时链接已关闭,因此详细说明了 SQL 用户流程

【问题讨论】:

  • 不确定 SID 是什么意思(链接已损坏),但您应该像这样添加 SQL 用户:CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
  • 嗨@silent,感谢您的回复。我无法以这种方式添加用户,因为它没有连接到 AD:Principal 'AppUser' could not be created. Only connections established with Active Directory accounts can create other Active Directory users.我已经用更多信息更新了这个问题
  • 我刚刚发现不管是否添加用户都会报错
  • 如果您的 SQL 数据库没有启用 AAD,这将无法开始
  • 感谢@silent 使用您的原始脚本添加用户。如果您想将其添加为答案,我会将其标记为答案。干杯

标签: sql-server azure entity-framework docker .net-core


【解决方案1】:

首先你需要让你的 SQL 数据库AAD-enabled。然后您可以像这样为您的托管身份创建一个用户

CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;

当然,然后根据需要为该用户分配权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2016-02-18
    相关资源
    最近更新 更多