Dela via


sp_migrate_user_to_contained (Transact-SQL)

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_containedeftersom 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;