Microsoft Entra-Anmeldungen und Benutzer mit nicht eindeutigen Anzeigenamen

Gilt für:Azure SQL-DatenbankAzure SQL Managed Instance

Die Verwendung eines Dienstprinzipals mit einem Anzeigenamen, der in Microsoft Entra ID nicht eindeutig ist, führt zu Fehlern beim Erstellen der Anmeldung oder des Benutzers in Azure SQL. Wenn die Anwendung myapp beispielsweise nicht eindeutig ist, tritt beim Ausführen der folgenden T-SQL-Anweisung möglicherweise der folgende Fehler auf:

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. 

Die Erweiterung WITH OBJECT_ID

Dieser Fehler 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 benötigt. 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 ist nicht erforderlich. 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-Erweiterung 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 oder CREATE USER verwendet wird. Als bewährte Methode kann das Suffix einen anfänglichen Teil seiner Objekt-ID enthalten. Zum Beispiel myapp2ba6c für die Objekt-ID 2ba6c0a3-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:

  1. 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:

      Screenshot of SSMS output for the Application ID.

      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:

      Screenshot of SSMS output for the SID of the application.

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

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

      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:

      Screenshot of SSMS output for the SID of the group.

    • Führen Sie den folgenden Befehl aus, um die Objekt-ID und Anwendungs-ID der Anwendung mithilfe von PowerShell abzurufen:

      Get-AzADApplication -DisplayName "myapp2ba6c"
      
  2. 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.