当前位置: 首页 > 知识库问答 >
问题:

无法创建使用服务主体映射到Azure AD标识的AzureSQL数据库用户

储阳曦
2023-03-14

作为Azure SQL数据库自动化解决方案的一部分,我尝试使用服务主体创建映射到Azure AD标识的Azure SQL数据库用户。

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

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

请查看以下详细信息:

  • 服务主体是Azure AD安全组的成员

服务主体在AzureSQL数据库中执行以下TSQL语句:

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个答案

田嘉澍
2023-03-14

我打开了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;

在大多数情况下,sid需要从AAD主体ObjectID生成。但是,对于服务主体/MSI,它需要来自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
 类似资料:
  • 获取以下代码的错误 我得到的输出错误是

  • 我正在处理一个奇怪的问题,即使用JDBC在AmazonRDS上连接MySQL数据库。我有两部不同的Android手机在同一个网络上运行相同的代码。一个人连接起来没有任何问题。另一个是给我以下的例外: 数据库只显示1个活动连接,所以我知道这不是因为打开的连接太多。我尝试重新启动服务器,但没有帮助。我使用的是MySQL JDBC Connector/J版本5.1.23。工作的手机运行的是Android

  • 问题内容: 我之前已经做过,但是没有通过脚本来完成。我必须在SQL Server(SQL身份验证)中创建一个新用户,并将该用户映射到数据库,然后使用SQL脚本将该用户的角色分配给该数据库。 我该怎么做? 问题答案: 尝试: 显然将“用户名”,“域\用户名”和数据库角色更改为您希望授予其权限和访问级别的用户名,例如“ db_datareader”

  • 问题内容: 我在下划线有数据库字段。我在camelcase中有实体字段。我不能改变任何一个。 是否有东西,也许是类级别的注释,我可以使用它默认将实体列名称注释设置为等效于驼峰式? 例如,我有一个这样的实体: 我梦dream以求: 问题答案: 您可以使用hibernate的命名策略。这种命名策略类描述了如何为给定的Java名称生成数据库名称。 看到: 命名策略示例 第二个例子 很好的oracle命名

  • 是否有什么东西,也许是一个类级别的注释,我可以用来默认实体列名注释到camelcase等价的? 例如,我有一个这样的实体: 我梦想着:

  • 我有一个本地MySQL社区服务器(8.0.11)运行在本地主机。 (我创建了一个数据库并为其注册了一个用户)。我可以使用以下终端查询访问数据库: 我能够访问服务器。 我使用Spring和JDBC使用以下代码做同样的事情: 但是我得到了以下错误: 在错误消息的底部,我得到一个提示,它是由空指针异常引起的,但我就是不知道什么可以在我的查询/代码中为空?一切都可以完美地与终端,只是不是与JDBC。