sp_migrate_user_to_contained (Transact-SQL)

Gilt für:SQL Server

Konvertiert einen Datenbankbenutzer, der einer SQL Server-Anmeldung zugeordnet ist, in einen enthaltenen Datenbankbenutzer mit Kennwort. Verwenden Sie in einer enthaltenen Datenbank dieses Verfahren, um Abhängigkeiten von der Instanz von SQL Server zu entfernen, in der die Datenbank installiert ist. sp_migrate_user_to_contained trennt den Benutzer von der ursprünglichen SQL Server-Anmeldung, sodass Einstellungen wie Kennwort und Standardsprache separat für die enthaltene Datenbank verwaltet werden können. sp_migrate_user_to_contained können verwendet werden, bevor die enthaltene Datenbank in eine andere Instanz der SQL Server-Datenbank-Engine verschoben werden kann, um Abhängigkeiten von den aktuellen SQL Server-Instanzenanmeldungen zu beseitigen.

Hinweis

Achten Sie bei der Verwendung von sp_migrate_user_to_contained darauf, dass Sie den Effekt nicht umkehren können. Dieses Verfahren wird nur in einer enthaltenen Datenbank verwendet. Weitere Informationen finden Sie unter Contained Databases.

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' }   

Argumente

[@username = ] N'user'
Name eines Benutzers in der aktuellen enthaltenen Datenbank, die einer authentifizierten SQL Server-Anmeldung zugeordnet ist. Der Wert ist "sysname", wobei der Standardwert NULL ist.

[@rename = ] N'copy_login_name'keep_name | '
Wenn ein Datenbankbenutzer, der auf einer Anmeldung basiert, über einen anderen Benutzernamen als den Anmeldenamen verfügt, verwenden Sie keep_name , um den Datenbankbenutzernamen während der Migration beizubehalten. Verwenden Sie copy_login_name , um den neuen enthaltenen Datenbankbenutzer mit dem Namen der Anmeldung anstelle des Benutzers zu erstellen. Wenn der Benutzername eines Datenbankbenutzers dem Anmeldenamen entspricht, wird mit beiden Optionen der Benutzer der enthaltenen Datenbank erstellt, ohne den Namen zu ändern.

[@disablelogin = ] N'disable_login'N'do_not_disable_login | '
disable_login deaktiviert die Anmeldung in der Masterdatenbank. Um eine Verbindung herzustellen, wenn die Anmeldung deaktiviert ist, muss die Verbindung den enthaltenen Datenbanknamen als Anfangskatalog als Teil der Verbindungszeichenfolge bereitstellen.

Rückgabecodewerte

„0“ (erfolgreich) oder „1“ (fehlerhaft)

Hinweise

sp_migrate_user_to_contained erstellt den enthaltenen Datenbankbenutzer mit Kennwort, unabhängig von den Eigenschaften oder Berechtigungen der Anmeldung. Die Prozedur kann beispielsweise erfolgreich ausgeführt werden, wenn die Anmeldung deaktiviert ist oder der Benutzer die CONNECT-Berechtigung für die Datenbank verweigert.

sp_migrate_user_to_contained hat die folgenden Einschränkungen.

  • Der Benutzername darf nicht bereits in der Datenbank vorhanden sein.

  • Integrierte Benutzer wie dbo und guest, können nicht konvertiert werden.

  • Der Benutzer kann nicht in der EXECUTE AS-Klausel einer signierten gespeicherten Prozedur angegeben werden.

  • Der Benutzer kann keine gespeicherte Prozedur besitzen, die die EXECUTE AS OWNER-Klausel enthält.

  • sp_migrate_user_to_contained kann nicht in einer Systemdatenbank verwendet werden.

Sicherheit

Achten Sie beim Migrieren von Benutzern darauf, alle Administratoranmeldungen nicht aus der SQL Server-Instanz zu deaktivieren oder zu löschen. Wenn alle Anmeldungen gelöscht werden, lesen Sie Verbinden zu SQL Server, wenn Systemadministratoren gesperrt sind.

Wenn die BUILTIN\Administrators-Anmeldung vorhanden ist, können Administratoren eine Verbindung herstellen, indem sie ihre Anwendung mit der Option "Als Administrator ausführen" starten.

Berechtigungen

Erfordert die CONTROL SERVER -Berechtigung.

Beispiele

.A Migrieren eines einzelnen Benutzers

Im folgenden Beispiel wird eine SQL Server-Anmeldung mit dem Namen Barryzu einem enthaltenen Datenbankbenutzer mit Kennwort migriert. Das Beispiel ändert den Benutzernamen nicht und behält die Anmeldung als aktiviert bei.

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

B. Migrieren aller Datenbankbenutzer mit Anmeldenamen zu Benutzern in eigenständigen Datenbanken ohne Anmeldenamen

Im folgenden Beispiel werden alle Benutzer migriert, die auf SQL Server-Anmeldungen basieren, in enthaltene Datenbankbenutzer mit Kennwörtern. Nicht berücksichtigt werden Anmeldungen, die nicht aktiviert sind. Das Beispiel muss in der enthaltenen Datenbank ausgeführt werden.

DECLARE @username sysname ;  
DECLARE user_cursor CURSOR  
    FOR   
        SELECT dp.name   
        FROM sys.database_principals AS dp  
        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 ;  

Weitere Informationen

Migrieren zu einer partiell eigenständigen Datenbank
Eigenständige Datenbanken