无法使用服务主体创建映射到 Azure AD 身份的 Azure SQL 数据库用户

Can't Create Azure SQL Database Users Mapped to Azure AD Identities using Service Principal

作为 Azure SQL 数据库自动化解决方案的一部分,我尝试使用 服务主体[=创建 Azure SQL 数据库用户 mapped to Azure AD Identities 40=].

结果是一条错误消息:此时找不到主体 'AAD_User_UPN_or_Group_Name'。请稍后再试。

可以使用我自己的用户帐户创建数据库用户,步骤完全相同。

请在下面找到更多详细信息:

  • 服务主体是 Azure AD 安全组的成员
  • 组被设置为 Azure SQL 服务器的 Active Directory 管理员
  • 我自己的用户帐户也是该组的成员
  • 服务主体在 Azure Active Directory
  • 中具有 Directory ReaderDirectory Writer 角色
  • 我自己的用户帐户是普通会员,在 Azure Active Directory 中没有任何管理员角色

服务主体在 Azure SQL 数据库中执行以下 T-SQL 语句:

CREATE USER [AAD_User_UPN_or_Group_Name] FROM EXTERNAL PROVIDER;

返回的错误信息为:

Principal 'AAD_User_UPN_or_Group_Name' could not be found at this time. Please try again later.

当我自己的用户账号触发同样的T-SQL语句时,运行成功,创建用户。

非常感谢您的帮助或建议。

我在 Azure 支持下开了一张票,他们给了我这个解决方案。

sql 语句需要是:

 -- type X for AAD Group
create user [myAADGroupName] with sid = <sid>, type = X;

-- type E for AAD User or Service Principal/MSI
create user [myAADUserName] with sid = <sid>, type = E;

大多数情况下需要从 AAD Principal ObjectID 生成 sid。但是,对于 Service Principals/MSIs,它需要来自 AppId。这是生成 sid 值的 powershell 脚本:

param (
    [string]$objectIdOrAppId
)

[guid]$guid = [System.Guid]::Parse($objectIdOrAppId)

foreach ($byte in $guid.ToByteArray())
{
    $byteGuid += [System.String]::Format("{0:X2}", $byte)
}

return "0x" + $byteGuid