DB를 사용하다 보면 DBO가 아닌 관리자 기능을 가진 사용자에게 권한이 부여된채 관리자는 접근이
되지않는 DB가 가끔 존재한다 테이블 하나씩 바꾸자면 시간이 많이 걸리므로 일괄적으로 수정하는 방법이 필요하다 . 여기선 유저 계정으로 생성된 테이블들을 DBO로 수정하는 방법을 설명한다
1. sysobjects 테이블을 직접수정하는 방법
EXEC sp_configure N'allow updates', 1
RECONFIGURE WITH OVERRIDE
-- 실행한 뒤 해당 DB 에서 sysobjects 테이블 에 uid 필드의 내용이 1 이 아닌것을 찾음
SELECT name,uid FROM sysobjects WHERE uid <> '1'
-- 1 이 아닌것을 발견했다면 그부분의 소유권때문에 발생한 문제이므로 숫자를 1 바꿈
(소유권을 dbo 로 넘겨버림)
UPDATE sysobjects SET uid = '1' WHERE uid='6'
-- 원래대로 다시 돌려놓음
EXEC sp_configure N'allow updates', 0
|
2. 커서를 이용한 방법
|
DECLARE @TABLE_NAME VARCHAR (50)
DECLARE @TABLE_OWNER VARCHAR (50)
DECLARE TCURSOR CURSOR
--커서 정의
FOR SELECT TABLE_NAME, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME <> 'dtproperties'
FOR READ ONLY
--커서 오픈후 루프
OPEN TCURSOR FETCH NEXT FROM TCURSOR INTO @TABLE_NAME, @TABLE_OWNER
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('SP_CHANGEOBJECTOWNER ''[' + @TABLE_OWNER + '].
[' + @TABLE_NAME + ']'', ''dbo''')
FETCH NEXT FROM TCURSOR INTO @TABLE_NAME, @TABLE_OWNER
END
--커서 종료
CLOSE TCURSOR
DEALLOCATE TCURSOR
|