다음을 통해 공유


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때는 주의해야 합니다. 이 절차는 포함된 데이터베이스에서만 사용됩니다. 자세한 내용은 포함된 데이터베이스를 참조하세요.

구문

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

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'

데이터베이스에서 master 로그인을 사용하지 않도록 설정하는 데 사용됩니다. 로그인을 사용하지 않도록 설정할 때 연결하려면 연결 문자열 일부로 포함된 데이터베이스 이름을 initial catalog 제공해야 합니다.

반환 코드 값

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. 단일 사용자 마이그레이션

다음 예제에서는 이름이 지정된 BarrySQL Server 로그인을 암호가 있는 포함된 데이터베이스 사용자로 마이그레이션합니다. 이 예제에서는 사용자 이름을 변경하지 않고 로그인을 사용하도록 유지합니다.

EXEC 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
INNER 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;