Freigeben über


Anmeldungen und Benutzer von Microsoft Entra mit nicht eindeutigen Anzeigenamen

Gilt für: SQL Server 2025 (17.x) Azure SQL-DatenbankAzure SQL Managed InstanceMicrosoft Fabric

In diesem Artikel erfahren Sie, wie Sie die T-SQL-Syntax Object_ID verwenden, um Microsoft Entra-Anmeldungen und Benutzer mit nicht eindeutigen Anzeigenamen in Azure SQL-Datenbank, Fabric SQL-Datenbank, azure SQL Managed Instance und SQL Server 2025 und höheren Versionen zu erstellen.

Hinweis

Sie können Benutzer in der Fabric SQL-Datenbank erstellen, aber keine Anmeldungen.

Überblick

Microsoft Entra-ID unterstützt die Authentifizierung für Dienstprinzipale. Die Verwendung eines Dienstprinzipals mit einem Anzeigenamen, der in der Microsoft Entra-ID nicht eindeutig ist, führt jedoch zu Fehlern, wenn man die Anmeldung oder den Benutzer in SQL Server, der Azure SQL-Datenbank oder der Azure SQL Managed Instance erstellt.

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. 

Beim Versuch, die folgende T-SQL-Anweisung auszuführen:

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 

Die WITH OBJECT_ID Erweiterung

Der Fehler des doppelten Anzeigenamens tritt auf, weil Microsoft Entra ID doppelte Anzeigenamen für Microsoft Entra-Anwendung (Dienstprinzipal) zulässt, während SQL Server und Azure SQL eindeutige Namen erfordern, um Microsoft Entra-Anmeldungen und -Benutzer zu erstellen. Um dieses Problem zu beheben, wurde die Data Definition Language (DDL)-Anweisung zum Erstellen von Anmeldeinformationen und Benutzern erweitert, um die Objekt-ID der Azure-Ressource in die WITH OBJECT_ID Klausel einzuschließen.

Hinweis

Die meisten nicht eindeutigen Anzeigenamen in Microsoft Entra ID beziehen sich auf Dienstprinzipale, gelegentlich können jedoch auch Gruppennamen nicht eindeutig sein. Microsoft Entra-Benutzer-Hauptnamen sind eindeutig, da zwei Benutzer nicht denselben Benutzer-Hauptnamen haben 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 Standardanweisung CREATE LOGIN oder CREATE USER verwendet werden. Bei der WITH OBJECT_ID Erweiterung handelt es sich um ein Problembehandlungsreparaturelement, das für die Verwendung mit Nicht-Dienstprinzipalen implementiert wird. 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 2025 und höhere Versionen unterstützt.

T-SQL-Login/Benutzer-Syntax für nicht eindeutige Anzeigenamen erstellen

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 Fehler 33131 vermeiden und auch einen Alias für die Anmeldung oder den Benutzer angeben, die mit der Objekt-ID erstellt wurden. Im folgenden T-SQL-Beispiel wird beispielsweise eine Anmeldung myapp4466e mit der Anwendungsobjekt-ID aaaaaaaa-0000-1111-2222-bbbbbbbbbbbberstellt.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' 
  • Zum Ausführen dieser T-SQL-Abfrage muss die angegebene Objekt-ID im Microsoft Entra-Mandanten vorhanden sein, in dem sich die SQL-Ressource befindet. Andernfalls schlägt der CREATE Befehl mit der 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 CREATE LOGIN- oder CREATE USER-Anweisung 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 bbbbbbbb-1111-2222-3333-cccccccccccc. 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 mit seinem Objekt in Microsoft Entra ID zu verknüpfen.

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 fünf Zeichen der Objekt-ID zu beschränken.

Der Anzeigename des Dienstprinzipals in Microsoft Entra ID wird nicht mit dem Datenbank-Login oder dem Benutzeralias synchronisiert. Ob CREATE LOGIN oder CREATE USER ausgeführt wird, wirkt sich nicht auf den Anzeigenamen im Azure-Portal aus. Ebenso wirkt sich das Ändern des Anzeigenamens der Microsoft Entra ID nicht auf das Datenbank-Login 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 Azure SQL oder SQL Server 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 der Abfrageausgabe von SQL Server Management Studio (SSMS) für die Anwendungs-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 nächste T-SQL-Abfrage ausführen und die letzten ziffern vergleichen und Datumswerte erstellen:

      SELECT SID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c' 
      

      Beispielausgabe:

      Screenshot der Abfrageausgabe von SQL Server Management Studio (SSMS) für die SID der Anwendung.

    • 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 der Abfrageausgabe von SQL Server Management Studio (SSMS) für die Objekt-ID der Microsoft Entra-Gruppe.

      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 der Abfrageausgabe von SQL Server Management Studio (SSMS) für die SID der Gruppe.

    • 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 Enterprise-Anwendung oder Microsoft Entra-Gruppenressource die Anwendungs-ID bzw. Objekt-ID . Überprüfen Sie, ob sie mit dem aus der vorherigen Abfrage abgerufenen übereinstimmt.

Hinweis

Beim Erstellen eines Benutzers aus einem Dienstprinzipal ist die Objekt-ID erforderlich, wenn die Klausel mit der WITH OBJECT_IDCREATE T-SQL-Anweisung verwendet wird. Dies unterscheidet sich von der Anwendungs-ID , die zurückgegeben wird, wenn Sie versuchen, den Alias in SQL Server zu überprüfen. Mithilfe dieses Überprüfungsprozesses können Sie den Dienstprinzipal oder die Gruppe identifizieren, der dem SQL-Alias in der 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 Enterprise-Anwendungen aufgeführt ist.

Warnung

Die objekt-ID, die auf der Seite "Übersicht über die App-Registrierung " abgerufen wird, unterscheidet sich von der Objekt-ID, die auf der Seite " Enterprise-Anwendungen – Übersicht" abgerufen wurde. Wenn Sie sich auf der Seite "Übersicht der App-Registrierung" befinden, wählen Sie den Namen der verknüpften verwalteten Anwendung im lokalen Verzeichnis aus, um zur richtigen Objekt-ID auf der Seite "Übersicht" der Unternehmensanwendungen zu navigieren.