sp_migrate_user_to_contained (Transact-SQL)
Преобразует пользователя базы данных, сопоставленного с именем входа SQL Server, в пользователя автономной базы данных с паролем. В автономной базе данных эта процедура позволяет удалить зависимости от экземпляра SQL Server, на котором установлена база данных. Хранимая процедура sp_migrate_user_to_contained отделяет пользователя от первоначального имени входа SQL Server, таким образом обеспечивая возможность отдельного управления его паролем, языком по умолчанию и другими параметрами для автономной базы данных. Процедуру sp_migrate_user_to_contained можно применить перед переносом автономной базы данных на другой экземпляр компонента Компонент SQL Server Database Engine, чтобы устранить зависимости от имен входа текущего экземпляра SQL Server.
Примечание. Эта процедура используется только в автономной базе данных. Дополнительные сведения см. в разделе Автономные базы данных.
Применимо для следующих объектов: SQL Server (начиная с SQL Server 2012 до текущей версии). |
Синтаксис
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. Для подключения с отключенным именем входа необходимо указать в строке соединения имя автономной базы данных в качестве параметра initial catalog (начального каталога).
Значения кода возврата
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 в случае, если доступ системных администраторов заблокирован.
Если имеется имя входа BUILTIN\Administrators, то администраторы могут соединиться с базой данных, запустив свое приложение с помощью параметра Запуск от имени администратора.
Разрешения
Требуется разрешение CONTROL SERVER.
Примеры
А.Перенос одного пользователя
В следующем примере производится миграция имени входа SQL Server Barry в пользователя автономной базы данных с паролем. В этом примере не изменяется имя пользователя и имя входа остается активным (включенным).
sp_migrate_user_to_contained
@username = N'Barry',
@rename = N'keep_name',
@disablelogin = N'do_not_disable_login' ;
Б.Преобразование всех пользователей базы данных с именами входа в пользователей автономной базы данных без имен входа
В следующем примере выполняется миграция всех пользователей, основанных на имени входа 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 ;