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

时间:2018-10-26 05:16:27

标签: azure azure-sql-database azure-active-directory azure-sql-server

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

结果是一条错误消息,提示:当前找不到主体'AAD_User_UPN_or_Group_Name'。请稍后重试。

可以使用我自己的用户帐户创建数据库用户,遵循完全相同的过程。

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

  • 服务主体是Azure AD安全组的成员
  • 该组设置为Azure SQL服务器的Active Directory管理员
  • 我自己的用户帐户也是该组的成员
  • 服务主体在Azure Active Directory中具有目录读取器目录写入器角色
  • 我自己的用户帐户是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语句时,该语句成功运行并创建了用户。

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

1 个答案:

答案 0 :(得分:1)

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

sql语句必须为:

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

需要从AAD主体ObjectID生成sid。这是一个生成sid值的powershell脚本:

param (
    [string]$objectId
)

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

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

return "0x" + $byteGuid