Udostępnij za pośrednictwem


sp_migrate_user_to_contained (Transact-SQL)

Dotyczy:programu SQL Server

Konwertuje użytkownika bazy danych mapowanego na identyfikator logowania programu SQL Server do zawartego użytkownika bazy danych z hasłem. W zawartej bazie danych użyj tej procedury, aby usunąć zależności od wystąpienia programu SQL Server, w którym zainstalowano bazę danych. sp_migrate_user_to_contained oddziela użytkownika od oryginalnego identyfikatora logowania programu SQL Server, dzięki czemu ustawienia, takie jak hasło i język domyślny, mogą być administrowane oddzielnie dla zawartej bazy danych.

sp_migrate_user_to_contained można użyć przed przeniesieniem zawartej bazy danych do innego wystąpienia aparatu bazy danych programu SQL Server w celu wyeliminowania zależności od bieżących identyfikatorów logowania wystąpienia programu SQL Server.

Ostrożność

Należy zachować ostrożność podczas korzystania z sp_migrate_user_to_contained, ponieważ nie będzie można odwrócić efektu. Ta procedura jest używana tylko w zawartej bazie danych. Aby uzyskać więcej informacji, zobacz Zawarte bazy danych.

Składnia

sp_migrate_user_to_contained [ @username = ] N'user' ,
    [ @rename = ] { N'copy_login_name' | N'keep_name' } ,
    [ @disablelogin = ] { N'disable_login' | N'do_not_disable_login' }
[ ; ]

Argumenty

Ważny

Argumenty dla rozszerzonych procedur składowanych należy wprowadzić w określonej kolejności zgodnie z opisem w sekcji składni. Jeśli parametry są wprowadzane poza kolejnością, wystąpi komunikat o błędzie.

[ @username = ] N'nazwa użytkownika"

Nazwa użytkownika w bieżącej zawartej bazie danych, która jest mapowana na uwierzytelnione logowanie programu SQL Server. Wartość to nazwa systemuz wartością domyślną NULL.

[ @rename = ] N'copy_login_name' | N'keep_name'

Gdy użytkownik bazy danych na podstawie nazwy logowania ma inną nazwę użytkownika niż nazwa logowania, użyj keep_name, aby zachować nazwę użytkownika bazy danych podczas migracji. Użyj copy_login_name, aby utworzyć nowego użytkownika zawartej bazy danych o nazwie logowania zamiast użytkownika. Gdy użytkownik bazy danych na podstawie nazwy logowania ma taką samą nazwę użytkownika jak nazwa logowania, obie opcje tworzą użytkownika zawartej bazy danych bez zmiany nazwy.

[ @disablelogin = ] N'disable_login' | N'do_not_disable_login'

Służy do wyłączania logowania w bazie danych master. Aby nawiązać połączenie po wyłączeniu logowania, połączenie musi podać nazwę zawartej bazy danych jako initial catalog jako część parametrów połączenia.

Zwracanie wartości kodu

0 (powodzenie) lub 1 (niepowodzenie).

Uwagi

sp_migrate_user_to_contained tworzy użytkownika zawartej bazy danych z hasłem, niezależnie od właściwości lub uprawnień logowania. Na przykład procedura może zakończyć się powodzeniem, jeśli logowanie jest wyłączone lub jeśli użytkownik odmówi CONNECT uprawnienia do bazy danych.

sp_migrate_user_to_contained ma następujące ograniczenia.

  • Nazwa użytkownika nie może jeszcze istnieć w bazie danych.
  • Wbudowani użytkownicy, na przykład dbo i gościa, nie mogą być konwertowani.
  • Nie można określić użytkownika w klauzuli EXECUTE AS podpisanej procedury składowanej.
  • Użytkownik nie może być właścicielem procedury składowanej zawierającej klauzulę EXECUTE AS OWNER.
  • sp_migrate_user_to_contained nie można używać w systemowej bazie danych.

Bezpieczeństwo

Podczas migracji użytkowników należy zachować ostrożność, aby nie wyłączać ani usuwać wszystkich logowań administratora z wystąpienia programu SQL Server. Jeśli wszystkie identyfikatory logowania zostaną usunięte, zobacz Connect to SQL Server when system administrators are locked out.

Jeśli logowanie BUILTIN\Administrators jest obecne, administratorzy mogą nawiązać połączenie, uruchamiając aplikację przy użyciu opcji Uruchom jako administrator.

Uprawnienia

Wymaga uprawnienia CONTROL SERVER.

Przykłady

A. Migrowanie pojedynczego użytkownika

W poniższym przykładzie migrowana jest nazwa logowania programu SQL Server o nazwie Barrydo użytkownika zawartej bazy danych z hasłem. Przykład nie zmienia nazwy użytkownika i zachowuje identyfikator logowania jako włączony.

EXEC sp_migrate_user_to_contained @username = N'Barry',
    @rename = N'keep_name',
    @disablelogin = N'do_not_disable_login';

B. Migrowanie wszystkich użytkowników bazy danych z identyfikatorami logowania do użytkowników zawartej bazy danych bez logowania

Poniższy przykład umożliwia migrację wszystkich użytkowników opartych na identyfikatorach logowania programu SQL Server do użytkowników zawartej bazy danych z hasłami. Przykład wyklucza logowania, które nie są włączone. Przykład należy wykonać w zawartej bazie danych.

DECLARE @username SYSNAME;

DECLARE user_cursor CURSOR
FOR
SELECT dp.name
FROM sys.database_principals AS dp
INNER JOIN sys.server_principals AS sp
    ON dp.sid = sp.sid
WHERE dp.authentication_type = 1
    AND sp.is_disabled = 0;

OPEN user_cursor

FETCH NEXT
FROM user_cursor
INTO @username

WHILE @@FETCH_STATUS = 0
BEGIN
    EXECUTE sp_migrate_user_to_contained @username = @username,
        @rename = N'keep_name',
        @disablelogin = N'disable_login';

    FETCH NEXT
    FROM user_cursor
    INTO @username
END

CLOSE user_cursor;

DEALLOCATE user_cursor;