Sdílet prostřednictvím


sp_migrate_user_to_contained (Transact-SQL)

platí pro:SQL Server

Převede uživatele databáze, který je namapován na přihlášení k SQL Serveru, na uživatele databáze s omezením s heslem. V obsažené databázi pomocí tohoto postupu odeberte závislosti na instanci SYSTÉMU SQL Server, kde je databáze nainstalována. sp_migrate_user_to_contained uživatele odděluje od původního přihlášení k SQL Serveru, aby bylo možné nastavení, jako je heslo a výchozí jazyk, spravovat samostatně pro databázi s omezením.

sp_migrate_user_to_contained lze použít před přesunutím obsažené databáze do jiné instance databázového stroje SQL Serveru, aby se eliminovaly závislosti na aktuálních přihlášeních instancí SQL Serveru.

Opatrnost

Při použití sp_migrate_user_to_containedbuďte opatrní, protože efekt nebudete moct vrátit zpět. Tento postup se používá pouze v obsažené databázi. Další informace naleznete v tématu obsažené databáze.

Syntax

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

Důležitý

Argumenty rozšířených uložených procedur musí být zadány v určitém pořadí, jak je popsáno v části Syntaxe. Pokud jsou parametry zadány mimo pořadí, dojde k chybové zprávě.

[ @username = ] N'uživatelské jméno'

Jméno uživatele v aktuální databázi s omezením, která je namapovaná na ověřené přihlášení k SQL Serveru. Hodnota je sysname, s výchozím NULL.

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

Pokud má uživatel databáze na základě přihlášení jiné uživatelské jméno než přihlašovací jméno, použijte keep_name k zachování uživatelského jména databáze během migrace. Pomocí copy_login_name můžete místo uživatele vytvořit nového uživatele databáze s omezením s názvem přihlášení. Pokud má uživatel databáze na základě přihlášení stejné uživatelské jméno jako přihlašovací jméno, obě možnosti vytvoří uživatele databáze s omezením beze změny jména.

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

Slouží k zakázání přihlášení v databázi master. Pokud se chcete připojit, když je přihlášení zakázané, musí připojení zadat název obsažené databáze jako initial catalog jako součást připojovacího řetězce.

Návratové hodnoty kódu

0 (úspěch) nebo 1 (selhání).

Poznámky

sp_migrate_user_to_contained vytvoří uživatele databáze s omezením s heslem bez ohledu na vlastnosti nebo oprávnění přihlášení. Tento postup může být například úspěšný, pokud je přihlášení zakázané nebo pokud je uživatel odepřen CONNECT oprávnění k databázi.

sp_migrate_user_to_contained má následující omezení.

  • Uživatelské jméno v databázi ještě neexistuje.
  • Předdefinovaní uživatelé, například dbo a hosta, nejde převést.
  • Uživatele nelze zadat v klauzuli EXECUTE AS podepsané uložené procedury.
  • Uživatel nemůže vlastnit uloženou proceduru, která obsahuje klauzuli EXECUTE AS OWNER.
  • sp_migrate_user_to_contained nelze použít v systémové databázi.

Bezpečnost

Při migraciuživatelůch Pokud jsou všechna přihlášení odstraněna, přečtěte si téma Připojení k SQL Serveru, pokud jsou správci systému uzamčeni.

Pokud je k dispozici BUILTIN\Administrators přihlášení, můžou se správci připojit spuštěním aplikace pomocí možnosti Spustit jako správce.

Dovolení

Vyžaduje oprávnění CONTROL SERVER.

Příklady

A. Migrace jednoho uživatele

Následující příklad migruje přihlašovací jméno SQL Serveru s názvem Barry, na uživatele databáze s omezením s heslem. V příkladu se nezmění uživatelské jméno a přihlašovací jméno se zachová jako povolené.

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

B. Migrace všech uživatelů databáze s přihlášeními na uživatele databáze s omezením bez přihlášení

Následující příklad migruje všechny uživatele založené na přihlášeních SQL Serveru k uživatelům databáze s hesly. Příklad vylučuje přihlášení, která nejsou povolená. Příklad musí být proveden v obsažené databázi.

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;