sp_change_users_login (Transact-SQL)
Gilt für: SQL Server
Ordnet einen vorhandenen Datenbankbenutzer einer SQL Server-Anmeldung zu.
Wichtig
Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden. Verwenden Sie stattdessen ALTER USER .
Transact-SQL-Syntaxkonventionen
Syntax
sp_change_users_login
[ @Action = ] 'Action'
[ , [ @UserNamePattern = ] N'UserNamePattern' ]
[ , [ @LoginName = ] N'LoginName' ]
[ , [ @Password = ] N'Password' ]
[ ; ]
Argumente
[ @Action = ] 'Aktion'
Beschreibt die Aktion für die auszuführende gespeicherte Prozedur. @Action ist varchar(10) ohne Standard und kann einen der folgenden Werte aufweisen.
Wert | Beschreibung |
---|---|
Auto_Fix |
Verknüpft einen Benutzereintrag in der sys.database_principals Systemkatalogansicht in der aktuellen Datenbank mit einer SQL Server-Anmeldung mit demselben Namen. Wenn eine Anmeldung mit demselben Namen nicht vorhanden ist, wird eine erstellt. Überprüfen Sie das Ergebnis aus der Auto_Fix Anweisung, um zu bestätigen, dass der richtige Link tatsächlich hergestellt wurde. Vermeiden Sie die Verwendung Auto_Fix in sicherheitskritischen Situationen.Bei Verwendung Auto_Fix müssen Sie @UserNamePattern und @Password angeben, wenn die Anmeldung noch nicht vorhanden ist, andernfalls müssen Sie @UserNamePattern angeben, @Password jedoch ignoriert wird. @LoginName muss seinNULL . @UserNamePattern muss ein gültiger Benutzer in der aktuellen Datenbank sein. Die Anmeldung kann keinem anderen Benutzer zugeordnet werden. |
Report |
Listet die Benutzer und die entsprechenden Sicherheits-IDs (SID) in der aktuellen Datenbank auf, die nicht mit einer Anmeldung verknüpft sind. @UserNamePattern, @LoginName und @Password dürfen oder nicht angegeben werdenNULL .Um die Berichtsoption durch eine Abfrage mithilfe der Systemtabellen zu ersetzen, vergleichen Sie die Einträge mit sys.server_prinicpals den Einträgen in sys.database_principals . |
Update_One |
Verknüpft die angegebene @UserNamePattern in der aktuellen Datenbank mit einem vorhandenen SQL Server -@LoginName. @UserNamePattern und @LoginName müssen angegeben werden. @Password darf nicht angegeben werdenNULL . |
[ @UserNamePattern = ] N'UserNamePattern'
Der Name eines Benutzers in der aktuellen Datenbank. @UserNamePattern ist "sysname" mit der Standardeinstellung "NULL
.
[ @LoginName = ] N'LoginName'
Der Name einer SQL Server-Anmeldung. @LoginName ist "sysname" mit der Standardeinstellung "NULL
.
[ @Password = ] N'Kennwort'
Das Kennwort, das einer neuen SQL Server-Anmeldung zugewiesen ist, die durch Angeben Auto_Fix
erstellt wird. @Password ist "sysname" und kann nicht seinNULL
. Wenn bereits eine übereinstimmende Anmeldung vorhanden ist, werden der Benutzer und die Anmeldung zugeordnet und @Password ignoriert. Wenn keine übereinstimmende Anmeldung vorhanden ist, sp_change_users_login
wird eine neue SQL Server-Anmeldung erstellt und @Password als Kennwort für die neue Anmeldung zugewiesen.
Wichtig
Verwenden Sie immer ein sicheres Kennwort.
Rückgabecodewerte
0
(erfolgreich) oder 1
Fehler.
Resultset
Spaltenname | Datentyp | Beschreibung |
---|---|---|
UserName |
sysname | Datenbank-Benutzername. |
UserSID |
varbinary(85) | Sicherheits-ID des Benutzers. |
Hinweise
Dient sp_change_users_login
zum Verknüpfen eines Datenbankbenutzers in der aktuellen Datenbank mit einer SQL Server-Anmeldung. Wenn sich die Anmeldung für einen Benutzer ändert, verwenden Sie diese, sp_change_users_login
um den Benutzer mit der neuen Anmeldung zu verknüpfen, ohne die Benutzerberechtigungen zu verlieren. Die neue @LoginName kann nicht seinsa
, und die @UserNamePattern kann weder , guest
noch ein INFORMATION_SCHEMA
Benutzer seindbo
.
sp_change_users_login
Kann nicht verwendet werden, um Datenbankbenutzern Prinzipale, Zertifikaten oder asymmetrischen Schlüsseln auf Windows-Ebene zuzuordnen.
sp_change_users_login
kann nicht mit einer SQL Server-Anmeldung verwendet werden, die aus einem Windows-Prinzipal oder mit einem benutzer erstellt wurde.CREATE USER WITHOUT LOGIN
sp_change_users_login
kann nicht innerhalb einer benutzerdefinierten Transaktion ausgeführt werden.
Berechtigungen
Hierfür ist die Mitgliedschaft in der festen Datenbankrolle db_owner erforderlich. Nur Mitglieder der festen Serverrolle "sysadmin " können die Auto_Fix
Option angeben.
Beispiele
Die Transact-SQL-Codebeispiele in diesem Artikel verwenden die AdventureWorks2022
- oder AdventureWorksDW2022
-Beispieldatenbank, die Sie von der Homepage Microsoft SQL Server Samples and Community Projects herunterladen können.
A. Anzeigen eines Berichts des aktuellen Benutzers zu Anmeldezuordnungen
Im folgenden Beispiel wird ein Bericht über die Benutzer in der aktuellen Datenbank und ihre Sicherheits-IDs erstellt.
EXEC sp_change_users_login 'Report';
B. Zuordnen eines Datenbankbenutzers zu einer neuen SQL Server-Anmeldung
Im folgenden Beispiel wird ein Datenbankbenutzer einer neuen SQL Server-Anmeldung zugeordnet. Datenbankbenutzer MB-Sales
, der zunächst einem anderen Anmeldenamen zugeordnet ist, wird dem Anmeldenamen MaryB
zugeordnet.
--Create the new login.
CREATE LOGIN MaryB WITH PASSWORD = '982734snfdHHkjj3';
GO
--Map database user MB-Sales to login MaryB.
USE AdventureWorks2022;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO
C. Automatisches Zuordnen eines Benutzers zu einer Anmeldung und Erstellen einer neuen Anmeldung bei Bedarf
Das folgende Beispiel zeigt, wie Auto_Fix
Sie einen vorhandenen Benutzer einer Anmeldung mit demselben Namen zuordnen oder die SQL Server-Anmeldung Mary
erstellen, die das Kennwort B3r12-3x$098f6
ist, wenn die Anmeldung Mary
nicht vorhanden ist.
USE AdventureWorks2022;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO