sp_migrate_user_to_contained (Transact-SQL)

Применимо к:SQL Server

Преобразует пользователя базы данных, сопоставленного с именем входа SQL Server, в пользователя автономной базы данных с паролем. В автономной базе данных используйте эту процедуру для удаления зависимостей от экземпляра SQL Server, на котором установлена база данных. sp_migrate_user_to_contained отделяет пользователя от исходного имени входа SQL Server, чтобы такие параметры, как пароль и язык по умолчанию, можно администрировать отдельно для автономной базы данных. sp_migrate_user_to_contained можно использовать перед перемещением автономной базы данных в другой экземпляр SQL Server ядро СУБД для устранения зависимостей от текущих имен входа экземпляра SQL Server.

Примечание.

Будьте осторожны при использовании sp_migrate_user_to_contained, так как вы не сможете отменить эффект. Эта процедура используется только в автономной базе данных. Дополнительные сведения см. в разделе Contained Databases.

Синтаксис

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

Аргументы

[@username = ] N'user'
Имя пользователя в текущей автономной базе данных, сопоставленной с именем входа, прошедшим проверку подлинности SQL Server. Значение — sysname с значением NULL по умолчанию.

[@rename = ] N'copy_login_name'N'keep_name | '
Если пользователь базы данных на основе имени входа имеет другое имя пользователя, отличное от имени входа, используйте keep_name для сохранения имени пользователя базы данных во время миграции. Используйте copy_login_name для создания нового пользователя автономной базы данных с именем входа вместо пользователя. Если пользователь базы данных, созданный на основе имени входа, имеет имя, совпадающее с именем входа, то в обоих вариантах будет создан пользователь автономной базы данных без изменения имени.

[@disablelogin = ] N'disable_login'N'do_not_disable_login | '
disable_login отключает имя входа в базе данных master. Чтобы подключиться при отключении входа, подключение должно указать имя автономной базы данных в качестве начального каталога в рамках строка подключения.

Значения кода возврата

0 (успешное завершение) или 1 (неуспешное завершение)

Замечания

sp_migrate_user_to_contained создает пользователя автономной базы данных с паролем независимо от свойств или разрешений для входа. Например, процедура может завершиться успешно, если имя входа отключено или пользователь отказано в разрешении CONNECT для базы данных.

sp_migrate_user_to_contained имеет следующие ограничения.

  • Имя пользователя не должно уже существовать в базе данных.

  • Преобразование встроенных пользователей, таких как dbo и guest, невозможно.

  • Пользователь не может быть указан в предложении EXECUTE AS подписанной хранимой процедуры.

  • Пользователь не может владеть хранимой процедурой, которая включает предложение EXECUTE AS OWNER .

  • sp_migrate_user_to_contained нельзя использовать в системной базе данных.

Безопасность

При миграции пользователей не следует отключать или удалять все имена входа администратора из экземпляра SQL Server. Если все имена входа удалены, см. статью Подключение sql Server При блокировке системных Администратор istratorов.

Если используется имя входа BUILDIN\Администратор istrator, администраторы могут подключаться, запуская приложение с помощью параметра Запуска от имени Администратор istrator.

Разрешения

Требуется разрешение CONTROL SERVER .

Примеры

А. Перенос одного пользователя

В следующем примере выполняется перенос имени входа BarrySQL Server на пользователя автономной базы данных с паролем. Пример не изменяет имя пользователя и сохраняет имя входа в качестве включенного.

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

B. Преобразование всех пользователей базы данных с именами входа в пользователей автономной базы данных без имен входа

В следующем примере все пользователи, основанные на имени входа SQL Server, переносятся на пользователей автономной базы данных с паролями. Этот пример исключает имена входа, которые не были включены. Этот пример должен выполняться в автономной базе данных.

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 ;  

См. также

Переход на частично автономную базу данных
Автономные базы данных