Delen via


sp_migrate_user_to_contained (Transact-SQL)

van toepassing op:SQL Server-

Converteert een databasegebruiker die is toegewezen aan een SQL Server-aanmelding, naar een ingesloten databasegebruiker met een wachtwoord. Gebruik deze procedure in een ingesloten database om afhankelijkheden te verwijderen van het exemplaar van SQL Server waarop de database is geïnstalleerd. sp_migrate_user_to_contained scheidt de gebruiker van de oorspronkelijke SQL Server-aanmelding, zodat instellingen zoals wachtwoord en standaardtaal afzonderlijk voor de ingesloten database kunnen worden beheerd.

sp_migrate_user_to_contained kan worden gebruikt voordat u de ingesloten database naar een ander exemplaar van de SQL Server Database Engine verplaatst om afhankelijkheden van de huidige aanmeldingen van het SQL Server-exemplaar te elimineren.

Voorzichtigheid

Wees voorzichtig bij het gebruik van sp_migrate_user_to_contained, omdat u het effect niet kunt omkeren. Deze procedure wordt alleen gebruikt in een ingesloten database. Zie Ingesloten databasesvoor meer informatie.

Syntaxis

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' }
[ ; ]

Argumenten

Belangrijk

Argumenten voor uitgebreide opgeslagen procedures moeten worden ingevoerd in de specifieke volgorde, zoals beschreven in de sectie Syntaxis. Als de parameters niet in de volgorde zijn ingevoerd, treedt er een foutbericht op.

[ @username = ] N'gebruikersnaam'

De naam van een gebruiker in de huidige ingesloten database die is toegewezen aan een geverifieerde SQL Server-aanmelding. De waarde is sysname, met een standaardwaarde van NULL.

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

Wanneer een databasegebruiker op basis van een aanmelding een andere gebruikersnaam heeft dan de aanmeldingsnaam, gebruikt u keep_name om de gebruikersnaam van de database tijdens de migratie te behouden. Gebruik copy_login_name om de nieuwe ingesloten databasegebruiker te maken met de naam van de aanmelding, in plaats van de gebruiker. Wanneer een databasegebruiker op basis van een aanmelding dezelfde gebruikersnaam heeft als de aanmeldingsnaam, maken beide opties de ingesloten databasegebruiker zonder de naam te wijzigen.

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

Wordt gebruikt om de aanmelding in de master-database uit te schakelen. Als u verbinding wilt maken wanneer de aanmelding is uitgeschakeld, moet de verbinding de naam van de ingesloten database opgeven als de initial catalog als onderdeel van de verbindingsreeks.

Codewaarden retourneren

0 (geslaagd) of 1 (mislukt).

Opmerkingen

sp_migrate_user_to_contained maakt de ingesloten databasegebruiker met een wachtwoord, ongeacht de eigenschappen of machtigingen van de aanmelding. De procedure kan bijvoorbeeld slagen als de aanmelding is uitgeschakeld of als de gebruiker de CONNECT machtiging voor de database wordt geweigerd.

sp_migrate_user_to_contained heeft de volgende beperkingen.

  • De gebruikersnaam kan nog niet bestaan in de database.
  • Ingebouwde gebruikers, bijvoorbeeld dbo- en gast-, kunnen niet worden geconverteerd.
  • De gebruiker kan niet worden opgegeven in de EXECUTE AS component van een ondertekende opgeslagen procedure.
  • De gebruiker kan geen opgeslagen procedure hebben die de EXECUTE AS OWNER component bevat.
  • sp_migrate_user_to_contained kan niet worden gebruikt in een systeemdatabase.

Veiligheid

Wanneer u gebruikers migreert, moet u niet alle aanmeldingen van de beheerder uitschakelen of verwijderen uit het exemplaar van SQL Server. Als alle aanmeldingen worden verwijderd, raadpleegt u Verbinding maken met SQL Server wanneer systeembeheerders zijn vergrendeld.

Als de BUILTIN\Administrators aanmelding aanwezig is, kunnen beheerders verbinding maken door hun toepassing te starten met behulp van de optie Als administrator uitvoeren.

Machtigingen

Hiervoor is de machtiging CONTROL SERVER vereist.

Voorbeelden

Een. Eén gebruiker migreren

In het volgende voorbeeld wordt een SQL Server-aanmelding met de naam Barrygemigreerd naar een ingesloten databasegebruiker met een wachtwoord. In het voorbeeld wordt de gebruikersnaam niet gewijzigd en blijft de aanmelding ingeschakeld.

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

B. Alle databasegebruikers met aanmeldingen migreren naar ingesloten databasegebruikers zonder aanmeldingen

In het volgende voorbeeld worden alle gebruikers gemigreerd die zijn gebaseerd op SQL Server-aanmeldingen naar ingesloten databasegebruikers met wachtwoorden. In het voorbeeld worden aanmeldingen uitgesloten die niet zijn ingeschakeld. Het voorbeeld moet worden uitgevoerd in de ingesloten database.

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;