Поделиться через


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

Применимо к: SQL Server 2025 (17.x) Azure Sql DatabaseAzure Sql Managed InstanceMicrosoft Fabric

В этой статье описано, как использовать синтаксис T-SQL Object_ID для создания имен входа Microsoft Entra и пользователей с неуникными именами в Базе данных SQL Azure, базе данных SQL Fabric, Управляемом экземпляре SQL Azure и SQL Server 2025 и более поздних версиях.

Замечание

Вы можете создавать пользователей в базе данных SQL Fabric, но не входить в систему.

Обзор

Идентификатор Microsoft Entra поддерживает проверку подлинности для субъектов-служб. Однако использование субъекта-службы с отображаемым именем, которое не является уникальным в идентификаторе Microsoft Entra, приводит к ошибкам при создании имени входа или пользователя в SQL Server, Базе данных SQL Azure и Управляемом экземпляре SQL Azure.

Например, если приложение myapp не уникально, может возникнуть следующая ошибка:

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. 

При попытке выполнить следующую инструкцию T-SQL:

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 

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

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

Замечание

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

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

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

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

С помощью расширения поддержки T-SQL DDL для создания имен входа или пользователей с идентификатором объекта можно избежать ошибки 33131 , а также указать псевдоним для входа или пользователя, созданного с идентификатором объекта. Например, следующий пример T-SQL создает имя входа myapp4466e с помощью идентификатора aaaaaaaa-0000-1111-2222-bbbbbbbbbbbbобъекта приложения.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' 
  • Чтобы выполнить этот запрос T-SQL, указанный идентификатор объекта должен существовать в клиенте Microsoft Entra, где находится ресурс SQL. CREATE В противном случае команда завершится ошибкой с сообщением об ошибке:Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission.
  • Имя входа или имя пользователя должно содержать исходное имя основного участника службы, расширенное определяемым пользователем суффиксом при использовании оператора CREATE LOGIN или CREATE USER. В качестве наилучшей практики, суффикс может включать начальную часть своего идентификатора объекта. Например, myapp2ba6c для идентификатора bbbbbbbb-1111-2222-3333-ccccccccccccобъекта. Однако можно также определить настраиваемый суффикс. Формирование суффикса из идентификатора объекта не требуется.

Рекомендуется использовать это соглашение об именовании для явного связывания пользователя базы данных или логина с объектом в Microsoft Entra ID.

Замечание

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

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

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

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

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

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

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

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

      Снимок экрана: выходные данные запроса SQL Server Management Studio (SSMS) для идентификатора приложения.

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

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

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

      Снимок экрана: выходные данные запроса SQL Server Management Studio (SSMS) для идентификатора безопасности приложения.

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

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

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

      Снимок экрана: выходные данные запроса SQL Server Management Studio (SSMS) для идентификатора объекта группы Microsoft Entra.

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

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

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

      Снимок экрана с результатами запроса в SQL Server Management Studio (SSMS) для SID группы.

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

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

Замечание

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

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

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

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

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