【发布时间】: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