Microsoft Entra-Anmeldungen und Benutzer mit nicht eindeutigen Anzeigenamen (Vorschau)
Gilt für: Azure SQL-Datenbank Azure SQL Managed Instance SQL-Datenbank in Fabric
In diesem Artikel erfahren Sie, wie Sie die T-SQL-Object_ID
-Syntax verwenden, um Microsoft Entra-Anmeldungen und Benutzer mit nicht eindeutigen Anzeigenamen in Azure SQL-Datenbank, Fabric SQL-Datenbank und Azure SQL Managed Instance zu erstellen.
Hinweis
Die Verwendung von WITH OBJECT_ID
zum Erstellen von Benutzern und Anmeldungen in Azure SQL befindet sich derzeit in der Vorschau.
Sie können Benutzer in der Fabric SQL-Datenbank erstellen, aber keine Anmeldungen.
Übersicht
Microsoft Entra ID unterstützt Authentifizierung für Dienstprinzipale. Die Verwendung eines Dienstprinzipals mit einem Anzeigenamen, der in Microsoft Entra ID nicht eindeutig ist, führt jedoch zu Fehlern beim Erstellen der Anmeldung oder des Benutzers in Azure SQL.
Wenn die Anwendung myapp
beispielsweise nicht eindeutig ist, tritt möglicherweise der folgende Fehler auf:
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.
Wenn Sie versuchen, die folgende T-SQL-Anweisung auszuführen:
CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER
Die Erweiterung WITH OBJECT_ID
Der Fehler „doppelter Anzeigename“ tritt auf, da Microsoft Entra ID doppelte Anzeigenamen für die Microsoft Entra-Anwendung (Dienstprinzipal) zulässt, während Azure SQL eindeutige Namen zum Erstellen von Microsoft Entra-Anmeldungen und -Benutzern erfordert. Um dieses Problem zu beheben, wurde die DDL-Anweisung (Data Definition Language) zum Erstellen von Anmeldeinformationen und Benutzern erweitert, um die Objekt-ID der Azure-Ressource in die WITH OBJECT_ID
-Klausel einzuschließen.
Hinweis
Die WITH OBJECT_ID
-Erweiterung der CLI befindet sich derzeit in Public Preview.
Die meisten nicht eindeutigen Anzeigenamen in Microsoft Entra ID beziehen sich auf Dienstprinzipale, Gruppennamen können jedoch gelegentlich auch nicht eindeutig sein. Microsoft Entra-Benutzerprinzipalnamen sind eindeutig, da zwei Benutzer nicht über denselben Benutzerprinzipal verfügen können. Eine App-Registrierung (Dienstprinzipal) kann jedoch mit einem Anzeigenamen erstellt werden, der mit einem Benutzerprinzipalnamen identisch ist.
Wenn der Anzeigename des Dienstprinzipals kein Duplikat ist, sollte die standardmäßige Anweisung CREATE LOGIN
oder CREATE USER
verwendet werden. Die WITH OBJECT_ID
-Erweiterung befindet sich in der öffentlichen Vorschau und ist ein Reparaturelement der Problembehandlung, das für die Verwendung mit nicht eindeutigen Dienstprinzipalen implementiert wurde. Die Verwendung mit einem eindeutigen Dienstprinzipal wird nicht empfohlen. Die Verwendung der WITH OBJECT_ID
-Erweiterung für einen Dienstprinzipal ohne Hinzufügen eines Suffixes wird erfolgreich ausgeführt, aber es ist nicht offensichtlich, für welchen Dienstprinzipal die Anmeldung oder der Benutzer erstellt wurde. Es wird empfohlen, einen Alias mit einem Suffix zu erstellen, um den Dienstprinzipal eindeutig zu identifizieren. Die WITH OBJECT_ID
-Erweiterung wird für SQL Server nicht unterstützt.
T-SQL erstellt eine Anmeldung/Benutzersyntax für nicht eindeutige Anzeigenamen
CREATE LOGIN [login_name] FROM EXTERNAL PROVIDER
WITH OBJECT_ID = 'objectid'
CREATE USER [user_name] FROM EXTERNAL PROVIDER
WITH OBJECT_ID = 'objectid'
Mit der T-SQL DDL-Unterstützungserweiterung zum Erstellen von Anmeldungen oder Benutzern mit der Objekt-ID können Sie den Fehler 33131 vermeiden und auch einen Alias für die Anmeldung oder den Benutzer angeben, die mit der Objekt-ID erstellt wurden. Im Folgenden wird beispielsweise eine Anmeldung myapp4466e
mit der Anwendungsobjekt-ID 4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx
erstellt.
CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER
WITH OBJECT_ID = '4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx'
- Zum Ausführen der obigen Abfrage muss die angegebene Objekt-ID im Microsoft Entra-Mandanten vorhanden sein, in dem sich die Azure SQL-Ressource befindet. Andernfalls schlägt der Befehl
CREATE
mit der folgenden Fehlermeldung fehl:Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission.
- Der Anmelde- oder Benutzername muss den ursprünglichen Dienstprinzipalnamen enthalten, der durch ein benutzerdefiniertes Suffix erweitert wird, wenn die Anweisung
CREATE LOGIN
oderCREATE USER
verwendet wird. Als bewährte Methode kann das Suffix einen anfänglichen Teil seiner Objekt-ID enthalten. Zum Beispielmyapp2ba6c
für die Objekt-ID2ba6c0a3-cda4-4878-a5ca-xxxxxxxxxxxx
. Sie können jedoch auch ein benutzerdefiniertes Suffix definieren. Das Erstellen des Suffixes aus der Objekt-ID ist nicht erforderlich.
Diese Benennungskonvention wird empfohlen, um den Datenbankbenutzer explizit zuzuordnen oder sich mit seinem Objekt in der Microsoft Entra-ID anzumelden.
Hinweis
Der Alias entspricht der T-SQL-Spezifikation für sysname
, einschließlich einer maximalen Länge von 128 Zeichen. Es wird empfohlen, das Suffix auf die ersten 5 Zeichen der Objekt-ID zu beschränken.
Der Anzeigename des Dienstprinzipals in Microsoft Entra ID wird nicht mit der Datenbankanmeldung oder dem Benutzeralias synchronisiert. Die Ausführung von CREATE LOGIN
oder CREATE USER
wirkt sich nicht auf den Anzeigenamen im Azure-Portal aus. Ebenso wirkt sich das Ändern des Anzeigenamens von Microsoft Entra ID nicht auf die Datenbankanmeldung oder den Benutzeralias aus.
Identifizieren des für die Anwendung erstellten Benutzers
Für nicht eindeutige Dienstprinzipale ist es wichtig zu überprüfen, ob der Microsoft Entra-Alias an die richtige Anwendung gebunden ist. So überprüfen Sie, ob der Benutzer für den richtigen Dienstprinzipal (Anwendung) erstellt wurde:
Rufen Sie die Anwendungs-ID der Anwendung oder die Objekt-ID der Microsoft Entra-Gruppe vom Benutzer ab, der in SQL-Datenbank erstellt wurde. Sehen Sie sich die folgenden Abfragen an:
Führen Sie die folgende Abfrage aus, um die Anwendungs-ID des Dienstprinzipals vom erstellten Benutzer abzurufen:
SELECT CAST(sid as uniqueidentifier) ApplicationID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c'
Beispielausgabe:
Die Anwendungs-ID wird aus der Sicherheitsidentifikationsnummer (SID) für den angegebenen Anmelde- oder Benutzernamen konvertiert, die wir bestätigen können, indem wir die folgende Abfrage ausführen und die letzten Ziffern vergleichen und Datumswerte erstellen:
SELECT SID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c'
Beispielausgabe:
Führen Sie die folgende Abfrage aus, um die Objekt-ID der Microsoft Entra-Gruppe vom erstellten Benutzer abzurufen:
SELECT CAST(sid as uniqueidentifier) ObjectID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b'
Beispielausgabe:
Führen Sie die folgende Abfrage aus, um die SID der Microsoft Entra-Gruppe des erstellten Benutzers zu überprüfen:
SELECT SID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b'
Beispielausgabe:
Führen Sie den folgenden Befehl aus, um die Objekt-ID und Anwendungs-ID der Anwendung mithilfe von PowerShell abzurufen:
Get-AzADApplication -DisplayName "myapp2ba6c"
Wechseln Sie zum Azure-Portal, und überprüfen Sie in Ihrer Unternehmensanwendung oder Microsoft Entra-Gruppenressource die Anwendungs-ID bzw. die Objekt-ID. Überprüfen Sie, ob sie mit dem aus der obigen Abfrage abgerufenen ID übereinstimmt.
Hinweis
Beim Erstellen eines Benutzers aus einem Dienstprinzipal ist die Objekt-ID erforderlich, wenn die WITH OBJECT_ID
-Klausel mit der CREATE
-T-SQL-Anweisung verwendet wird. Dies unterscheidet sich von der Anwendungs-ID, die zurückgegeben wird, wenn Sie versuchen, den Alias in Azure SQL zu überprüfen. Mithilfe dieses Überprüfungsprozesses können Sie den Dienstprinzipal oder die Gruppe identifizieren, der bzw. die dem SQL-Alias in Microsoft Entra ID zugeordnet ist, und mögliche Fehler beim Erstellen von Anmeldungen oder Benutzern mit einer Objekt-ID verhindern.
Suchen der richtigen Objekt-ID
Informationen zur Objekt-ID eines Dienstprinzipals finden Sie unter Dienstprinzipalobjekt. Sie können die Objekt-ID des Dienstprinzipals suchen, der neben dem Anwendungsnamen im Azure-Portal unter Unternehmensanwendungen aufgeführt ist.
Warnung
Die Objekt-ID, die auf der Seite „Übersicht“ in der App-Registrierung abgerufen wird, unterscheidet sich von der Objekt-ID, die auf der Seite „Übersicht“ der Unternehmensanwendungen abgerufen wurde. Wenn Sie sich auf der Seite „Übersicht“ in der App-Registrierung befinden, wählen Sie den verknüpften Anwendungsnamen Verwaltete Anwendung im lokalen Verzeichnis aus, um zur richtigen Objekt-ID auf der Seite „Übersicht“ der Unternehmensanwendungen zu navigieren.