Freigeben über


Problembehandlung bei verwaisten Benutzern (SQL Server)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Benutzer werden in SQL Server verwaist, wenn ein Datenbankbenutzer auf einer Anmeldung in der master Datenbank basiert, aber die Anmeldung nicht mehr vorhanden masterist. Dies kann auftreten, wenn die Anmeldung gelöscht wird oder wenn die Datenbank auf einen anderen Server verschoben wird, auf dem die Anmeldung nicht vorhanden ist. In diesem Artikel wird beschrieben, wie Sie verwaiste Benutzer finden und sie anmelden.

Hinweis

Verringern Sie mögliche verwaiste Benutzer, indem Sie eigenständige Datenbankbenutzer für Datenbanken, die verschoben werden können, verwenden. Weitere Informationen finden Sie unter Machen Sie Ihre Datenbank portabel, indem Sie eigenständige Datenbanken verwenden.

Hintergrund

Für Verbindungen mit einer Datenbank in einer Instanz von SQL Server, die einen Sicherheitsprinzipal (Datenbankbenutzeridentität) basierend auf einer Anmeldung verwenden, muss der Prinzipal über eine gültige Anmeldung in der master Datenbank verfügen. Diese Anmeldung wird im Authentifizierungsprozess verwendet, der die Identität des Prinzipals überprüft und bestimmt, ob der Prinzipal eine Verbindung mit der Instanz von SQL Server herstellen darf. Die auf einer Serverinstanz vorhandenen SQL Server -Anmeldenamen werden in der sys.server_principals -Katalogsicht und der sys.sql_logins -Kompatibilitätssicht angezeigt.

SQL Server-Anmeldungen greifen auf einzelne Datenbanken als "Datenbankbenutzer" zu, der der SQL Server-Anmeldung zugeordnet ist. Es gibt jedoch drei Ausnahmen von dieser Regel:

  • Eigenständige Datenbankbenutzer

    Enthaltene Datenbankbenutzer authentifizieren sich auf Benutzerdatenbankebene und sind nicht mit Anmeldeinformationen verknüpft. Dieses Modell wird empfohlen, da die Datenbanken portierbarer sind und enthaltene Datenbankbenutzer nicht verwaist werden können. Sie müssen jedoch für jede Datenbank neu erstellt werden. Dieses Modell kann in einer Umgebung mit vielen Datenbanken unpraktisch sein.

  • Das Gastkonto

    Wenn diese Option in einer Datenbank aktiviert ist, lässt dieses Konto SQL Server-Anmeldungen zu, die keinem Datenbankbenutzer zugeordnet sind, um als Gastbenutzer auf die Datenbank zuzugreifen. Das Gastkonto wird standardmäßig deaktiviert.

  • Microsoft Windows-Gruppenmitgliedschaften

    Eine sql Server-Anmeldung, die von einem Windows-Benutzer erstellt wurde, kann auf eine Datenbank zugreifen, wenn der Windows-Benutzer Mitglied einer Windows-Gruppe ist, die auch ein Benutzer in der Datenbank ist.

Informationen zur Zuordnung einer SQL Server-Anmeldung zu einem Datenbankbenutzer werden in der Datenbank gespeichert. Er enthält den Namen des Datenbankbenutzers und den Sicherheitsbezeichner (SID) der entsprechenden SQL Server-Anmeldung. Die Berechtigungen dieses Datenbankbenutzers werden für die Autorisierung in der Datenbank verwendet.

Ein Datenbankbenutzer (basierend auf einer Anmeldung), für den die entsprechende SQL Server-Anmeldung nicht definiert ist oder in einer Serverinstanz falsch definiert ist, kann sich nicht bei der Instanz anmelden. Diese Benutzer werden als verwaiste Benutzer der Datenbank dieser Serverinstanz bezeichnet. Verwaiste Aktionen können auftreten, wenn der Datenbankbenutzer einer Anmeldung SID zugeordnet ist, die nicht in der master Datenbank vorhanden ist. Ein Datenbankbenutzer kann anschließend zu einem verwaisten Benutzer werden, wenn die Datenbank wiederhergestellt oder an eine andere SQL Server -Instanz angefügt wird, wo der Anmeldename nie erstellt wurde. Ein Datenbankbenutzer kann auch zu einem verwaisten Benutzer werden, wenn der entsprechende SQL Server -Anmeldename gelöscht wird. Selbst wenn die Anmeldung neu erstellt wird, verfügt sie über einen anderen SID, sodass der Datenbankbenutzer weiterhin verwaist ist.

Erkennen verwaister Benutzer

Für SQL Server und PDW

Um verwaiste Benutzer in SQL Server basierend auf fehlenden SQL Server-Authentifizierungsanmeldungen zu erkennen, führen Sie die folgende Anweisung in der Benutzerdatenbank aus:

SELECT dp.type_desc, dp.sid, dp.name AS user_name
FROM sys.database_principals AS dp
LEFT JOIN sys.server_principals AS sp
    ON dp.sid = sp.sid
WHERE sp.sid IS NULL
    AND dp.authentication_type_desc = 'INSTANCE';

Die Ausgabe listet die SQL Server-Authentifizierungsbenutzer und die entsprechenden SIDs in der aktuellen Datenbank auf, die nicht mit einer SQL Server-Anmeldung verknüpft sind.

Für Azure SQL-Datenbank und Azure Synapse Analytics

Die sys.server_principals Tabelle ist in SQL-Datenbank oder Azure Synapse Analytics nicht verfügbar. Identifizieren Sie verwaiste Benutzer in diesen Umgebungen, indem Sie die folgenden Schritte ausführen:

  1. Stellen Sie eine Verbindung mit der master Datenbank her, und wählen Sie die SIDs für die Anmeldungen mithilfe der folgenden Abfrage aus:

    SELECT sid
    FROM sys.sql_logins
    WHERE type = 'S';
    
  2. Stellen Sie eine Verbindung mit der Benutzerdatenbank her, und überprüfen Sie die SIDs der Benutzer in der sys.database_principals Tabelle mithilfe der folgenden Abfrage:

    SELECT name, sid, principal_id
    FROM sys.database_principals
    WHERE type = 'S'
      AND name NOT IN ('guest', 'INFORMATION_SCHEMA', 'sys')
      AND authentication_type_desc = 'INSTANCE';
    
  3. Vergleichen Sie die beiden Listen, um zu ermitteln, ob in der Benutzerdatenbanktabelle sys.database_principals Benutzer-SIDs vorhanden sind, die nicht mit Anmelde-SIDs in der master Datenbanktabelle sql_logins übereinstimmen.

Auflösen eines verwaisten Benutzers

Verwenden Sie in der master Datenbank die CREATE LOGIN-Anweisung mit der SID Option, eine fehlende Anmeldung erneut zu erstellen. Geben Sie den SID Datenbankbenutzer an, den Sie im vorherigen Abschnitt abgerufen haben.

CREATE LOGIN <login_name>
WITH PASSWORD = '<use_a_strong_password_here>',
SID = <SID>;

Führen Sie die ALTER USER-Anweisung in der Benutzerdatenbank aus, um einen verwaisten Benutzer einer Anmeldung zuzuordnen, die bereits vorhanden masterist:

ALTER USER <user_name> WITH Login = <login_name>;

Wenn Sie eine fehlende Anmeldung erneut erstellen, kann der Benutzer mithilfe des bereitgestellten Kennworts auf die Datenbank zugreifen. Der Benutzer kann dann das Kennwort des Anmeldekontos mithilfe der ALTER LOGIN Anweisung ändern:

ALTER LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';

Wichtig

Bei jedem Anmeldenamen kann das eigene Kennwort geändert werden. Nur Anmeldenamen mit der Berechtigung ALTER ANY LOGIN können auch die Kennwörter von anderen Benutzern ändern. Allerdings können die Kennwörter von Mitgliedern der sysadmin -Rolle nur von Mitgliedern der sysadmin -Rolle geändert werden.