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_contained
buď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;