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를 실행하는 서버에서 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' 데이터베이스에서 유효한 사용자가 아닙니다.
서버 사용자 '%1!s!'은(는) 데이터베이스 '%2!s!'에 유효한 사용자가 아닙니다. 먼저 데이터베이스에 사용자 계정을 추가하십시오.
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 저장 프로시저를 실행하기 전에 다음을 수행합니다.
- 이 사용자가 소유한 모든 개체를 준비 데이터베이스로 전송합니다.
- 사용자를 삭제하고, 해당 사용자를 올바른 이름으로 추가한 다음 이 사용자에 대한 개체를 모두 다시 전송합니다.
- 사용자에게 적절한 로그인이 없고 로컬 컴퓨터 이름 또는 도메인 이름의 접두사도 없는 경우 이 사용자에 대해 오류 메시지가 나타납니다. 이 오류 메시지는 먼저 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를 실행하는 다른 서버로 데이터베이스를 이동한 후에는 사용자 작업을 최소화할 수 있도록 다음 단계를 수행하십시오.- master 데이터베이스의 sysxlogins 테이블에 해당 데이터베이스의 sysusers 테이블에 있는 각 사용자에 대한 로그인이 하나만 있는지 확인합니다.
참고 표준 SQL Server 로그인을 추가하려면 SQL Server 온라인 설명서의 "sp_addlogin" 항목을 참조하십시오. 통합 SQL Server 로그인을 추가하려면 SQL Server 온라인 설명서의 "sp_grantlogin" 항목을 참조하십시오. - MapSids.exe 파일을 다운로드한 다음 Sp_sidmap.sql 및 Readme.txt 파일을 추출합니다.
- SQL Server를 실행하는 서버에 시스템 관리자로 로그인한 다음 사용자 데이터베이스에서 Sp_sidmap.sql 파일을 실행합니다. Sp_sidmap.sql 파일을 실행하면 sp_sidmap 저장 프로시저와 sp_prefix_sysusersname 저장 프로시저가 생성됩니다.
- 저장 프로시저를 실행하는 사용자 이외의 다른 사용자가 데이터베이스에 액세스하지 않는지 확인합니다.
- 쿼리 분석기에 결과가 표 형식이 아니라 텍스트 형식으로 표시되는지 확인합니다. 결과를 텍스트 형식으로 표시하려면 CTRL^T를 누르거나 쿼리를 누른 다음 텍스트로 결과 표시를 누릅니다. 결과와 정보 메시지를 하나의 창에서 볼 수 있고 출력을 텍스트 파일로 저장할 수 있어야 합니다. 나중에 일부 매핑을 확인하려면 이 파일이 필요할 수도 있습니다.
- 매개 변수가 올바르게 전달되었는지 확인할 방법이 없으므로 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
- 결과를 파일에 저장하고 Readme.txt 파일에 표시된 지침에 따릅니다.
참고 위의 저장 프로시저를 실행하면 데이터베이스에서 sysusers 테이블만 변경됩니다. 시작할 때의 상태로 되돌리려면 백업을 사용하여 데이터베이스를 복원하거나 데이터베이스를 다시 연결합니다.
'연구개발 > SQL2008' 카테고리의 다른 글
xp_cmdshell enable and disable (0) | 2010.05.25 |
---|---|
같은 그룹의 데이터를 붙여서 출력하기 (0) | 2010.05.25 |
IP 주소 범위 체크 (0) | 2010.05.20 |
오라클의 LPAD 함수 (0) | 2010.05.20 |
데이터베이스 내의 모든 외래키 비활성화/활성화 (0) | 2010.05.20 |