반응형
http://support.microsoft.com/kb/240872

SQL Server를 실행하는 서버에서 SQL Server를 실행하는 다른 서버로 데이터베이스를 이동할 때 master 데이터베이스에 있는 로그인과 사용자 데이터베이스에 있는 사용자의 SID(보안 ID)가 일치하지 않을 수 있습니다. 기본적으로 SQL Server 7.0, SQL Server 2000 및 SQL Server 2005에서는 이러한 일치하지 않는 사용자를 매핑하는 sp_change_users_login 시스템 저장 프로시저를 제공합니다. 그러나 sp_change_users_login 저장 프로시저는 표준 SQL Server 로그인을 매핑하는 데만 사용할 수 있으며 한 번에 한 사용자에 대해서만 매핑을 수행해야 합니다. sp_change_users_login 저장 프로시저에 대한 자세한 내용은 SQL Server 7.0, SQL Server 2000 및 SQL Server 2005 온라인 설명서의 "sp_change_users_login" 항목을 참조하십시오.

SQL Server 7.0 이상 버전에서는 SID를 사용하여 master 데이터베이스의 로그인과 사용자 데이터베이스의 사용자 간의 매핑을 유지할 수 있습니다. 이러한 매핑은 사용자 데이터베이스에서 로그인에 대한 올바른 사용 권한을 유지하는 데 필요합니다. 이러한 매핑이 손실되면 로그인에서 다음과 같은 사용 권한 문제가 발생합니다. 단, 이에 국한되지는 않습니다.
  • 새 서버에 SQL Server 로그인이 존재하지 않는 경우 사용자가 로그온하려고 하면 다음과 같은 오류 메시지가 나타날 수 있습니다.
    서버: 메시지 18456, 수준 16, 상태 1
    사용자 '%ls'이(가) 로그인하지 못했습니다.
  • 새 서버에 SQL Server 로그인이 있지만 master 데이터베이스의 SID가 사용자 데이터베이스의 SID와 다른 경우 사용자가 SQL Server에 성공적으로 로그온할 수는 있지만 해당 데이터베이스에 액세스하려고 하면 다음과 같은 오류 메시지가 나타날 수 있습니다.
    서버: 메시지 916, 수준 14, 상태 1, 줄 1
    서버 사용자 '%.*ls'은(는) '%.*ls' 데이터베이스에서 유효한 사용자가 아닙니다.
    참고 SQL Server 2005에서는 다음과 같은 오류 메시지가 나타날 수 있습니다.

    서버 사용자 '%1!s!'은(는) 데이터베이스 '%2!s!'에 유효한 사용자가 아닙니다. 먼저 데이터베이스에 사용자 계정을 추가하십시오.
SQL Server 7.0 보안 모델에 대한 자세한 내용은 "Microsoft SQL Server 7.0 보안" 백서를 참조하십시오. 이 백서를 보려면 아래의 Microsoft 웹 사이트를 방문하십시오.
http://msdn2.microsoft.com/en-us/library/Aa226173(SQL.70).aspx (http://msdn2.microsoft.com/en-us/library/Aa226173(SQL.70).aspx) (영문)
SQL Server 2000 보안 모델에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
322712  (http://support.microsoft.com/kb/322712/ ) Microsoft SQL Server 2000 SP3 보안 기능 및 최상의 방법
 

제한 사항

  • sysusers 테이블에 개체를 소유한 컴퓨터 이름 또는 도메인 이름 접두사가 없는 사용자가 있는 경우 이러한 개체가 응용 프로그램에서 username.objectname과 같은 형식의 두 부분으로 된 이름을 사용하여 참조되면 sp_sidmap 저장 프로시저가 sysxlogins 테이블에 표시된 것처럼 이러한 사용자의 이름을 컴퓨터 이름 또는 도메인 이름의 접두사로 바꾸기 때문에 응용 프로그램이 중단될 수 있습니다. 이 문제를 해결하려면 sp_sidmap 저장 프로시저가 완료된 후 sysusers 테이블에서 영향을 받는 사용자의 이름을 이전 이름으로 바꾸거나 주 지원 공급자에게 문의하십시오.
  • 이 문서에서는 별칭을 다루지 않으므로 별칭을 직접 관리해야 합니다.
  • 새 SQL Server 서버에 표준 SQL Server 로그인이 없는 경우 암호가 NULL인 로그인을 추가할 수 있습니다. 이러한 로그인의 암호를 적절하게 변경해야 할 수도 있습니다.
  • 사용자 데이터베이스에서 sysxlogins 테이블에 표시된 것과 다른 이름으로 사용자를 만든 경우에는 해당 사용자의 적절한 로그인을 알 수 없습니다. 따라서 sp_sidmap 저장 프로시저를 실행하기 전에 다음을 수행합니다.
    1. 이 사용자가 소유한 모든 개체를 준비 데이터베이스로 전송합니다.
    2. 사용자를 삭제하고, 해당 사용자를 올바른 이름으로 추가한 다음 이 사용자에 대한 개체를 모두 다시 전송합니다.
  • 사용자에게 적절한 로그인이 없고 로컬 컴퓨터 이름 또는 도메인 이름의 접두사도 없는 경우 이 사용자에 대해 오류 메시지가 나타납니다. 이 오류 메시지는 먼저 Windows 수준에서 사용자를 추가한 다음 SQL Server에 로그인으로 추가해야 한다는 것을 나타냅니다. 메시지에 나타난 대로 수행한 후에는 sp_sidmap 저장 프로시저를 다시 실행해야 합니다.
  • 사용자에게 도메인 이름이나 로컬 Windows 서버 이름의 접두사가 있지만 sysxlogins 테이블에 적절한 로그인이 없으면 저장 프로시저가 이 사용자를 SQL Server에 새 로그인으로 추가하려고 시도합니다. Windows 사용자가 존재하지 않으면 결과 창에 메시지를 출력하고 먼저 Windows 사용자를 추가한 다음에 로그인을 수동으로 만듭니다.
  • 한 사용자에 대해 sysusers 테이블에 둘 이상의 로그인이 있으면 동일한 사용자 이름을 갖는 로그인이 모두 나열된 메시지가 결과 파일에 출력됩니다. 이때 사용자가 하나의 로그인에만 연결되도록 직접 조정해야 합니다.

      sysusers 테이블에 "johndoe"라는 사용자가 있고 sysxlogins 테이블에 "Test\johndoe" 및 "Test2\johndoe"라는 이름의 로그인이 있는 경우 저장 프로시저를 실행하면 로그인이 둘 이상인 사용자가 있으므로 시스템 관리자가 두 로그인 중 하나를 선택해야 한다는 메시지가 나타납니다. 이러한 경우에 이 문서에 설명되어 있는 두 번째 저장 프로시저인 sp_prefix_sysusersname을 실행해야 합니다. 이러한 상황에 대한 자세한 내용은 Readme.txt 파일에도 설명되어 있습니다.

표준 로그인 및 통합 로그인 매핑

SQL Server를 실행하는 서버에서 SQL Server를 실행하는 다른 서버로 데이터베이스를 이동한 후에는 사용자 작업을 최소화할 수 있도록 다음 단계를 수행하십시오.
  1. master 데이터베이스의 sysxlogins 테이블에 해당 데이터베이스의 sysusers 테이블에 있는 각 사용자에 대한 로그인이 하나만 있는지 확인합니다.

    참고 표준 SQL Server 로그인을 추가하려면 SQL Server 온라인 설명서의 "sp_addlogin" 항목을 참조하십시오. 통합 SQL Server 로그인을 추가하려면 SQL Server 온라인 설명서의 "sp_grantlogin" 항목을 참조하십시오.
  2. MapSids.exe 파일을 다운로드한 다음 Sp_sidmap.sql 및 Readme.txt 파일을 추출합니다.
  3. SQL Server를 실행하는 서버에 시스템 관리자로 로그인한 다음 사용자 데이터베이스에서 Sp_sidmap.sql 파일을 실행합니다. Sp_sidmap.sql 파일을 실행하면 sp_sidmap 저장 프로시저와 sp_prefix_sysusersname 저장 프로시저가 생성됩니다.
  4. 저장 프로시저를 실행하는 사용자 이외의 다른 사용자가 데이터베이스에 액세스하지 않는지 확인합니다.
  5. 쿼리 분석기에 결과가 표 형식이 아니라 텍스트 형식으로 표시되는지 확인합니다. 결과를 텍스트 형식으로 표시하려면 CTRL^T를 누르거나 쿼리를 누른 다음 텍스트로 결과 표시를 누릅니다. 결과와 정보 메시지를 하나의 창에서 볼 수 있고 출력을 텍스트 파일로 저장할 수 있어야 합니다. 나중에 일부 매핑을 확인하려면 이 파일이 필요할 수도 있습니다.
  6. 매개 변수가 올바르게 전달되었는지 확인할 방법이 없으므로 sp_sidmap 저장 프로시저로 올바르게 전달되도록 해야 합니다.
    EXEC sp_SidMap @old_domain = old_domain_name,
    @new_domain = new_domain_name,
    @old_server = old_server_name,
    @new_server = new_server_name
    이전 도메인 이름과 새 도메인 이름 및 서버 이름의 값을 적절하게 변경합니다.
  7. 결과를 파일에 저장하고 Readme.txt 파일에 표시된 지침에 따릅니다.

    참고 위의 저장 프로시저를 실행하면 데이터베이스에서 sysusers 테이블만 변경됩니다. 시작할 때의 상태로 되돌리려면 백업을 사용하여 데이터베이스를 복원하거나 데이터베이스를 다시 연결합니다.
반응형

+ Recent posts