반응형
  1. /**********************************************************************************************
    -- 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으로 소유권을 변경했을 때
         (이것은 반응을 통해 확인하고 스크립트와 저장 프로시저로 고친다).
    */
반응형

+ Recent posts