MSSQL 오브젝트의 소유자 변경하기
페이지 정보
본문
SQL Server 2000 이전 버전에서는 오브젝트의 소유자를 변경하기 위해서 sp_changeobjectowner 시스템 저장 프로시저를 사용한다. 하지만, SQL Server 2005에 이르러서는 sp_changeobjectowner 시스템 저장 프로시저를 대신하여 ALTER AUTHORIZATION... 구문을 통해 오브젝트의 소유자를 변경할 수 있게 되었다.
1. SQL Server 2000 이전 버전에서
구문
실행 예
계정사용자 아이디로 된 것을 dbo로 변경 하시려면 아래 쿼리를 날려준 후에 결과물을 복사하여 실행select 'exec sp_changeobjectowner ''기존소유자.' + name + ''', ''dbo'''
from sysobjects where xtype = 'U'
다음 예는 author 테이블의 소유자 를 testuser1에서 testuser2로 변경한다.
2. SQL Server 2005 이후 버전에서
구문
인수
주의사항
1. SQL Server 2000 이전 버전에서
구문
sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'
인수
인수 | 데이터 형식 | 설명 |
---|---|---|
[ @objname = ] 'object' | VARCHAR(776) | 현재 데이터베이스의 기존 오브젝트 명이다. 오브젝트에서 테이블, 뷰, 사용자 정의 함수 또는 저장 프로시저가 될 수 있다. 기본값은 없다. 스키마와 스키마 소유자가 동일한 이름을 갖고 있는 경우 object는 existing_owner.object 의 형태로 기존 개체의 소유자를 명시해야 한다. |
[ @newowner=] 'owner ' | SYSNAME | 개체의 새 소유자가 될 보안 계정의 이름이다. 기본값은 없다. owner는 유효한 데이터베이스 사용자, 서버 역할, Microsoft Windows 로그인 또는 현재 데이터베이스에 액세스할 수 있는 Windows 그룹이어야 한다. 새 소유자가 해당하는 데이터베이스 수준의 보안 주체가 없는 Windows 사용자 또는 Windows 그룹이면 데이터베이스 사용자가 생성된다. |
실행 예
계정사용자 아이디로 된 것을 dbo로 변경 하시려면 아래 쿼리를 날려준 후에 결과물을 복사하여 실행select 'exec sp_changeobjectowner ''기존소유자.' + name + ''', ''dbo'''
from sysobjects where xtype = 'U'
다음 예는 author 테이블의 소유자 를 testuser1에서 testuser2로 변경한다.
USE PUBS
GO
EXEC sp_changeobjectowner 'testuser1.author','testuser2'
GO
GO
EXEC sp_changeobjectowner 'testuser1.author','testuser2'
GO
2. SQL Server 2005 이후 버전에서
구문
ALTER AUTHORIZATION
ON [ :: ] entity_name
TO { SCHEMA OWNER | principal_name }
::=
{
Object | Type | XML Schema Collection
| Fulltext Catalog | Fulltext Stoplist | Schema
| Assembly | Role | Message Type | Contract | Service
| Remote Service Binding | Route | Symmetric Key | Endpoint
| Certificate | Database
}
ON [ :: ] entity_name
TO { SCHEMA OWNER | principal_name }
::=
{
Object | Type | XML Schema Collection
| Fulltext Catalog | Fulltext Stoplist | Schema
| Assembly | Role | Message Type | Contract | Service
| Remote Service Binding | Route | Symmetric Key | Endpoint
| Certificate | Database
}
인수
인수 | 설명 |
---|---|
:: | 소유자가 변경될 엔터티의 클래스 Object가 기본값이다. |
entity_name | 엔터티의 이름 |
principal_name | 엔터티를 소유하게 될 보안 주체의 이름 |
주의사항
- 데이터베이스 수준 엔터티의 소유권은 데이터베이스 수준의 모든 보안 주체에게 이전할 수 있다.
- 서버 수준 엔터티의 소유권은 서버 수준 보안 주체에게만 이전할 수 있다.
- SQL Server 2005부터 사용자는 다른 데이터베이스 사용자가 소유한 스키마에 포함된 OBJECT 또는 TYPE을 소유할 수 있다.
- SCHEMA OWNER 옵션은 스키마 수준 엔터티의 소유권을 이전하는 경우에만 유효하다.
- SCHEMA OWNER는 엔터티의 소유권을 엔터티가 속한 스키마의 소유자에게 이전한다.
- 스키마 수준 엔터티는 OBJECT, TYPE 또는 XML SCHEMA COLLECTION 클래스뿐이다.
이전 가능한 엔티티 - "object" 형식의 스키마 수준 엔터티인 테이블, 뷰, 함수, 프로시저, 큐 및 동의어 엔터티
이전 불가능한 엔티티 - 연결된 서버, 통계, 제약 조건, 규칙, 기본값, 트리거, Service Broker 큐, 자격 증명,
- 파티션 함수, 파티션 구성표, 데이터베이스 마스터 키, 서비스 마스터 키 및 이벤트 알림 엔터티
- 서버, 로그인, 사용자, 응용 프로그램 역할 및 열 보안 개체 클래스의 멤버 소유권
실행 예
(1). 테이블의 소유권 이전
다음 예에서는Sprockets
테이블의 소유권을MichikoOsada
사용자에게 이전합니다. 테이블은Parts
스키마 내부에 있습니다.ALTER AUTHORIZATION ON OBJECT::Parts.Sprockets TO MichikoOsada; GO
쿼리가 다음과 같을 수도 있습니다.ALTER AUTHORIZATION ON Parts.Sprockets TO MichikoOsada; GO
(2). 뷰 소유권을 스키마 소유자에게 이전
다음 예에서는ProductionView06
뷰의 소유권을 뷰가 포함된 스키마의 소유자에게 이전합니다. 뷰는Production
스키마 내부에 있습니다.ALTER AUTHORIZATION ON OBJECT::Production.ProductionView06 TO SCHEMA OWNER;
GO
(3). 스키마의 소유권을 사용자에게 이전
다음 예에서는SeattleProduction11
스키마의 소유권을SandraAlayo
사용자에게 이전합니다.ALTER AUTHORIZATION ON SCHEMA::SeattleProduction11 TO SandraAlayo;
GO
(4). 끝점의 소유권을 SQL Server 로그인에게 이전
다음 예에서는CantabSalesServer1
끝점의 소유권을JaePak
에게 이전합니다. 끝점은 서버 수준의 보안 개체이므로 서버 수준 보안 주체에게만 소유권을 이전할 수 있습니다.ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak
참고자료
http://blog.naver.com/wing3a07?Redirect=Log&logNo=100061342319
http://technet.microsoft.com/ko-kr/library/ms177519(SQL.90).aspx < SQL 2000 >
http://technet.microsoft.com/ko-kr/library/ms187359(SQL.90).aspx < SQL 2005 / 2008 >
http://www.microsoft.com/korea/technet/sql/tuning_guide_developer01.mspx#EEAA09
댓글목록
등록된 댓글이 없습니다.