sp_migrate_user_to_contained(Transact-SQL)

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 [ @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 권한이 필요합니다.

1.단일 사용자 마이그레이션

다음 예에서는 Barry라는 SQL Server 로그인을 암호를 포함하는 포함된 데이터베이스 사용자로 마이그레이션합니다. 이 예에서는 사용자 이름이 변경되지 않도록 유지하고 로그인을 사용 가능한 상태로 유지합니다.

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

2.로그인을 포함하는 모든 데이터베이스 사용자를 로그인을 포함하지 않는 포함된 데이터베이스 사용자로 마이그레이션

다음 예에서는 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 ;

참고 항목

개념

부분적으로 포함된 데이터베이스로 마이그레이션

포함된 데이터베이스