Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu SQL Server
Mapuje istniejącego użytkownika bazy danych na identyfikator logowania programu SQL Server.
Ważny
Ta funkcja zostanie usunięta w przyszłej wersji programu SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji. Zamiast tego użyj ALTER USER.
Transact-SQL konwencje składni
Składnia
sp_change_users_login
[ @Action = ] 'Action'
[ , [ @UserNamePattern = ] N'UserNamePattern' ]
[ , [ @LoginName = ] N'LoginName' ]
[ , [ @Password = ] N'Password' ]
[ ; ]
Argumenty
[ @Action = ] "Akcja"
Opisuje akcję do wykonania procedury składowanej. @Action jest varchar(10), bez wartości domyślnej i może mieć jedną z następujących wartości.
Wartość | Opis |
---|---|
Auto_Fix |
Łączy wpis użytkownika w widoku katalogu systemu sys.database_principals w bieżącej bazie danych z nazwą logowania programu SQL Server o tej samej nazwie. Jeśli logowanie o tej samej nazwie nie istnieje, zostanie utworzony. Sprawdź wynik z instrukcji Auto_Fix , aby potwierdzić, że w rzeczywistości dokonano poprawnego linku. Unikaj używania Auto_Fix w sytuacjach wrażliwych na zabezpieczenia.Jeśli używasz Auto_Fix , musisz określić @UserNamePattern i @Password, jeśli logowanie jeszcze nie istnieje, w przeciwnym razie należy określić @UserNamePattern, ale @Password jest ignorowane.
@LoginName musi być NULL .
@UserNamePattern musi być prawidłowym użytkownikiem w bieżącej bazie danych. Nazwa logowania nie może być zamapowana na innego użytkownika. |
Report |
Wyświetla listę użytkowników i odpowiednie identyfikatory zabezpieczeń (SID) w bieżącej bazie danych, które nie są połączone z żadnym identyfikatorem logowania.
@UserNamePattern, @LoginNamei @Password muszą być NULL lub nie są określone.Aby zastąpić opcję raportu zapytaniem przy użyciu tabel systemowych, porównaj wpisy w sys.server_principals z wpisami w sys.database_principals . |
Update_One |
Łączy określone @UserNamePattern w bieżącej bazie danych z istniejącym programem SQL Server @LoginName. należy określić @UserNamePattern i @LoginName.
@Password musi być NULL lub nie jest określony. |
[ @UserNamePattern = ] N'UserNamePattern'
Nazwa użytkownika w bieżącej bazie danych.
@UserNamePattern jest nazwa systemuz wartością domyślną NULL
.
[ @LoginName = ] N'LoginName'
Nazwa logowania programu SQL Server.
@LoginName jest nazwa systemu, z wartością domyślną NULL
.
[ @Password = ] N'password'
Hasło przypisane do nowego identyfikatora logowania programu SQL Server utworzonego przez określenie Auto_Fix
.
@Password jest sysname i nie można NULL
. Jeśli pasujący identyfikator logowania już istnieje, użytkownik i identyfikator logowania są mapowane, a @Password jest ignorowany. Jeśli pasujący identyfikator logowania nie istnieje, sp_change_users_login
utworzy nowy identyfikator logowania programu SQL Server i przypisze @Password jako hasło dla nowego identyfikatora logowania.
Ważny
Zawsze używaj silnego hasła.
Zwracanie wartości kodu
0
(powodzenie) lub 1
(niepowodzenie).
Zestaw wyników
Nazwa kolumny | Typ danych | Opis |
---|---|---|
UserName |
nazwa systemu | Nazwa użytkownika bazy danych. |
UserSID |
|
Identyfikator zabezpieczeń użytkownika. |
Uwagi
Użyj sp_change_users_login
, aby połączyć użytkownika bazy danych w bieżącej bazie danych z identyfikatorem logowania programu SQL Server. Jeśli logowanie użytkownika ulegnie zmianie, użyj sp_change_users_login
, aby połączyć użytkownika z nowym logowaniem bez utraty uprawnień użytkownika. Nie można nowego sa
, a @UserNamePattern nie może być dbo
, guest
lub użytkownik INFORMATION_SCHEMA
.
sp_change_users_login
nie można używać do mapowania użytkowników bazy danych na podmioty zabezpieczeń, certyfikaty lub klucze asymetryczne na poziomie systemu Windows.
sp_change_users_login
nie można używać z identyfikatorem logowania programu SQL Server utworzonym na podstawie podmiotu zabezpieczeń systemu Windows lub użytkownika utworzonego przy użyciu CREATE USER WITHOUT LOGIN
.
sp_change_users_login
nie można wykonać w ramach transakcji zdefiniowanej przez użytkownika.
Uprawnienia
Wymaga członkostwa w db_owner stałej roli bazy danych. Tylko członkowie sysadmin stałej roli serwera mogą określić opcję Auto_Fix
.
Przykłady
Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2022
lub AdventureWorksDW2022
, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.
Odp. Pokaż raport bieżącego użytkownika do mapowań logowania
Poniższy przykład tworzy raport użytkowników w bieżącej bazie danych i ich identyfikatorów zabezpieczeń (SID).
EXECUTE sp_change_users_login 'Report';
B. Mapuj użytkownika bazy danych na nowe logowanie do programu SQL Server
W poniższym przykładzie użytkownik bazy danych jest skojarzony z nowym identyfikatorem logowania programu SQL Server. Użytkownik bazy danych MB-Sales
, który na początku jest mapowany na inne logowanie, jest mapowany ponownie na logowanie MaryB
. Zastąp <password>
ciąg silnym hasłem.
--Create the new login.
CREATE LOGIN MaryB WITH PASSWORD = '<password>';
GO
--Map database user MB-Sales to login MaryB.
USE AdventureWorks2022;
GO
EXECUTE sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO
C. Automatycznie mapuj użytkownika na identyfikator logowania i w razie potrzeby utwórz nowe dane logowania
W poniższym przykładzie pokazano, jak zamapować Auto_Fix
istniejącego użytkownika na identyfikator logowania o tej samej nazwie lub utworzyć identyfikator logowania Mary
programu SQL Server przy użyciu hasła, jeśli logowanie Mary
nie istnieje. Zastąp <password>
ciąg silnym hasłem.
USE AdventureWorks2022;
GO
EXECUTE sp_change_users_login 'Auto_Fix', 'Mary', NULL, '<password>';
GO