Udostępnij za pośrednictwem


Identyfikatory logowania i użytkownicy firmy Microsoft z nazwami wyświetlanymi nieumyślnymi (wersja zapoznawcza)

Dotyczy: usługa Azure SQL Database Azure SQL Managed Instance SQL Database w usłudze Fabric

W tym artykule pokazano, jak używać składni języka T-SQL Object_ID do tworzenia nazw logowania firmy Microsoft Entra i użytkowników z niestandardowymi nazwami wyświetlanymi w usłudze Azure SQL Database, bazie danych SQL fabric i usłudze Azure SQL Managed Instance.

Uwaga

Tworzenie WITH OBJECT_ID użytkowników i identyfikatorów logowania w usługach Azure SQL Database i Azure SQL Managed Instance jest obecnie dostępne w wersji zapoznawczej. Możesz tworzyć użytkowników w usłudze Fabric SQL Database, ale nie logować się.

Omówienie

Identyfikator Entra firmy Microsoft obsługuje uwierzytelnianie dla jednostek usługi. Jednak 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 Database i azure SQL Managed Instance.

Jeśli na przykład aplikacja myapp nie jest unikatowa, może wystąpić następujący błąd:

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. 

Podczas próby uruchomienia następującej instrukcji języka T-SQL:

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 

WITH OBJECT_ID Rozszerzenie

Wystąpił zduplikowany błąd nazwy wyświetlanej, 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

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 to element naprawy rozwiązywania problemów zaimplementowany do użytku z jednostkami usługi nonunique. Korzystanie z niej z unikatową jednostką usługi nie jest zalecane. 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'

Dzięki rozszerzeniu obsługi języka 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 przy użyciu identyfikatora obiektu. Na przykład poniższy przykład języka T-SQL utworzy identyfikator 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ć to zapytanie T-SQL, 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:

      Zrzut ekranu przedstawiający dane wyjściowe zapytania programu SQL Server Management Studio (SSMS) dla identyfikatora aplikacji.

      Identyfikator aplikacji jest konwertowany z numeru identyfikacyjnego zabezpieczeń (SID) dla określonej nazwy logowania lub użytkownika, co możemy potwierdzić, wykonując następne zapytanie T-SQL 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:

      Zrzut ekranu przedstawiający dane wyjściowe zapytania programu SQL Server Management Studio (SSMS) dla identyfikatora SID aplikacji.

    • 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:

      Zrzut ekranu przedstawiający dane wyjściowe zapytania programu SQL Server Management Studio (SSMS) dla identyfikatora obiektu grupy Microsoft Entra.

      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:

      Zrzut ekranu przedstawiający dane wyjściowe zapytania programu SQL Server Management Studio (SSMS) dla identyfikatora SID grupy.

    • 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 pasuje do elementu uzyskanego z poprzedniego 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.