반응형
- /**********************************************************************************************
-- Title : [2k] 테이블 소유자 (dbo로) 변경하기 및 세션 사용자 변경
-- Reference : dBRang.com
-- Key word : sp_addlogin, sp_adduser, sp_changeobjectowner, setuser
**********************************************************************************************/
-- 1. 테스트를 위하여 소유자가 dbo가 아닌 테이블을 만듭니다.
EXEC sp_addlogin testuser, testuser, pubs
GO
USE pubs
GO
EXEC sp_adduser testuser, testuser, db_ddladmin
GO
SETUSER 'testuser'
GO
CREATE TABLE IncorrectOwner (c1 int)
GO
/* IncorrectOwner 테이블의 소유자는 dbo가 아닌 testuser가 됩니다. */
SETUSER
GO
-- 2. Owner가 dbo가 아닌 사용자 테이블 목록 확인하기
SELECT name FROM sysobjects WHERE type='U' AND uid <> 1
ORDER BY name
GO
-- 3. Owner 변경 스크립트 생성하기
SELECT 'EXEC sp_changeobjectowner ''' + USER_NAME(uid) + '.' + name +
''', ''dbo''' FROM sysobjects WHERE type='U' AND uid <> 1
ORDER BY name
GO
-- 4. 소유권 변경
EXEC sp_changeobjectowner 'testuser.IncorrectOwner', 'dbo'
GO
/* 개체 이름 부분을 변경하면 스크립트나 저장 프로시저를 손상시킬 수 있습니다. */
-- 참고: 소유자가 dbo로 지정되는 경우의 수
/*
ㅇsysadmin 고정 서버 역할의 구성원으로 생성 했을 때
ㅇsa 계정으로 로그인한 사용자가 만들었을 때 (권고하지 안음).
ㅇ데이터베이스 소유자가 만들었을 때
(예를 들면, CREATE DATABASE 권한을 갖고 있는 사람에 의해 만들었을 때).
ㅇdb_creator 고정 서버 역할의 구성원이 만들었을 때
ㅇdb_owner 또는 db_ddladmin의 구성원이 만들고 소유자로서 dbo가 첨부되었을 때
(예를 들면, CREATE TABLE 'dbo.usertable).
ㅇ데이터베이스 소유자가 아닌 사람이 만들고 sp_changeobjectowner으로 소유권을 변경했을 때
(이것은 반응을 통해 확인하고 스크립트와 저장 프로시저로 고친다).
*/
반응형