Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Konverterar en databasanvändare som mappas till en SQL Server-inloggning till en oberoende databasanvändare med lösenord. I en innesluten databas använder du den här proceduren för att ta bort beroenden på instansen av SQL Server där databasen är installerad.
sp_migrate_user_to_contained
separerar användaren från den ursprungliga SQL Server-inloggningen, så att inställningar som lösenord och standardspråk kan administreras separat för den inneslutna databasen.
sp_migrate_user_to_contained
kan användas innan du flyttar den inneslutna databasen till en annan instans av SQL Server Database Engine för att eliminera beroenden för aktuella SQL Server-instansinloggningar.
Försiktighet
Var försiktig när du använder sp_migrate_user_to_contained
eftersom du inte kan ändra effekten. Den här proceduren används endast i en innesluten databas. Mer information finns i inneslutna databaser.
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' }
[ ; ]
Argument
Viktig
Argument för utökade lagrade procedurer måste anges i den specifika ordning som beskrivs i avsnittet Syntax. Om parametrarna anges i fel ordning visas ett felmeddelande.
[ @username = ] N'användarnamn"
Namnet på en användare i den aktuella inneslutna databasen som mappas till en autentiserad SQL Server-inloggning. Värdet är sysname, med standardvärdet NULL
.
[ @rename = ] N'copy_login_name' | N'keep_name'
När en databasanvändare som baseras på en inloggning har ett annat användarnamn än inloggningsnamnet använder du keep_name
för att behålla databasanvändarnamnet under migreringen. Använd copy_login_name
för att skapa den nya inneslutna databasanvändaren med namnet på inloggningen i stället för användaren. När en databasanvändare baserat på en inloggning har samma användarnamn som inloggningsnamnet skapar båda alternativen den inneslutna databasanvändaren utan att ändra namnet.
[ @disablelogin = ] N'disable_login' | N'do_not_disable_login'
Används för att inaktivera inloggningen i master
-databasen. För att ansluta när inloggningen är inaktiverad måste anslutningen ange det inneslutna databasnamnet som initial catalog
som en del av anslutningssträngen.
Returnera kodvärden
0
(lyckades) eller 1
(fel).
Anmärkningar
sp_migrate_user_to_contained
skapar den inneslutna databasanvändaren med lösenord, oavsett egenskaper eller behörigheter för inloggningen. Proceduren kan till exempel lyckas om inloggningen är inaktiverad eller om användaren nekas CONNECT
behörighet till databasen.
sp_migrate_user_to_contained
har följande begränsningar.
- Användarnamnet kan inte redan finnas i databasen.
- Inbyggda användare, till exempel dbo och gäst, kan inte konverteras.
- Användaren kan inte anges i
EXECUTE AS
-satsen i en signerad lagrad procedur. - Användaren kan inte äga en lagrad procedur som innehåller
EXECUTE AS OWNER
-satsen. -
sp_migrate_user_to_contained
kan inte användas i en systemdatabas.
Säkerhet
När du migrerar användare bör du vara noga med att inte inaktivera eller ta bort alla administratörsinloggningar från instansen av SQL Server. Om alla inloggningar tas bort kan du läsa Anslut till SQL Server när systemadministratörer är utelåst.
Om BUILTIN\Administrators
inloggning finns kan administratörer ansluta genom att starta sitt program med alternativet Kör som administratör.
Behörigheter
Kräver behörigheten CONTROL SERVER
.
Exempel
A. Migrera en enskild användare
I följande exempel migreras en SQL Server-inloggning med namnet Barry
, till en innesluten databasanvändare med lösenord. Exemplet ändrar inte användarnamnet och behåller inloggningen som aktiverad.
EXEC sp_migrate_user_to_contained @username = N'Barry',
@rename = N'keep_name',
@disablelogin = N'do_not_disable_login';
B. Migrera alla databasanvändare med inloggningar till oberoende databasanvändare utan inloggningar
I följande exempel migreras alla användare som baseras på SQL Server-inloggningar till oberoende databasanvändare med lösenord. Exemplet exkluderar inloggningar som inte är aktiverade. Exemplet måste köras i den inneslutna databasen.
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;