다음을 통해 공유


ALTER SCHEMA(Transact-SQL)

스키마 간에 보안 개체를 이동합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

ALTER SCHEMA schema_name 
   TRANSFER [ <entity_type> :: ] securable_name [;]

<entity_type> ::=
    {
        Object | Type | XML Schema Collection
    }

인수

  • schema_name
    현재 데이터베이스에서 보안 개체가 이동될 스키마의 이름입니다. SYS 또는 INFORMATION_SCHEMA는 지정할 수 없습니다.

  • <entity_type>
    소유자가 변경될 엔터티의 클래스입니다. Object가 기본값입니다.

  • securable_name
    스키마에 포함된 보안 개체 중에서 스키마로 이동될 보안 개체의 한 부분 또는 두 부분으로 구성된 이름입니다.

주의

사용자와 스키마는 완전히 분리됩니다. 자세한 내용은 사용자와 스키마 분리를 참조하십시오.

ALTER SCHEMA는 같은 데이터베이스에서 스키마 간에 보안 개체를 이동할 때만 사용할 수 있습니다. 스키마 내에서 보안 개체를 변경하거나 삭제하려면 해당 보안 개체와 관련된 ALTER 또는 DROP 문을 사용합니다.

한 부분으로 구성된 이름이 securable_name에 사용되면 현재 적용 중인 이름 확인 규칙이 보안 개체를 찾는 데 사용됩니다.

보안 개체를 새 스키마로 이동하면 해당 보안 개체와 연결된 사용 권한이 모두 삭제됩니다. 보안 개체 소유자가 명시적으로 설정된 경우 소유자는 그대로 유지됩니다. 보안 개체 소유자가 SCHEMA OWNER로 설정된 경우에는 소유자가 SCHEMA OWNER로 유지되지만 이동 후 SCHEMA OWNER는 새 스키마의 소유자로 확인됩니다. 새 소유자의 principal_id는 NULL이 됩니다.

SQL Server Management Studio를 사용하여 테이블 또는 뷰의 스키마를 변경하려면 개체 탐색기에서 테이블이나 뷰를 마우스 오른쪽 단추로 클릭한 다음 디자인을 클릭합니다. F4 키를 눌러 속성 창을 엽니다. 스키마 상자에서 새 스키마를 선택합니다.

주의 사항주의

SQL Server 2005부터 스키마 동작이 변경되었습니다. 이에 따라 스키마가 데이터베이스 사용자와 같다고 가정하는 코드에서 올바른 결과가 반환되지 않을 수 있습니다. sysobjects를 비롯한 이전 카탈로그 뷰는 CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION 등의 DDL 문이 사용된 데이터베이스에서 사용하지 않아야 합니다. 이러한 데이터베이스에서는 새 카탈로그 뷰를 대신 사용해야 합니다. 새 카탈로그 뷰에서는 SQL Server 2005에 도입된 보안 주체와 스키마의 분리를 고려하고 있습니다. 카탈로그 뷰에 대한 자세한 내용은 카탈로그 뷰(Transact-SQL)를 참조하십시오.

사용 권한

한 스키마에서 다른 스키마로 보안 개체를 이동하려면 현재 사용자에게 보안 개체(스키마가 아님)에 대한 CONTROL 권한과 대상 스키마에 대한 ALTER 권한이 있어야 합니다.

보안 개체에 EXECUTE AS OWNER 사양이 있고 소유자가 SCHEMA OWNER로 설정된 경우에는 사용자가 대상 스키마의 소유자에 대한 IMPERSONATION 권한도 가져야 합니다.

이동되는 보안 개체와 연결된 사용 권한은 이동 시 모두 삭제됩니다.

1. 테이블의 소유권 이전

다음 예에서는 Person 스키마에서 HumanResources 스키마로 Address 테이블을 이동하여 HumanResources 스키마를 수정합니다.

USE AdventureWorks2008R2;
GO
ALTER SCHEMA HumanResources TRANSFER Person.Address;
GO

2. 형식의 소유권 이전

다음 예에서는 Production 스키마에 형식을 만든 다음 해당 형식을 Person 스키마로 전송합니다.

USE AdventureWorks2008R2;
GO

CREATE TYPE Production.TestType FROM [varchar](10) NOT NULL ;
GO

-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
    FROM sys.types JOIN sys.schemas 
        ON sys.types.schema_id = sys.schemas.schema_id 
    WHERE sys.types.name = 'TestType' ;
GO

-- Change the type to the Person schema.
ALTER SCHEMA Person TRANSFER type::Production.TestType ;
GO

-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
    FROM sys.types JOIN sys.schemas 
        ON sys.types.schema_id = sys.schemas.schema_id 
    WHERE sys.types.name = 'TestType' ;
GO