Udostępnij za pośrednictwem


sp_change_users_login (Transact-SQL)

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 varbinary(85) 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, guestlub 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