Sql server 使用EF Core、Docker和系统分配的标识从Web应用程序访问Azure SQL
我正在尝试从运行Linux下docker容器的azure Web应用程序访问无服务器azure SQL数据库。该容器是一个使用最新EF Core的.Net Core 3.1 web应用程序。web应用已配置为使用系统分配的标识 对于SQL用户,我使用以下PS脚本获取SID,其中对象ID是系统分配的标识对象ID: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
$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开始添加用户并使用您的原始脚本工作时,这将不起作用。如果你想添加它作为答案,我会将其标记为答案。干杯