Не удается создать пользователей базы данных SQL Azure, сопоставленных с удостоверениями Azure AD с использованием принципала службы - PullRequest
0 голосов
/ 26 октября 2018

В рамках решения по автоматизации баз данных Azure SQL я пытаюсь создать пользователей базы данных SQL Azure , сопоставленных с удостоверениями Azure AD , с использованием субъекта службы .

Результатом является сообщение об ошибке: Участник 'AAD_User_UPN_or_Group_Name' не может быть найден в это время. Пожалуйста, попробуйте позже.

Пользователи базы данных могут быть созданы с использованием моей собственной учетной записи, следуя точно такой же процедуре.

Более подробную информацию вы найдете ниже:

  • Участник службы является членом группы безопасности Azure AD
  • Группа установлена ​​как администратор Active Directory SQL-сервера Azure
  • Моя учетная запись также является членом этой группы
  • Участник службы имеет роль читателя каталога и роль писателя каталога в Azure Active Directory
  • Моя собственная учетная запись является постоянным участником без роли администратора в Azure Active Directory

Участник службы выполняет следующую инструкцию T-SQL в базе данных SQL Azure:

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 голосов
/ 15 мая 2019

Я открыл заявку с поддержкой 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

sid должен быть сгенерирован из основного идентификатора объекта AAD. Вот скрипт powershell для генерации значения sid:

param (
    [string]$objectId
)

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

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

return "0x" + $byteGuid
...