Problembehandlung bei verwaisten Benutzern (SQL Server)Troubleshoot Orphaned Users (SQL Server)

GILT FÜR: jaSQL Server jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Verwaiste Benutzer treten in SQL ServerSQL Server auf, wenn ein Datenbankbenutzer auf einem Anmeldenamen in der Masterdatenbank basiert, aber der Anmeldename nicht mehr in Mastervorhanden ist.Orphaned users in SQL ServerSQL Server occur when a database user is based on a login in the master database, but the login no longer exists in master. Dies kann auftreten, wenn der Anmeldename gelöscht wird, oder wenn die Datenbank auf einen anderen Server verschoben wird, auf dem der Anmeldename nicht existiert.This can occur when the login is deleted, or when the database is moved to another server where the login does not exist. Dieses Thema beschreibt, wie Sie verwaiste Benutzer finden und sie den Anmeldenamen erneut zuordnen können.This topic describes how to find orphaned users, and remap them to logins.

Hinweis

Verringern Sie mögliche verwaiste Benutzer, indem Sie eigenständige Datenbankbenutzer für Datenbanken, die verschoben werden können, verwenden.Reduce the possibility of orphaned users by using contained database users for databases that might be moved. Weitere Informationen finden Sie unter Eigenständige Datenbankbenutzer - machen Sie Ihre Datenbank portabel.For more information, see Contained Database Users - Making Your Database Portable.

HintergrundBackground

Für die Verbindung mit einer Datenbank oder einer Instanz von SQL ServerSQL Server mithilfe eines Sicherheitsprinzipals (Datenbank-Benutzeridentität) auf Basis eines Anmeldenamens, muss der Prinzipal einen gültigen Anmeldenamen in der Masterdatenbank besitzen.To connect to a database on an instance of SQL ServerSQL Server using a security principal (database user identity) based on a login, the principal must have a valid login in the master database. Dieser Anmeldename wird bei der Authentifizierung benötigt, bei der die Prinzipalidentität überprüft wird und bestimmt wird, ob der Prinzipal eine Verbindung mit der SQL ServerSQL Server-Instanz herstellen darf.This login is used in the authentication process that verifies the principals identity and determines if the principal is allowed to connect to the instance of SQL ServerSQL Server. Die auf einer Serverinstanz vorhandenen SQL ServerSQL Server -Anmeldenamen werden in der sys.server_principals -Katalogsicht und der sys.sql_logins -Kompatibilitätssicht angezeigt.The SQL ServerSQL Server logins on a server instance are visible in the sys.server_principals catalog view and the sys.sql_logins compatibility view.

SQL ServerSQL Server -Anmeldenamen greifen als „Datenbankbenutzer“ auf individuelle Datenbanken zu, der dem SQL ServerSQL Server -Anmeldenamen zugeordnet ist. logins access individual databases as "database user" that is mapped to the SQL ServerSQL Server login. Es gibt jedoch drei Ausnahmen von dieser Regel:There are three exceptions to this rule:

  • Eigenständige DatenbankbenutzerContained database users

    Eigenständige Datenbankbenutzer authentifizieren sich auf Benutzerdatenbankebene und werden keinem Anmeldenamen zugeordnet.Contained database users authenticate at the user-database level and are not associated with logins. Dies wird empfohlen, da die Datenbanken besser portierbar sind und eigenständige Datenbankbenutzer nicht verwaisen können.This is recommended because the databases are more portable and contained database users cannot become orphaned. Sie müssen jedoch für jede Datenbank neu erstellt werden.However they must be recreated for each database. Möglicherweise ist dies in einer Umgebung mit mehreren Datenbanken nicht sinnvoll.This might be impractical in an environment with many databases.

  • Das Gastkonto .The guest account.

    Wenn dieses Konto in der Datenbank aktiviert ist, erlaubt es SQL ServerSQL Server -Anmeldenamen, die keinem Datenbankbenutzer zugeordnet sind, die die Datenbank als Gastbenutzer verwenden.When enabled in the database, this account permits SQL ServerSQL Server logins that are not mapped to a database user to enter the database as the guest user. Das Gastkonto wird standardmäßig deaktiviert.The guest account is disabled by default.

  • Microsoft Windows-Gruppenmitgliedschaften.Microsoft Windows group memberships.

    Ein von einem Windows-Benutzer erstellter SQL ServerSQL Server -Anmeldename kann eine Datenbank verwenden, wenn der Windows-Benutzer Mitglied einer Windows-Gruppe ist, die auch ein Benutzer der Datenbank ist.A SQL ServerSQL Server login created from a Windows user can enter a database if the Windows user is a member of a Windows group that is also a user in the database.

Die Informationen für die Zuordnung eines SQL ServerSQL Server -Anmeldenamens zu einem Datenbankbenutzer werden in der Datenbank gespeichert.Information about the mapping of a SQL ServerSQL Server login to a database user is stored within the database. Hierzu zählen der Name des Datenbankbenutzers sowie die Sicherheits-ID (SID) des entsprechenden SQL ServerSQL Server -Anmeldenamens.It includes the name of the database user and the SID of the corresponding SQL ServerSQL Server login. Die Berechtigungen dieses Datenbankbenutzers werden für die Autorisierung in der Datenbank verwendet.The permissions of this database user are applied for authorization in the database.

Ein Datenbankbenutzer (basierend auf einem Anmeldenamen), für den ein entsprechender SQL ServerSQL Server -Anmeldename auf einer Serverinstanz nicht oder falsch definiert ist, kann sich bei der Instanz nicht anmelden.A database user (based on a login) for which the corresponding SQL ServerSQL Server login is undefined or is incorrectly defined on a server instance cannot log in to the instance. Diese Benutzer werden als verwaiste Benutzer der Datenbank dieser Serverinstanz bezeichnet.Such a user is said to be an orphaned user of the database on that server instance. Verwaisungen treten auf, wenn der Datenbankbenutzer einer Anmelde-SID zugeordnet wird, die auf der master -Instanz nicht vorhanden ist.Orphaning can happen if the database user is mapped to a login SID that is not present in the master instance. Ein Datenbankbenutzer kann anschließend zu einem verwaisten Benutzer werden, wenn die Datenbank wiederhergestellt oder an eine andere SQL ServerSQL Server -Instanz angefügt wird, wo der Anmeldename nie erstellt wurde.A database user can become orphaned after a database is restored or attached to a different instance of SQL ServerSQL Server where the login was never created. Ein Datenbankbenutzer kann auch zu einem verwaisten Benutzer werden, wenn der entsprechende SQL ServerSQL Server -Anmeldename gelöscht wird.A database user can also become orphaned if the corresponding SQL ServerSQL Server login is dropped. Selbst wenn der Anmeldename neu erstellt wird, verfügt er über eine andere SID, sodass der Datenbankbenutzer verweist bleibt.Even if the login is recreated, it will have a different SID, so the database user will still be orphaned.

So ermitteln Sie verwaiste BenutzerTo Detect Orphaned Users

Für SQL ServerSQL Server und PDWFor SQL ServerSQL Server and PDW

Führen Sie die folgende Anweisung in der Benutzerdatenbank aus, um verwaiste Benutzer in SQL ServerSQL Server über eine Suche nach fehlenden SQL ServerSQL Server -Anmeldenamen zu ermitteln:To detect orphaned users in SQL ServerSQL Server based on missing SQL ServerSQL Server authentication logins, execute the following statement in the user database:

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 authentication_type_desc = 'INSTANCE';  

Die Ausgabe führt alle Benutzer der SQL ServerSQL Server -Authentifizierung und entsprechende Sicherheits-IDs (SID), die mit keinem SQL ServerSQL Server -Anmeldenamen verknüpft sind, in der aktuellen Datenbank auf.The output lists the SQL ServerSQL Server authentication users and corresponding security identifiers (SID) in the current database that are not linked to any SQL ServerSQL Server login.

Für SQL-Datenbank und SQL Data WarehouseFor SQL Database and SQL Data Warehouse

Die sys.server_principals -Tabelle ist in der SQL-Datenbank oder SQL Data Warehouse nicht verfügbar.The sys.server_principals table is not available in SQL Database or SQL Data Warehouse. Ermitteln Sie verwaiste Benutzer in diesen Umgebungen, indem Sie die folgenden Schritte ausführen:Identify orphaned users in those environments with the following steps:

  1. Stellen Sie eine Verbindung mit der master -Datenbank her, und wählen Sie mit der folgenden Abfrage die SIDs für die Anmeldenamen:Connect to the master database and select the SID's for the logins with the following query:

    SELECT sid 
    FROM sys.sql_logins 
    WHERE type = 'S'; 
    
  2. Stellen Sie eine Verbindung mit der Benutzerdatenbank her, und überprüfen Sie mit der folgenden Abfrage die SIDs der Benutzer in der sys.database_principals -Tabelle:Connect to the user database and review the SID's of the users in the sys.database_principals table, by using the following query:

    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 festzustellen, ob die Tabelle sys.database_principals der Benutzerdatenbank SIDs enthält, für die in der Tabelle sql_logins der Masterdatenbank keine entsprechenden Anmelde-SIDs vorhanden sind.Compare the two lists to determine if there are user SID's in the user database sys.database_principals table which are not matched by login SID's in the master database sql_logins table.

So lösen Sie einen verwaisten Benutzer aufTo Resolve an Orphaned User

Verwenden Sie in der Masterdatenbank die Anweisung CREATE LOGIN zusammen mit der SID-Option, um einen fehlenden Anmeldenamen neu zu erstellen und geben Sie die SID des Datenbankbenutzers an, die Sie im vorherigen Abschnitt erhalten haben:In the master database, use the CREATE LOGIN statement with the SID option to recreate a missing login, providing the SID of the database user obtained in the previous section:

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

Führen Sie in der Benutzerdatenbank die Anweisung ALTER USERaus, und geben Sie den Anmeldenamen ein, um verwaiste Benutzer einem Anmeldenamen zuzuordnen, der bereits im Master vorhanden ist.To map an orphaned user to a login which already exists in master, execute the ALTER USER statement in the user database, specifying the login name.

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

Wenn Sie einen fehlenden Anmeldenamen neu erstellen, kann der Benutzer mithilfe des angegebenen Kennworts auf die Datenbank zugreifen.When you recreate a missing login, the user can access the database using the password provided. Der Benutzer kann dann das Kennwort für das Anmeldekonto mit der ALTER LOGIN-Anweisung ändern.Then the user can alter the password of the login account by using the ALTER LOGIN statement.

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

Wichtig

Jeder Anmeldename kann das eigene Kennwort ändern.Any login can change it's own password. Nur Anmeldenamen mit der Berechtigung ALTER ANY LOGIN können auch die Kennwörter von anderen Benutzern ändern.Only logins with the ALTER ANY LOGIN permission can change the password of another user's login. Allerdings können die Kennwörter von Mitgliedern der sysadmin -Rolle nur von Mitgliedern der sysadmin -Rolle geändert werden.However, only members of the sysadmin role can modify passwords of sysadmin role members.

Die veraltete Prozedur Sp_change_users_login funktioniert auch bei verwaisten Benutzern.The deprecated procedure sp_change_users_login also works with orphaned users. sp_change_users_login kann nicht mit SQL-DatenbankSQL Databaseverwendet werden.sp_change_users_login cannot be used with SQL-DatenbankSQL Database.

Weitere Informationen finden Sie unterSee Also

CREATE LOGIN (Transact-SQL) CREATE LOGIN (Transact-SQL)
ALTER USER (Transact-SQL) ALTER USER (Transact-SQL)
CREATE USER (Transact-SQL) CREATE USER (Transact-SQL)
sys.database_principals (Transact-SQL) sys.database_principals (Transact-SQL)
sys.server_principals (Transact-SQL) sys.server_principals (Transact-SQL)
sp_change_users_login (Transact-SQL) sp_change_users_login (Transact-SQL)
sp_addlogin (Transact-SQL) sp_addlogin (Transact-SQL)
sp_grantlogin (Transact-SQL) sp_grantlogin (Transact-SQL)
sp_password (Transact-SQL) sp_password (Transact-SQL)
sys.sysusers (Transact-SQL) sys.sysusers (Transact-SQL)
sys. sql_logins sys.syslogins (Transact-SQL)sys.sql_logins sys.syslogins (Transact-SQL)