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-xxxxxxxxxxxx
obiektu 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
orCREATE USER
. Najlepszym rozwiązaniem jest to, że sufiks może zawierać początkową część identyfikatora obiektu. Na przykładmyapp2ba6c
dla identyfikatora2ba6c0a3-cda4-4878-a5ca-xxxxxxxxxxxx
obiektu . 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):
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:
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:
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:
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:
Aby uzyskać identyfikator obiektu i identyfikator aplikacji przy użyciu programu PowerShell, wykonaj następujące polecenie:
Get-AzADApplication -DisplayName "myapp2ba6c"
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.