dbo 스키마를 피해야합니까?


29

dbo 스키마와 관련하여 :

  • 데이터베이스 개체를 만들 때 dbo 스키마를 사용하지 않는 것이 가장 좋은 방법입니까?
  • dbo 스키마를 피해야하는 이유는 무엇입니까?
  • 어떤 데이터베이스 사용자가 dbo 스키마를 소유해야합니까?

일부 컨설턴트는 dbo 스키마를 피하고 항상 사용자 정의 스키마를 작성하고 이러한 스키마에 오브젝트를 지정하는 것이 좋습니다.
jrara

이 블로그 게시물 의 의견에서 Alexander Kuznetsov
에서도이 진술을 찾았

답변:


21

데이터베이스를 사용하는 다른 사용자가있을 때 스키마를 사용하여 액세스를 제한 할 수 있기 때문에 좋은 습관 일 수 있습니다. 예를 들어 데이터베이스에는 다음 표가 있습니다.

HR.Payhist
HR.Payscale
HR.Jobdesc
IT.username
IT.useraccesslevel
ENG.jobsite
ENG.trainings

HR 디렉터로서 나는 HR스키마의 모든 것에 액세스 할 수 있으며, IT디렉터 로서 직원의 사용자 이름과 액세스 레벨을 볼 수 있습니다. Engineering부서는 DBO가 나는 열심히 시간 내 데이터를 분할하고 액세스 역할을 제공하는 것 모든 테이블에 대한 설정 스키마 인 경우 작업 현장 등, 활동이 무엇인지 볼 수 있습니다.

SQL Server의 아이디어는 다른 부서에서 액세스하고 쿼리 할 수있는 제품을 제공하는 것입니다. 실제로는 DBA / DBDev만이 실제로 데이터베이스에 액세스하며 일반적으로 애플리케이션 데이터 만 저장합니다.

또한 가독성과 관리 효율성에 도움이됩니다. 처음에 나는 어떤 테이블이 어떤 데이터를 보유하고 있고 어떻게 데이터가 분리되어 있는지 쉽게 식별 할 수 있습니다.

개인적으로 저는 일반적인 관행으로 스키마를 정의하는 것을 선호합니다. 스키마는 계획을위한 그리스어라는 점을 기억하십시오. 계획된 스키마 구조를 통해 데이터를 계획하고 식별 할 수 있습니다.


6

실제로 기술적 인 이유가 없기 때문에 이것이 사용자 선호에 달려 있다고 생각합니다. 실제로 간단하게하기 위해 보안 요구 사항이 달리 명시하지 않는 한 항상 dbo를 사용한다고 말합니다. 물론 항상 조직적인 목적으로 만 할 수 있습니다.


1
이 접근법보다 100 % 뒤쳐져 있습니다. 나는 종종 단순화를 위해 dbo 스키마에 "코어"테이블을 남겨두고 필요할 때 추가하기 시작합니다. 일반적으로 추가하는 첫 번째 별도 스키마는 "스테이지"또는 "스테이징"이며 준비 테이블을 개별적으로 그룹화합니다. 또 다른 예는 Twitter와 같은 외부 소스의 데이터를 추가하는 것입니다. 모든 테이블 (예 : TwitterAccount, TwitterStatus 등)의 접두사 대신 "Twitter"스키마를 작성합니다.
robopim

5

dbo는 SQL Server의 기본값이기 때문에 피해야 할 것이지만 설명이 아닙니다. 다른 모든 기본 이름과 마찬가지로, 이미 알려져 있기 때문에 해커의 삶을 훨씬 쉽게 만들 수 있습니다 (스키마 이름을 알아 내려고하는 시점에 있다면 이미 이미 지쳤을 것입니다).

내가 일하는 곳에서는 스키마를 사용하여 데이터베이스를 논리적 섹션으로 나누고 스키마에 권한을 할당합니다.

예를 들어, 데이터베이스가있는 인벤토리 시스템이있을 수 있습니다. 기본 테이블은 inv 스키마에있을 수 있습니다. 데이터베이스로 무엇이든 가져 오면 스테이징 스키마가 가져 오기 프로세스의 일부로 사용됩니다. 사용자가 액세스 할 필요가없는 시스템 저장 프로 시저가 있으면 sp 스키마에 넣습니다.


1
"기본값이므로 피하십시오"+1 사용자가 객체를 만들 때 최소한 그것에 대해 생각하도록합니다.
BradC

4

SQL 2005 이전에는 스키마가 숨겨져 있으므로 모든 것이 dbo 스키마에 포함되었으므로 이전에는 모범 사례가 아니 었습니다. SQL Server 팀은이를 모범 사례로 표시하고 이에 관한 기사를 게시했습니다. SQL Server 모범 사례 – 데이터베이스 개체 스키마 구현

누가 그것을 소유해야하는지에 대한 다른 질문 : dbo 스키마는 dbo 사용자 계정이 소유합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.