내용 : 사용자 데이타 베이스 mydb를 복원했는데...기존의 login id와 복원한 mydb의 user id는 같은 id라 하더라도 내부적으로는 서로별개의 id인 것이다.
즉 sid는 서로 다르기 때문에 database로의 로긴이 될수 가 없다. 다시말해서...sid를 일치시켜주면 모든 문제가 해결 된다는 것이다.
use master
--마스터 디비의 logins와 복원 디비의 users를 확인 차원에서..보고
select * from sysxlogins
select * from mydb..sysusers
-- 시스템테이블 수정가능토록 변경
sp_configure 'allow updates', 1
reconfigure with override
RECONFIGURE와 RECONFIGURE WITH OVERRIDE는 둘 다 모든 구성 옵션에 사용할 수 있다.
그러나 기본 RECONFIGURE 문은 적당한 범위 밖에 있는 옵션 값이나 옵션 간에 충돌을 일으킬 수 있는 옵션 값을 거부한다.
예를 들어 recovery interval 값이 60분보다 크거나 affinity mask 값이 affinity I/O mask 값과 겹치는 경우 RECONFIGURE는 오류를 발생시킨다.
이와 달리 RECONFIGURE WITH OVERRIDE는 데이터 형식만 맞으면 모든 옵션 값을 허용하며 지정된 값으로 다시 구성한다.
--마스터 디비의 logins와 복원디비의 users의 sid를 일치시킨다. 단 logins id와 users id가 같을 때
update mydb..sysusers
set sid = b.sid
from (select sid, name from sysxlogins) b, mydb..sysusers a
where a.name = b.name
-- 다시 원위치
sp_configure 'allow updates', 0
reconfigure with override
※ 참고 : master DB의 sysxlogins 테이블은 참조하고 있는 뷰나 함수 때문에 변경할수 없다.
따라서 sp_configure로 mydb의 시스템 테이블인 sysusers테이블 변경 권한을 설정하여 Update한다.
sp_change_users_login 참조
-- 현재DB에 어떤 로그인과도 연결 안된 사용자 나열
sp_change_users_login 'Report'
-- 현재의 DB의 사용자 이름과 동일한 로그인에 알아서..연결한다.
sp_change_users_login 'Auto_Fix', '사용자 ID'
-- 현재 DB에 명시된 사용자와 로그인을 연결한다.
sp_change_users_login 'Update_one', '사용자 ID', '로그인 ID'