본문 바로가기
프로그래밍/DB/DB

[MSSQL2005] 사용자와 스키마의 관계

by 아유카와 2009. 8. 14.

SQL Server 2005에서는 데이터베이스 사용자와 스키마 간의 암시적 연결을 끊습니다.

스키마 정의

스키마는 하나의 네임스페이스를 구성하는 데이터베이스 엔터티 모음입니다. 네임스페이스는 모든 요소가 고유한 이름을 갖는 집합입니다.

예를 들어 이름 충돌을 피하려면 같은 스키마 안에 이름이 같은 테이블이 두 개 있으면 안 됩니다. 두 개의 테이블에 동일한 이름을 사용하려면 테이블이 각각 서로 다른 스키마에 속해 있어야 합니다.

참고:
데이터베이스 도구에 대해 설명할 때는 "스키마"가 스키마 또는 데이터베이스의 개체에 대해 설명하는 카탈로그 정보를 나타내기도 합니다. Analysis Services에 대해 설명할 때는 "스키마"가 큐브 및 차원 같은 다차원 개체를 나타냅니다.

SQL Server 2000에서 SQL Server 2005로 업그레이드

SQL Server 2000에도 CREATE SCHEMA 문이 있지만 실제로 위에 정의된 방법대로 스키마를 만들지는 않습니다. SQL Server 2000에서는 데이터베이스 사용자와 스키마가 암시적으로 연결되어 있습니다. 모든 데이터베이스 사용자는 사용자와 이름이 같은 스키마 소유자이며 개체 소유자는 자신이 속한 스키마의 소유자와 동일합니다. 따라서 SQL Server 2000에 있는 정규화된 이름의 "스키마"는 데이터베이스의 사용자이기도 합니다. 이런 이유로 SQL Server 2000 데이터베이스에서는 사용자를 제거하기 전에 관리자가 해당 사용자 소유의 모든 개체를 삭제하거나 소유자를 변경해야 했습니다. 이 개체가 포함된 SQL Server 2000 데이터베이스가 있다고 생각해 보십시오.

accounting.ap.george.reconciliation

이 개체는 사용자 "george"의 소유입니다. 관리자가 사용자 "george"를 삭제해야 할 경우 먼저 이 개체를 삭제하거나 개체 소유자를 변경해야 합니다. 후자의 경우 다음과 같이 이름을 바꿀 수 있습니다.

accounting.ap.sandra.reconciliation

개체 소유권을 이전하면 정규화된 이름도 바뀝니다. accounting.ap.george.reconciliation를 참조하는 모든 코드를 업데이트하여 변경된 이름을 반영해야 합니다.

SQL Server 2005에서 스키마는 스키마를 만든 데이터베이스 사용자와 독립적으로 존재합니다. 이름을 변경하지 않고 스키마 소유권을 이전할 수 있습니다. 기능을 명확히 나타내는 쉬운 이름을 사용하여 스키마에 개체를 만들 수도 있습니다. 예를 들어 accounting.ap.sandra.reconciliation 대신 accounting.ap.invoice.reconciliation라는 스키마를 만들 수 있습니다. "invoice"는 사용자가 아니므로 데이터베이스에서 사용자를 삭제해도 이 이름을 변경할 필요가 없습니다. 따라서 데이터베이스 관리자와 개발자의 업무가 단순화됩니다.

사용자와 스키마를 분리할 경우의 이점

스키마에 있는 데이터베이스 사용자를 추상화하면 관리자와 개발자에게 몇 가지 이점이 있습니다.

  • 역할이나 Windows 그룹의 멤버 자격을 통해 여러 사용자가 스키마 하나를 소유할 수 있습니다. 따라서 역할과 그룹이 개체를 소유하도록 해주는 친숙한 기능이 더욱 향상됩니다.

  • 매우 간단하게 데이터베이스 사용자를 삭제할 수 있습니다.

  • 데이터베이스 사용자를 삭제할 때 해당 사용자의 스키마에 포함된 개체의 이름을 바꿀 필요가 없습니다. 따라서 스키마를 만든 사용자를 삭제한 후에 스키마에 포함된 개체를 명시적으로 참조하는 응용 프로그램을 수정하거나 테스트하지 않아도 됩니다.

  • 여러 사용자가 통일된 이름 확인을 위해 하나의 기본 스키마를 공유할 수 있습니다.

  • 공유 기본 스키마를 사용하면 개발자가 DBO 스키마 대신 특정 응용 프로그램에 대해 특별히 만든 스키마에 공유 개체를 저장할 수 있습니다.

  • 스키마 및 스키마에 포함된 개체에 대한 사용 권한을 이전 버전보다 세부적으로 관리할 수 있습니다.

  • 정규화된 개체 이름이 4부분으로 구성됩니다. server.database.schema.object

기본 스키마

SQL Server 2005에는 "기본 스키마"라는 개념도 도입되었습니다. 기본 스키마는 정규화된 이름을 사용하지 않고 참조되는 개체의 이름을 확인하는 데 사용됩니다. SQL Server 2000에서는 데이터베이스 사용자를 호출하여 소유한 스키마를 먼저 확인한 다음 DBO 소유의 스키마를 확인했습니다. SQL Server 2005에서는 개체 이름을 확인할 때 서버가 검색할 첫 번째 스키마를 지정하는 기본 스키마가 사용자마다 하나씩 있습니다. CREATE USER 및 ALTER USER의 DEFAULT_SCHEMA 옵션을 사용하여 기본 스키마를 설정하고 변경할 수 있습니다. DEFAULT_SCHEMA는 정의되어 있지 않으므로 데이터베이스 사용자는 DBO를 기본 스키마로 사용합니다.

권한 부여

여러 엔터티의 소유권을 이전할 수 있습니다.