Sql server 使用EF Core、Docker和系统分配的标识从Web应用程序访问Azure SQL

Sql server 使用EF Core、Docker和系统分配的标识从Web应用程序访问Azure SQL,sql-server,azure,entity-framework,docker,.net-core,Sql Server,Azure,Entity Framework,Docker,.net Core,我正在尝试从运行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.Appl

我正在尝试从运行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],默认模式为[dbo],SID='+'$(AppSiD)'+',TYPE=E'
…与此处描述的过程类似:

我还使用以下方法更新了EF实例:

当应用程序尝试访问数据库时,会引发以下异常:
Microsoft.Data.SqlClient.SqlException(0x80131904):用户“”登录失败。

编辑我不认为是SQL用户导致了问题,因为无论用户是否存在,错误都会发生

我更愿意修复上面的错误,但是如果有一种不使用SQL用户而连接到DB的替代方法,我将非常感谢您的建议

谢谢

编辑

详细介绍了SQL用户过程,因为在发布时链接已关闭

首先,您需要创建SQL数据库。然后您可以像这样为您的托管标识创建一个用户

CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
从外部提供者创建用户[];

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

不确定SID是什么意思(链接已断开),但您应该这样添加SQL用户:
从外部提供程序创建用户[]
Hi@silent,谢谢你的回复。我无法以这种方式添加用户,因为它未连接到AD:
无法创建主体“AppUser”。只有与Active Directory帐户建立的连接才能创建其他Active Directory用户。
我已使用更多信息更新了问题。我刚刚发现,如果SQL数据库未启用AAD,则无论用户是否已添加,都会发生错误,以Thank@silent开始添加用户并使用您的原始脚本工作时,这将不起作用。如果你想添加它作为答案,我会将其标记为答案。干杯