sp_migrate_user_to_contained (Transact-SQL)
Gilt für:SQL Server
Konvertiert einen Datenbankbenutzer, der einer SQL Server Anmeldung zugeordnet ist, in einen eigenständigen Datenbankbenutzer mit Kennwort. Verwenden Sie in einer eigenständigen 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 vor dem Verschieben der enthaltenen Datenbank in eine andere Instanz der SQL Server-Datenbank-Engine verwendet werden, um Abhängigkeiten von den aktuellen SQL Server Instanzanmeldungen auszuschließen.
Hinweis
Seien Sie vorsichtig, wenn Sie sp_migrate_user_to_contained verwenden, da Sie den Effekt nicht umkehren können. Dieses Verfahren wird nur in einer eigenständigen 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'
Der Name eines Benutzers in der aktuellen enthaltenen Datenbank, der mit einem authentifizierten SQL Server-Anmeldenamen verknüpft ist. Der Wert ist sysname, wobei der Standardwert NULL ist.
[@rename = ] N'copy_login_name' | N'keep_name'
Wenn ein Datenbankbenutzer, der auf einer Anmeldung basiert, einen anderen Benutzernamen als der Anmeldename hat, verwenden Sie keep_name , um den Datenbankbenutzernamen während der Migration beizubehalten. Verwenden Sie copy_login_name , um den neuen eigenständigen Datenbankbenutzer mit dem Namen des Anmeldenamens 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 Namen der enthaltenen Datenbank als Anfangskatalog als Teil der Verbindungszeichenfolge angeben.
Rückgabecodewerte
„0“ (erfolgreich) oder „1“ (fehlerhaft)
Bemerkungen
sp_migrate_user_to_contained erstellt den eigenständigen Datenbankbenutzer mit Kennwort, unabhängig von den Eigenschaften oder Berechtigungen der Anmeldung. Die Prozedur kann beispielsweise erfolgreich sein, wenn die Anmeldung deaktiviert ist oder wenn dem Benutzer die CONNECT-Berechtigung für die Datenbank verweigert wird.
sp_migrate_user_to_contained gelten 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 können nicht in einer Systemdatenbank verwendet werden.
Sicherheit
Achten Sie beim Migrieren von Benutzern darauf, nicht alle Administratoranmeldungen aus der Instanz von SQL Server zu deaktivieren oder zu löschen. Wenn alle Anmeldungen gelöscht werden, finden Sie weitere Informationen unter Herstellen einer Verbindung mit SQL Server Wenn Systemadministratoren gesperrt sind.
Wenn die Anmeldung BUILTIN\Administrators 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 namens Barry
zu einem eigenständigen Datenbankbenutzer mit Kennwort migriert. Im Beispiel wird der Benutzername nicht geändert, und die Anmeldung wird als aktiviert beibehalten.
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 ;
Weitere Informationen
Migrieren zu einer partiell eigenständigen Datenbank
Eigenständige Datenbanken