다음을 통해 공유


사용자와 스키마 분리

SQL Server 2005에서는 스키마 동작이 변경되었습니다. 스키마는 더 이상 데이터베이스 사용자와 동일하지 않습니다. 이제 각 스키마는 이것을 만든 데이터베이스 사용자와 독립적으로 존재하는 고유한 네임스페이스입니다. 즉, 스키마는 단순히 개체 컨테이너입니다. 사용자가 스키마를 소유할 수 있으며 스키마 소유권은 양도할 수 있습니다.

새 동작

스키마에서 소유권을 분리하면 중요한 이점이 있습니다.

  • 스키마와 스키마 범위 보안 개체에 대한 소유권을 양도할 수 있습니다. 자세한 내용은 ALTER AUTHORIZATION(Transact-SQL)을 참조하십시오.

  • 스키마 간에 개체를 이동할 수 있습니다. 자세한 내용은 ALTER SCHEMA(Transact-SQL)를 참조하십시오.

  • 하나의 스키마에 여러 데이터베이스 사용자가 소유하는 개체가 포함될 수 있습니다.

  • 여러 데이터베이스 사용자가 하나의 기본 스키마를 공유할 수 있습니다.

  • 스키마 및 스키마에 포함된 보안 개체에 대한 사용 권한을 이전 버전보다 더욱 세부적으로 관리할 수 있습니다. 자세한 내용은 GRANT 스키마 권한(Transact-SQL)GRANT 개체 사용 권한(Transact-SQL)을 참조하십시오.

  • 역할, 응용 프로그램 역할 등의 데이터베이스 보안 주체가 스키마를 소유할 수 있습니다.

  • 해당되는 스키마에서 개체를 삭제하지 않고 데이터베이스 사용자를 삭제할 수 있습니다.

  • 코드에서 스키마가 데이터베이스 사용자와 동일하다고 가정하는 경우 이전 버전의 SQL Server에서 작성된 코드가 잘못된 결과를 반환할 수 있습니다.

  • 이전 버전의 SQL Server용으로 제작된 여기에는 sysobjects도 포함됩니다.

  • 데이터베이스 개체를 만들 때 개체 소유자로 유효한 도메인 보안 주체(사용자 또는 그룹)를 지정하면 도메인 보안 주체는 데이터베이스에 스키마로 추가됩니다. 새 스키마는 도메인 보안 주체가 소유하게 됩니다.

새 카탈로그 뷰

SQL Server 2005부터는 스키마는 메타데이터에 반영되는 명시적 엔터티입니다. 따라서 스키마에는 하나의 소유자만 있을 수 있지만 한 명의 사용자가 스키마를 여러 개 소유할 수 있습니다. SQL Server 2000 시스템 테이블에는 이 복잡한 관계가 반영되지 않으므로 SQL Server 2005에서는 새 메타데이터를 정확하게 반영하는 새 카탈로그 뷰를 제공했습니다.

다음 표에서는 SQL Server 2000 시스템 테이블 및 이와 동등한 SQL Server 2005 이상의 카탈로그 뷰 간 매핑을 보여 줍니다.

SQL Server 2000 시스템 테이블

SQL Server 2005 이상 카탈로그 뷰

sysusers

sys.database_principals

sys.schemas

syslogins

sys.server_principals

SQL Server 2005에서는 250개가 넘는 새 카탈로그 뷰를 제공했습니다. 메타데이터에 액세스하려면 카탈로그 뷰를 사용하는 것이 좋습니다. 자세한 내용은 카탈로그 뷰(Transact-SQL)를 참조하십시오.

새로운 DDL 문은 sysobjects와 같은 이전 카탈로그 뷰에 정확하게 반영되어 있지 않은 시스템 메타데이터에 대한 복잡한 메타데이터를 제공할 수 있습니다. 다음 예에서 sysobjects에서 반환된 사용자 ID 및 스키마 이름은 동기화되어 있지 않으며 SQL Server 2005에서 제공하는 스키마와 사용자 간 구분을 반영하지 않습니다.

USE tempdb
GO
CREATE LOGIN u1 WITH PASSWORD = 'Mdfjd$sakj943857l7sdfh##30'
CREATE USER u1 WITH DEFAULT_SCHEMA = u1
GO
GRANT CREATE TABLE to u1 
GO
CREATE SCHEMA sch1
GO
CREATE SCHEMA u1 AUTHORIZATION u1
GO
EXECUTE AS user = 'u1'
GO
CREATE TABLE t1(c1 int)
GO
revert
GO
SELECT user_name(uid) , * FROM sysobjects WHERE name = 't1'
GO
주의 사항주의

CREATE/ALTER/DROP SCHEMA; CREATE/ALTER/DROP USER; CREATE/ALTER/DROP ROLE; CREATE/ALTER/DROP APPROLE; ALTER AUTHORIZATION 등의 DDL 문이 사용된 데이터베이스에서 새 카탈로그 뷰를 사용해야 합니다.

기본 스키마

정규화되지 않은 보안 개체의 이름을 확인하기 위해 SQL Server 2000에서는 이름 확인을 사용하여 호출하는 데이터베이스 사용자가 소유한 스키마 및 dbo가 소유한 스키마를 확인합니다.

SQL Server 2005부터는 각 사용자에게 기본 스키마가 있습니다. CREATE USER 또는 ALTER USER의 DEFAULT_SCHEMA 옵션을 사용하여 기본 스키마를 설정하고 변경할 수 있습니다. DEFAULT_SCHEMA를 정의하지 않으면 dbo가 데이터베이스 사용자의 기본 스키마로 사용됩니다.