gpt4 book ai didi

azure - 设置-AzSqlServerActiveDirectoryAdministrator : Cannot find the Azure Active Directory object 'service_principal_name'

转载 作者:行者123 更新时间:2023-12-03 01:00:15 27 4
gpt4 key购买 nike

我正在运行以下命令

$sp = az ad sp show --id $env:ARM_CLIENT_ID --query '{objectId: objectId, displayName: displayName}'
az sql server ad-admin create --resource-group data-eastus2 `
--server-name data-eastus2-sqlsvr `
--display-name $sp.name `
--object-id $sp.id

无需向服务主体提供任何 Graph API 权限即可完美运行。尝试使用 Az Powershell 模块模仿此功能,运行以下命令

Set-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName 'data-eastus2'  -ServerName 'data-eastus2-sqlsvr' -DisplayName $sp.name -ObjectId $sp.id

产生异常

Set-AzSqlServerActiveDirectoryAdministrator:找不到 Azure Active Directory 对象'服务主体名称'。请确保您授权的用户或组已在当前订阅的 Azure Active Directory。要获取 Azure Active Directory 组的列表,请使用 Get-AzADGroup,或者若要获取 Azure Active Directory 用户列表,请使用 Get-AzADUser。行:1 字符:1+ Set-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName '数据 ...+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Set-AzSqlServer...ryAdministrator],ArgumentException + FullQualifiedErrorId:Microsoft.Azure.Commands.Sql.ServerActiveDirectoryAdministrator.Cmdlet.SetAzureSqlServerActiveDirectoryAdministrator

提供 Azure Active Directory Graph - Directory.Read.All 和 Microsoft Graph - Directory.Read.AllAPI 权限没有帮助。

最佳答案

Azure CLI az sql server ad-admin create 不会调用 Azure AD Graph 来验证您传递的参数,它只会调用 REST API Server Azure AD Administrators - Create Or Update设置管理员。即使你传递了错误的 --display-name--object-id(也需要是 Guid 格式),该命令也会工作正常。您可以使用 --debug 参数检查详细信息。

enter image description here

Azure powershell Set-AzSqlServerActiveDirectoryAdministrator 将调用 Azure AD Graph getObjectsByObjectIds: Get objects from a list of object IDs验证对象是否正确。如果结果的类型不是 Azure AD 安全组,它将进一步调用 Get a user 。因此,如果结果的类型是服务主体,它也会调用 Get a user ,那么就会导致这个问题。您可以使用 fiddler 工具来捕获请求,如下所示。

enter image description here

enter image description here

因此,如果您想使用Set-AzSqlServerActiveDirectoryAdministrator,您可以在 Azure AD 中创建一个安全组(不是 Office 组),并将服务主体添加到该组中,然后将该组添加到 sql server admin,如 @alphaz18 的回复中所述。

$sp = Get-AzADServicePrincipal -ObjectId "<object-id>"
$group = Get-AzADGroup -DisplayName "joysec"
Add-AzADGroupMember -TargetGroupObjectId $group.Id -MemberObjectId $sp.Id
Set-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName "<groupname>" -ServerName "<servername>" -DisplayName $group.DisplayName -ObjectId $group.Id

注意:要运行上面的脚本,您需要给出一个AD 应用程序的 Azure Active Directory Graph(不是 Microsoft Graph)的 Directory.ReadWrite.All 应用程序权限,并且有一定的延迟,等待一段时间再测试。 enter image description here

enter image description here

关于azure - 设置-AzSqlServerActiveDirectoryAdministrator : Cannot find the Azure Active Directory object 'service_principal_name' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61690756/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com