Бөлісу құралы:


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 при блокировке системных администраторов".

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

Разрешения

Требуется разрешение 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 ;  

См. также

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