sp_migrate_user_to_contained(Transact-SQL)
적용 대상: SQL Server
SQL Server 로그인에 매핑된 데이터베이스 사용자를 암호가 있는 포함된 데이터베이스 사용자로 변환합니다. 포함된 데이터베이스에서 이 절차를 사용하여 데이터베이스가 설치된 SQL Server 인스턴스에 대한 종속성을 제거합니다. sp_migrate_user_to_contained 암호 및 기본 언어와 같은 설정을 포함된 데이터베이스에 대해 별도로 관리할 수 있도록 사용자를 원래 SQL Server 로그인과 분리합니다. 포함된 데이터베이스를 SQL Server 데이터베이스 엔진 다른 인스턴스로 이동하기 전에 sp_migrate_user_to_contained 사용하여 현재 SQL Server 인스턴스 로그인에 대한 종속성을 제거할 수 있습니다.
참고 항목
효과를 되돌릴 수 없으므로 sp_migrate_user_to_contained 사용할 때는 주의해야 합니다. 이 절차는 포함된 데이터베이스에서만 사용됩니다. 자세한 내용은 포함된 데이터베이스를 참조하세요.
구문
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 마스터 데이터베이스에서 로그인을 사용하지 않도록 설정합니다. 로그인을 사용하지 않도록 설정할 때 연결하려면 연결 문자열 일부로 포함된 데이터베이스 이름을 초기 카탈로그로 제공해야 합니다.
반환 코드 값
0(성공) 또는 1(실패)
설명
sp_migrate_user_to_contained 로그인의 속성이나 사용 권한에 관계없이 암호로 포함된 데이터베이스 사용자를 만듭니다. 예를 들어 로그인을 사용하지 않도록 설정하거나 사용자가 데이터베이스에 대한 CONNECT 권한이 거부된 경우 프로시저가 성공할 수 있습니다.
sp_migrate_user_to_contained 다음과 같은 제한 사항이 있습니다.
사용자 이름은 아직 데이터베이스에 없는 이름이어야 합니다.
기본 제공 사용자(예: dbo 및 게스트)는 변환할 수 없습니다.
서명된 저장 프로시저의 EXECUTE AS 절에서 사용자를 지정할 수 없습니다.
사용자는 EXECUTE AS OWNER 절을 포함하는 저장 프로시저를 소유할 수 없습니다.
sp_migrate_user_to_contained 시스템 데이터베이스에서 사용할 수 없습니다.
보안
사용자를 마이그레이션할 때는 SQL Server 인스턴스에서 모든 관리자 로그인을 사용하지 않도록 설정하거나 삭제하지 않도록 주의해야 합니다. 모든 로그인이 삭제된 경우 시스템 관리자가 잠겨 있을 때 SQL Server에 연결을 참조 하세요.
BUILTIN\Administrators 로그인이 있는 경우 관리자는 관리자 권한으로 실행 옵션을 사용하여 애플리케이션을 시작하여 연결할 수 있습니다.
사용 권한
CONTROL SERVER 권한이 필요합니다.
예제
A. 단일 사용자 마이그레이션
다음 예제에서는 이름이 지정된 Barry
SQL 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 ;