Identyfikatory logowania i użytkownicy firmy Microsoft z nazwami wyświetlanymi bez nazwy

Dotyczy: Azure SQL DatabaseAzure SQL Managed Instance

Użycie jednostki usługi z nazwą wyświetlaną, która nie jest unikatowa w identyfikatorze Entra firmy Microsoft, prowadzi do błędów podczas tworzenia identyfikatora logowania lub użytkownika w usłudze Azure SQL. Jeśli na przykład aplikacja myapp nie jest unikatowa, podczas wykonywania następującej instrukcji języka T-SQL może wystąpić następujący błąd:

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 Rozszerzenie

Ten błąd występuje, ponieważ identyfikator Entra firmy Microsoft zezwala na zduplikowane nazwy wyświetlane dla aplikacji Entra firmy Microsoft (jednostki usługi), podczas gdy usługa Azure SQL wymaga unikatowych nazw w celu utworzenia identyfikatorów logowania i użytkowników usługi Microsoft Entra. Aby rozwiązać ten problem, instrukcja Języka definicji danych (DDL) w celu utworzenia identyfikatorów logowania i użytkowników została rozszerzona w celu uwzględnienia identyfikatora obiektu zasobu platformy Azure z klauzulą WITH OBJECT_ID .

Uwaga

Rozszerzenie WITH OBJECT_ID jest obecnie w publicznej wersji zapoznawczej.

Większość nazw wyświetlanych innych niż w identyfikatorze Entra firmy Microsoft jest związana z jednostkami usługi, ale czasami nazwy grup mogą być również inne niż. Główne nazwy użytkowników firmy Microsoft Entra są unikatowe, ponieważ dwóch użytkowników nie może mieć tego samego podmiotu zabezpieczeń użytkownika. Można jednak utworzyć rejestrację aplikacji (jednostkę usługi) przy użyciu nazwy wyświetlanej, która jest taka sama jak główna nazwa użytkownika.

Jeśli nazwa wyświetlana jednostki usługi nie jest duplikatem, należy użyć domyślnej CREATE LOGIN instrukcji lub CREATE USER . Rozszerzenie WITH OBJECT_ID jest w publicznej wersji zapoznawczej i jest elementem naprawy rozwiązywania problemów zaimplementowanym do użytku z jednostkami usługi bez obsługi. Używanie jej z unikatową jednostką usługi nie jest konieczne. WITH OBJECT_ID Użycie rozszerzenia dla jednostki usługi bez dodawania sufiksu zostanie uruchomione pomyślnie, ale nie będzie oczywiste, dla której jednostki usługi utworzono nazwę logowania lub użytkownika. Zaleca się utworzenie aliasu przy użyciu sufiksu w celu unikatowego zidentyfikowania jednostki usługi. Rozszerzenie WITH OBJECT_ID nie jest obsługiwane w przypadku programu SQL Server.

T-SQL create login/user syntax for nonunique display names (Tworzenie składni logowania/użytkownika dla nazw wyświetlanych innych niż nazwa wyświetlana)

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

Za pomocą rozszerzenia T-SQL DDL do tworzenia identyfikatorów logowania lub użytkowników z identyfikatorem obiektu można uniknąć błędu 33131 , a także określić alias logowania lub użytkownika utworzonego za pomocą identyfikatora obiektu. Na przykład następujące elementy spowodują utworzenie identyfikatora logowania myapp4466e przy użyciu identyfikatora 4466e2f8-0fea-4c61-a470-xxxxxxxxxxxxobiektu aplikacji .

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = '4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx' 
  • Aby wykonać powyższe zapytanie, określony identyfikator obiektu musi istnieć w dzierżawie firmy Microsoft Entra, w której znajduje się zasób usługi Azure SQL. CREATE W przeciwnym razie polecenie zakończy się niepowodzeniem z komunikatem o błędzie:Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission.
  • Nazwa logowania lub użytkownika musi zawierać oryginalną nazwę główną usługi rozszerzoną przez sufiks zdefiniowany przez użytkownika podczas korzystania z instrukcji CREATE LOGIN or CREATE USER . Najlepszym rozwiązaniem jest to, że sufiks może zawierać początkową część identyfikatora obiektu. Na przykład myapp2ba6c dla identyfikatora 2ba6c0a3-cda4-4878-a5ca-xxxxxxxxxxxxobiektu . Można jednak również zdefiniować sufiks niestandardowy. Tworzenie sufiksu z identyfikatora obiektu nie jest wymagane.

Ta konwencja nazewnictwa jest zalecana, aby jawnie skojarzyć użytkownika bazy danych lub zalogować się z powrotem do jego obiektu w identyfikatorze Entra firmy Microsoft.

Uwaga

Alias jest zgodny ze specyfikacją języka T-SQL dla sysname, w tym maksymalną długość 128 znaków. Zalecamy ograniczenie sufiksu do pierwszych 5 znaków identyfikatora obiektu.

Nazwa wyświetlana jednostki usługi w identyfikatorze Entra firmy Microsoft nie jest synchronizowana z nazwą logowania bazy danych ani aliasem użytkownika. Uruchomienie CREATE LOGIN lub CREATE USER nie wpłynie na nazwę wyświetlaną w witrynie Azure Portal. Podobnie modyfikowanie nazwy wyświetlanej identyfikatora entra firmy Microsoft nie wpłynie na alias logowania lub użytkownika bazy danych.

Identyfikowanie użytkownika utworzonego dla aplikacji

W przypadku niepowiązanych jednostek usługi ważne jest, aby sprawdzić, czy alias firmy Microsoft Entra jest powiązany z poprawną aplikacją. Aby sprawdzić, czy użytkownik został utworzony dla poprawnej jednostki usługi (aplikacji):

  1. Pobierz identyfikator aplikacji lub identyfikator obiektu grupy Microsoft Entra od użytkownika utworzonego w usłudze SQL Database. Zobacz następujące zapytania:

    • Aby uzyskać identyfikator aplikacji jednostki usługi utworzonej przez użytkownika, wykonaj następujące zapytanie:

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

      Przykładowe wyjście:

      Screenshot of SSMS output for the Application ID.

      Identyfikator aplikacji jest konwertowany z numeru identyfikacyjnego zabezpieczeń (SID) dla określonej nazwy logowania lub użytkownika, którą możemy potwierdzić, wykonując poniższe zapytanie i porównując ostatnie kilka cyfr i tworząc daty:

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

      Przykładowe wyjście:

      Screenshot of SSMS output for the SID of the application.

    • Aby uzyskać identyfikator obiektu grupy Microsoft Entra utworzonej przez użytkownika, wykonaj następujące zapytanie:

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

      Przykładowe wyjście:

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

      Aby sprawdzić identyfikator SID grupy Microsoft Entra utworzonej przez użytkownika, wykonaj następujące zapytanie:

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

      Przykładowe wyjście:

      Screenshot of SSMS output for the SID of the group.

    • Aby uzyskać identyfikator obiektu i identyfikator aplikacji przy użyciu programu PowerShell, wykonaj następujące polecenie:

      Get-AzADApplication -DisplayName "myapp2ba6c"
      
  2. Przejdź do witryny Azure Portal, a następnie w aplikacji dla przedsiębiorstw lub zasobu grupy Microsoft Entra sprawdź odpowiednio identyfikator aplikacji lub identyfikator obiektu. Sprawdź, czy jest on zgodny z tym, który został uzyskany z powyższego zapytania.

Uwaga

Podczas tworzenia użytkownika na podstawie jednostki usługi identyfikator obiektu jest wymagany podczas używania WITH OBJECT_ID klauzuli z instrukcją CREATE języka T-SQL. Różni się to od identyfikatora aplikacji zwracanego podczas próby zweryfikowania aliasu w usłudze Azure SQL. Korzystając z tego procesu weryfikacji, można zidentyfikować jednostkę usługi lub grupę skojarzona z aliasem SQL w identyfikatorze Entra firmy Microsoft i zapobiec ewentualnym błędom podczas tworzenia identyfikatorów logowania lub użytkowników z identyfikatorem obiektu.

Znajdowanie odpowiedniego identyfikatora obiektu

Aby uzyskać informacje na temat identyfikatora obiektu jednostki usługi, zobacz Obiekt jednostki usługi. Identyfikator obiektu jednostki usługi znajduje się obok nazwy aplikacji w witrynie Azure Portal w obszarze Aplikacje dla przedsiębiorstw.

Ostrzeżenie

Identyfikator obiektu uzyskany na stronie Przegląd rejestracji aplikacji różni się od identyfikatora obiektu uzyskanego na stronie Przegląd aplikacji dla przedsiębiorstw. Jeśli jesteś na stronie Przegląd rejestracji aplikacji, wybierz połączoną aplikację zarządzaną w nazwie aplikacji katalogu lokalnego, aby przejść do odpowiedniego identyfikatora obiektu na stronie Przegląd aplikacji dla przedsiębiorstw.