sp_migrate_user_to_contained (Transact-SQL)

Konvertiert einen Datenbankbenutzer, der mit einem SQL Server-Anmeldenamen verknüpft ist, in den Benutzer einer enthaltenen Datenbank mit Kennwort. In einer eigenständigen Datenbank können Sie mit diesem Verfahren Abhängigkeiten für die Instanz von SQL Server entfernen, in der die Datenbank installiert ist. sp_migrate_user_to_contained trennt den Benutzer vom ursprünglichen SQL Server-Anmeldenamen, damit Einstellungen wie Kennwort und Standardsprache für die eigenständige Datenbank separat verwaltet werden können. sp_migrate_user_to_contained kann verwendet werden, bevor die eigenständige Datenbank in eine andere Instanz von SQL Server Database Engine (Datenbankmodul) verschoben wird, um Abhängigkeiten von Anmeldenamen für die aktuelle Instanz von SQL Server zu entfernen.

Hinweis Dieses Verfahren wird nur in einer enthaltenen Datenbank verwendet. Weitere Informationen finden Sie unter Enthaltene Datenbank.

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'
    Der Name eines Benutzers in der aktuellen eigenständigen Datenbank, der mit einem authentifizierten SQL Server-Anmeldenamen verknüpft ist. Der Wert ist sysname, und die Standardeinstellung ist NULL.

  • [@rename = ] N'copy_login_name' | N'keep_name'
    Wenn sich der Benutzername eines Datenbankbenutzers vom Anmeldenamen unterscheidet, behalten Sie den Namen des Datenbankbenutzers mit keep_name während der Migration bei. Erstellen Sie mit copy_login_name den neuen Benutzer für die enthaltene Datenbank mit dem Anmeldenamen und nicht mit dem Benutzernamen. 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 master-Datenbank. Um eine Verbindung herzustellen, wenn die Anmeldung deaktiviert wird, muss die Verbindung den Namen der eigenständigen Datenbank im Rahmen der Verbindungszeichenfolge als initial catalog angeben.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Hinweise

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

sp_migrate_user_to_contained weist folgende Einschränkungen auf.

  • 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 einschließt.

  • sp_migrate_user_to_contained kann nicht in einer Systemdatenbank verwendet werden.

Sicherheit

Achten Sie beim Migrieren von Benutzern darauf, dass nicht alle Administratoranmeldungen von der Instanz von SQL Server gelöscht werden. Wenn alle Anmeldungen gelöscht werden, finden Sie unter Herstellen einer Verbindung mit SQL Server, wenn Systemadministratoren gesperrt sind weitere Informationen.

Wenn die BUILTIN\Administrators-Anmeldung vorhanden ist, können Administratoren eine Verbindung herstellen, indem sie die 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 der SQL Server-Anmeldename Barry in den Benutzer einer enthaltenen Datenbankbenutzer mit Kennwort migriert. Der Benutzername wird im Beispiel nicht geändert, und der Anmeldename ist weiterhin aktiviert.

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, die auf SQL Server-Anmeldungen basieren, in Benutzer enthaltener Datenbanken mit Kennwörtern migriert. 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 ;

Siehe auch

Konzepte

Migrieren zu einer partiell eigenständigen Datenbank

Enthaltene Datenbank