Имена входа и пользователи Microsoft Entra с неуникными отображаемыми именами

Применимо к:База данных SQL Azure Управляемый экземпляр SQL Azure

Использование субъекта-службы с отображаемым именем, не уникальным в идентификаторе Microsoft Entra, приводит к ошибкам при создании имени входа или пользователя в SQL Azure. Например, если приложение myapp не уникально, при выполнении следующей инструкции T-SQL может возникнуть следующая ошибка:

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 
Msg 33131, Level 16, State 1, Line 4 
Principal 'myapp' has a duplicate display name. Make the display name unique in Azure Active Directory and execute this statement again. 

Расширение WITH OBJECT_ID

Эта ошибка возникает из-за того, что идентификатор Microsoft Entra позволяет дублировать отображаемые имена для приложения Microsoft Entra (субъект-служба), а SQL Azure требует уникальных имен для создания имен входа и пользователей Microsoft Entra. Чтобы устранить эту проблему, инструкция языка определения данных (DDL) для создания имен входа и пользователей была расширена, чтобы включить идентификатор объекта ресурса Azure с предложением WITH OBJECT_ID .

Примечание.

Расширение WITH OBJECT_ID в настоящее время находится в общедоступной предварительной версии.

Большинство неуниковых отображаемых имен в идентификаторе Microsoft Entra связаны с субъектами-службами, хотя иногда имена групп также могут быть неуникаными. Имена субъектов-пользователей Microsoft Entra уникальны, так как два пользователя не могут иметь одного и того же участника-пользователя. Однако регистрацию приложения (субъект-службу) можно создать с отображаемым именем, совпадающим с именем участника-пользователя.

Если отображаемое имя субъекта-службы не является дубликатом, следует использовать значение по умолчанию или CREATE USER инструкцииCREATE LOGIN. Расширение WITH OBJECT_ID находится в общедоступной предварительной версии и является элементом устранения неполадок, реализованным для использования с неуникными субъектами-службами. Использование его с уникальным субъектом-службой не требуется. WITH OBJECT_ID Использование расширения для субъекта-службы без добавления суффикса будет выполнено успешно, но не будет очевидно, какой субъект-служба создан для входа или пользователя. Рекомендуется создать псевдоним с помощью суффикса для уникальной идентификации субъекта-службы. Расширение WITH OBJECT_ID не поддерживается для SQL Server.

T-SQL создает синтаксис входа и пользователя для неуниковых отображаемых имен

CREATE LOGIN [login_name] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'objectid'
CREATE USER [user_name] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'objectid'

С помощью расширения DDL T-SQL для создания имен входа или пользователей с идентификатором объекта можно избежать ошибки 33131 , а также указать псевдоним для входа или пользователя, созданного с идентификатором объекта. Например, в следующем примере будет создано имя входа myapp4466e с помощью идентификатора 4466e2f8-0fea-4c61-a470-xxxxxxxxxxxxобъекта приложения.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = '4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx' 
  • Чтобы выполнить приведенный выше запрос, указанный идентификатор объекта должен существовать в клиенте Microsoft Entra, где находится ресурс SQL Azure. CREATE В противном случае команда завершится ошибкой с сообщением об ошибке:Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission.
  • Имя входа или пользователя должно содержать исходное имя субъекта-службы, расширенное определяемым пользователем суффиксом при использовании инструкции или CREATE USER инструкцииCREATE LOGIN. Как рекомендуется, суффикс может включать начальную часть своего идентификатора объекта. Например, myapp2ba6c для идентификатора 2ba6c0a3-cda4-4878-a5ca-xxxxxxxxxxxxобъекта. Однако можно также определить настраиваемый суффикс. Формирование суффикса из идентификатора объекта не требуется.

Это соглашение об именовании рекомендуется явно связать пользователя базы данных или войти обратно в объект в идентификаторе Microsoft Entra.

Примечание.

Псевдоним соответствует спецификации T-SQL, sysnameвключая максимальную длину 128 символов. Рекомендуется ограничить суффикс до первых 5 символов идентификатора объекта.

Отображаемое имя субъекта-службы в идентификаторе Microsoft Entra не синхронизировано с именем входа в базу данных или псевдонимом пользователя. Выполнение CREATE LOGIN или CREATE USER не влияет на отображаемое имя на портале Azure. Аналогичным образом изменение отображаемого имени идентификатора Microsoft Entra не повлияет на имя входа в базу данных или псевдоним пользователя.

Определение пользователя, созданного для приложения

Для неуниковых субъектов-служб важно убедиться, что псевдоним Microsoft Entra привязан к правильному приложению. Чтобы проверка, что пользователь был создан для правильного субъекта-службы (приложения):

  1. Получите идентификатор приложения или идентификатор объекта группы Microsoft Entra от пользователя, созданного в База данных SQL. См. следующие запросы:

    • Чтобы получить идентификатор приложения субъекта-службы от созданного пользователя, выполните следующий запрос:

      SELECT CAST(sid as uniqueidentifier) ApplicationID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c' 
      

      Пример результата:

      Screenshot of SSMS output for the Application ID.

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

      SELECT SID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c' 
      

      Пример результата:

      Screenshot of SSMS output for the SID of the application.

    • Чтобы получить идентификатор объекта группы Microsoft Entra из созданного пользователя, выполните следующий запрос:

      SELECT CAST(sid as uniqueidentifier) ObjectID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b' 
      

      Пример результата:

      Screenshot of SSMS output for the Object ID of the Microsoft Entra group.

      Чтобы проверка идентификатор безопасности группы Microsoft Entra, созданной пользователем, выполните следующий запрос:

      SELECT SID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b' 
      

      Пример результата:

      Screenshot of SSMS output for the SID of the group.

    • Чтобы получить идентификатор объекта и идентификатор приложения с помощью PowerShell, выполните следующую команду:

      Get-AzADApplication -DisplayName "myapp2ba6c"
      
  2. Перейдите к портал Azure, а в корпоративном приложении или ресурсе группы Microsoft Entra проверка идентификатор приложения или идентификатор объекта соответственно. Просмотрите, соответствует ли он одному, полученному из приведенного выше запроса.

Примечание.

При создании пользователя из субъекта-службы идентификатор объекта требуется при использовании WITH OBJECT_ID предложения с CREATE инструкцией T-SQL. Это отличается от идентификатора приложения, возвращаемого при попытке проверить псевдоним в SQL Azure. С помощью этого процесса проверки можно определить субъект-службу или группу, связанную с псевдонимом SQL в идентификаторе Microsoft Entra ID, и предотвратить возможные ошибки при создании имен входа или пользователей с идентификатором объекта.

Поиск правильного идентификатора объекта

Сведения об идентификаторе объекта субъекта-службы см. в разделе "Объект субъекта-службы". Идентификатор объекта субъекта-службы, указанный рядом с именем приложения в портал Azure в корпоративных приложениях.

Предупреждение

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