2008-10-31 3 views
20

기본적으로 객체 (테이블, 저장 프로 시저 등)는 dbo 소유자/스키마로 설정됩니다 (MS SQL 2005에서는 스키마라고 부름).MS SQL에있는 객체의 스키마, 소유자

소유자/스키마는 실제로 데이터베이스에서 역할 또는 사용자입니다. 나는 항상 dbo의 기본값을 남겨 두었습니다. 그러나 최근에 마이크로 소프트 훈련 서적에서 테이블들 중 일부가 저장 프로 시저에 다른 소유자/스키마가있는 테이블을 가지고있는 몇 가지 예제를 보았습니다. 이것을하는 것이 유익한 이유는 무엇입니까?

+1

SQL 2000과 SQL 2005를 혼동하지 마십시오. SQL 2005는 SQL 2005와 달리 스키마를 제대로 지원하지 않습니다. 둘 사이의 구별이 중요합니다. –

+0

SQL 2000에서 테이블의 속성을 보면 dbo가 소유자라고합니다. SQL 2005의 속성을 보면 dbo가 스키마라는 것을 알 수 있습니다. 이것은 아마도 내 혼란의 일부입니다. – Jeremy

답변

24

스키마 사용은 보안 문제가있을 때 매우 유용합니다.

데이터베이스에 액세스하는 여러 응용 프로그램이있는 경우 물류 부서에 인사 레코드에 대한 액세스 권한을 부여하지 않을 수 있습니다. 따라서 모든 Human Resources 테이블을 hr 스키마에 넣고 hr 역할의 사용자 만 액세스 할 수 있습니다.

6 개월 만에 물류 센터는 내부 비용 계정을 알아야 이러한 파란색 펜 팔레트를 모두 올바른 위치 사람에게 보낼 수 있습니다. 그런 다음 hr 스키마와 물류 스키마를 볼 수있는 권한을 가진 사용자로 실행되는 저장 프로 시저를 만들 수 있습니다. 물류 사용자는 HR에서 무슨 일이 벌어지고 있는지 알 필요가 없지만 여전히 데이터를 얻습니다.

cfeduke가 제안한 방식으로 스키마를 사용할 수 있으며 객체 브라우저에서 객체를 그룹화하는 데 사용할 수 있습니다. 이 작업을 수행하는 경우 Person.Address 및 Company.Address를 작성하게 될 수도 있기 때문에 조심하십시오. 단일 dbo.Address가 필요한 것입니다. (예를 들어 두 번 해설하지 않고 cfeduke를 사용하여 주소 테이블은 같을 수도 있고 다를 수도 있습니다 YMMV).

+0

아주 좋습니다. 이 대답에 좋은 직장. 오늘날 나를 도왔습니다 –

+0

@Jeremiah Peschka : 주어진 역할에 스키마의 객체에 대한 액세스 권한을 부여하는 것만 큼, 왜 스키마의 모든 객체에 액세스 할 수있는 역할을 만들지 않는 것이 좋을까요? 역할을 통해서가 아니라 스키마를 통해 어떤 이점이 있습니까? – MSIS

+0

역할을 만들고 스키마와 결합하여 세분화 된 보안을 제공하는 것이 좋습니다. 개별 권한을 관리하는 것은 어려운 일입니다. 그러나 역할을 사용하면 사용자를 그룹화 할 수 있습니다. 스키마를 사용하면 관련 데이터베이스 개체를 그룹화 할 수 있습니다. 그 두 가지를 결합하는 것은 나에게 위대한 승리처럼 보입니다. –

3

dev에 환경에서 조직

, 오브젝트의 생산 복사 DBO하지만 개발자들은 자신의 스키마에 개발할 수 있습니다. 그런 다음 코드는 제품 사본이나 그 변경 사항을 매우 간단하게 참조 할 수 있습니다. 별칭을 사용하면이 기법을 훨씬 간단하게 만들 수 있습니다.


또한 프로덕션 데이터베이스는 다양한 시스템 또는 하위 시스템을 지원할 수 있습니다. 고유 한 스키마를 사용하여 해당 오브젝트를 그룹화 된 상태로 유지할 수 있습니다.

5

SQL 2000에서 스키마는 데이터베이스 사용자와 동일하게 SQL 2005에서 스키마를 만든 데이터베이스 사용자와 별도로 존재하는 고유 한 네임 스페이스입니다.

나중에 다른 프로젝트에서 사용할 기능이나 모듈을 만들 때 스키마를 사용하므로 모듈에서 사용하는 데이터베이스 개체를 격리 할 수 ​​있습니다.

4

이전 이름 ​​공간과 같은 스키마를 사용 했으므로 Address ([Person].[Address], [Company].[Address])라는 이름의 엔티티가 여러 개있을 수 있습니다. 이점은 SQL Management Studio의 시각적 구성이므로 한 가지 스키마 아래에 모든 항목을 넣고 하나의 식별자 (예 : [dbo].[PersonAddress])를 사용하여 이름 지정 테이블을 만들면 동일한 결과를 얻을 수 있습니다.

전 개발자 컴퓨터에서 SQL Server Developer Edition을 실행하기 전에 개발자와 개발자의 개발을 위해이 도구를 사용했습니다 (근무 초기에 중앙 집중식 개발 데이터베이스가 있었을 때).

1

This article은 SQL Server 2000에서 2005 로의 변경을 포함하여 잘 설명합니다.

관련 문제