보통 소유권 변경할때에는 sp_changeobjectowner사용하면 된다...
근데..어떤 DB에 있는 전체 개체의 소유권을 변경하고자 할 경우....이렇게 하면 개체마다..
일일이 변경해 야하는 번거러움이 있다...그래서...어떻게..하면..한번에...하느냐...
.
.
.
sysobjects 개체에서..바로...소유권을 바꿔버리는 것이다.

 

1. select * from sysobjects where xtype='U' 혹은 select * from information_schema.tables
하면 사용자 테이블 리스트를...볼수 있다...

참고..information_schema.tables 뷰나 sp_changeobjectowner 프로시져의 소스를 
보면..결국 sysobjects 테이블을 근거로 정보를 불러오거나 수정하는 것을 알 수 있다.

즉 sysobjects테이블의 정보를 변경하면 된다는 것이다..

select * from sysusers하면 uid 알수 있다.
select * from syspermissions where grantor=uid 하면 권한 설정된 object id알수 있다.
select object_name(object id)하면 object 이름 알수 있다.

그렇다고...해서...
update sysobjects set uid=1 where xtype='U'
이렇게 하면....사용자 테이블 소유권만 바뀌므로 전체 개체의 소유권을 바꾸기 위해서는 

 

2. delete syspermissions where grantor = 5
update sysobjects set uid = 1 where uid = 5

이렇게 해서 각종 PK등 모든 개체의 소유권을 dbo소유권으로 한번에 바꿀수 있다.....근데...
이 명령어는...그냥...실행이 안된다....

저 명령을 실행하기 전에

-- 시스템 테이블 수정가능토록 변경
sp_configure 'allow updates', 1
reconfigure with override

실행하고....2번 명령을 날린다음...다시 원상복귀 시키기 위해서 아래의 명령을 날리면.....끝

-- 다시 원위치
sp_configure 'allow updates', 0
reconfigure with override