Не удается создать пользователей базы данных sql azure, сопоставленных с удостоверениями azure ad, с помощью субъекта-службы

В рамках решения по автоматизации базы данных SQL Azure я пытаюсь создать пользователей базы данных 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 запускается моей собственной учетной записью пользователя, он выполняется успешно, и пользователь создается.

Мы высоко ценим вашу помощь или предложения.

Что за принципал службы, зарегистрированный вами или созданный MSI? Если он создается функцией MSI, я также могу воспроизвести проблему с учетной записью не администратора. Если приложение зарегистрировано, я не могу его воспроизвести.

Tom Sun - MSFT 30.10.2018 10:52

Привет, @TomSun, большое спасибо за помощь. Заказчик услуги зарегистрирован мной. У субъекта-службы есть учетные данные сертификата. Он получает токен доступа из Azure и затем использует этот токен для открытия соединения с базой данных SQL Azure, а затем выполняет сценарий T-SQL внутри базы данных.

Ding Liu 01.11.2018 02:16

У меня такая же проблема :(

Peter 27.11.2018 16:50
5
3
2 212
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я открыл заявку в службу поддержки 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 необходимо сгенерировать на основе ObjectID участника AAD. Однако для руководителей служб / MSI он должен исходить из AppId. Вот сценарий PowerShell для генерации значения sid:

param (
    [string]$objectIdOrAppId
)

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

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

return "0x" + $byteGuid

Что, если я хочу добавить управляемую личность в качестве пользователя?

Rookian 10.06.2020 18:04

@Rookian Я обновил свой ответ информацией о принципах обслуживания (включая управляемые удостоверения службы)

jschmitter 14.07.2020 17:53

как получить сервиспринцип приложения

Tiju John 15.07.2020 16:27

@TijuJohn Создайте MSI, следуя инструкциям здесь. Затем вы можете запросить объект-субъект-службу, используя az ad sp show --id <objectId>, чтобы получить appId.

jschmitter 15.07.2020 19:09

@jschmitter Большое спасибо. Моя проблема решена вашим ответом.

Ding Liu 13.12.2020 03:03

Другие вопросы по теме