Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric
W tym artykule pokazano, jak używać składni języka T-SQL Object_ID do tworzenia logowań Microsoft Entra i użytkowników z nieunikalnymi nazwami wyświetlanymi w Azure SQL Database, Fabric SQL Database, Azure SQL Managed Instance i SQL Server 2025 i nowszych wersjach.
Uwaga / Notatka
Możesz tworzyć użytkowników w usłudze Fabric SQL Database, ale nie logować się.
Przegląd
Microsoft Entra ID obsługuje uwierzytelnianie dla głównych usług. 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 programie SQL Server, usłudze Azure SQL Database i usłudze 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ł błąd zduplikowanej nazwy wyświetlanej, ponieważ Microsoft Entra ID zezwala na zduplikowane nazwy wyświetlane dla aplikacji Microsoft Entra (głównego obiektu usługi), podczas gdy SQL Server i Azure SQL wymagają unikatowych nazw, aby utworzyć loginy i użytkowników 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 / Notatka
Większość niejednoznacznych nazw wyświetlanych w Microsoft Entra ID jest związana z jednostkami usługi, chociaż czasami nazwy grup też mogą nie być unikalne. Główne nazwy użytkowników w Microsoft Entra są unikatowe, ponieważ dwóch użytkowników nie może mieć tej samej głównej nazwy 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 instrukcji CREATE LOGIN lub CREATE USER. Rozszerzenie WITH OBJECT_ID to element naprawy rozwiązywania problemów zaimplementowany do użytku z jednostkami usługi nonunique. Używanie jej 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 jest obsługiwane dla programu SQL Server 2025 i nowszych wersji.
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 tworzy login myapp4466e przy użyciu identyfikatora obiektu aplikacji aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb.
CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER
WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'
- Aby wykonać zapytanie T-SQL, określony identyfikator obiektu musi istnieć w dzierżawie Microsoft Entra, w której znajduje się zasób SQL.
CREATEW 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 LOGINorCREATE USER. Najlepszym rozwiązaniem jest to, że sufiks może zawierać początkową część identyfikatora obiektu. Na przykładmyapp2ba6cdla identyfikatorabbbbbbbb-1111-2222-3333-ccccccccccccobiektu . Można jednak również zdefiniować sufiks niestandardowy. Tworzenie sufiksu z identyfikatora obiektu nie jest wymagane.
Zaleca się stosowanie tej konwencji nazewnictwa, aby wyraźnie skojarzyć użytkownika bazy danych lub login z jego obiektem w Microsoft Entra ID.
Uwaga / Notatka
Alias jest zgodny ze specyfikacją języka T-SQL dla sysname z maksymalną długością 128 znaków. Zalecamy ograniczenie sufiksu do pierwszych pięciu 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 zmodyfikowanie nazwy wyświetlanej identyfikatora Entra firmy Microsoft nie wpłynie na nazwę logowania bazy danych ani alias użytkownika.
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 Azure SQL lub programie SQL Server. Zobacz następujące zapytania:
Aby uzyskać identyfikator aplikacji głównego obiektu usługi utworzonego 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 dane wyjściowe:
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 dane wyjściowe:
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 dane wyjściowe:
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 dane wyjściowe:
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 / Notatka
Podczas tworzenia użytkownika z głównej usługi identyfikator obiektu jest wymagany przy użyciu klauzuli WITH OBJECT_ID z instrukcją CREATE T-SQL. Różni się to od identyfikatora aplikacji zwracanego podczas próby zweryfikowania aliasu w programie SQL Server. Korzystając z tego procesu weryfikacji, można zidentyfikować obiekt usługi lub grupę skojarzone z aliasem SQL w Microsoft Entra ID i zapobiec ewentualnym błędom podczas tworzenia loginów 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ą nazwę aplikacji Zarządzana aplikacja w katalogu lokalnym, aby przejść do odpowiedniego identyfikatora obiektu na stronie Przegląd aplikacji dla przedsiębiorstw.
Treści powiązane
- główne podmioty (silnik bazy danych)
- UTWÓRZ LOGOWANIE (Transact-SQL)
- UTWÓRZ UŻYTKOWNIKA (Transact-SQL)