Czy należy unikać schematu dbo?


29

Jeśli chodzi o schemat dbo:

  • Czy najlepszą praktyką jest unikanie korzystania ze schematu dbo podczas tworzenia obiektów bazy danych?
  • Dlaczego należy unikać schematu dbo, czy powinien?
  • Który użytkownik bazy danych powinien być właścicielem schematu dbo?

Niektórzy konsultanci powiedzieli, że dobrą praktyką jest unikanie schematu dbo i zawsze tworzenie schematów zdefiniowanych przez użytkownika i przypisywanie obiektów do tych schematów.
jrara,

Znalazłem to oświadczenie również od Aleksandra Kuzniecowa w komentarzach do tego postu na blogu :
jrara,

Odpowiedzi:


22

Może to być dobra praktyka, ponieważ gdy inni użytkownicy korzystają z bazy danych, chcesz mieć możliwość ograniczenia ich dostępu za pomocą schematów. Na przykład w bazie danych masz następujące tabele.

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

Jako dyrektor HR jestem w stanie uzyskać dostęp do czegokolwiek w HRschemacie, jako ITdyrektor widzę nazwy użytkowników i poziomy dostępu pracowników. EngineeringDział można zobaczyć, jakie strony pracy są aktywne, itd. Jeśli dbo był zestaw schematu dla wszystkich tabel musiałbym trudniej segmentację moje dane i zapewniając role dostępu.

Wierzę, że w SQL Server ideą jest oferowanie produktu, do którego mogą uzyskać dostęp i które mogą uzyskiwać zapytania od różnych działów. W rzeczywistości tylko DBA / DBDevs naprawdę uzyskują dostęp do bazy danych i zwykle przechowują tylko dane aplikacji.

Pomaga również w czytelności i zarządzaniu. Na pierwszy rzut oka mogę łatwo zidentyfikować, która tabela zawiera jakie dane i jak dane są rozdzielane.

Osobiście wolę definiować schematy jako ogólną praktykę. Pamiętaj, że schemat jest grecki dla planu, mając uporządkowaną strukturę schematu pomaga zaplanować i zidentyfikować dane.


6

Myślę, że to naprawdę sprowadza się do preferencji użytkownika, ponieważ nie ma prawdziwego technologicznego powodu, aby to zrobić. W rzeczywistości, dla uproszczenia, mówię zawsze używaj dbo, chyba że twoje wymagania bezpieczeństwa stanowią inaczej. Oczywiście zawsze możesz to zrobić tylko w celach organizacyjnych.


1
100% za tym podejściem. Często zostawiam tabele „core” w schemacie dbo dla uproszczenia i zaczynam dodawać w razie potrzeby. Zwykle pierwszym oddzielnym schematem, który dodaję, jest „etap” lub „etapowy”, aby osobno pogrupować tabele tymczasowe. Innym przykładem byłoby dodanie danych ze źródła zewnętrznego, powiedzmy Twitter. Zamiast prefiksu wszystkich tabel (tj. TwitterAccount, TwitterStatus itp.) Utworzę schemat „Twitter”.
robopim

5

W każdym razie należy unikać dbo, ponieważ jest to ustawienie domyślne dla programu SQL Server, ale w ogóle nie jest opisowe. Podobnie jak wszystkie inne domyślne nazwy, ponieważ jest znany, znacznie ułatwia życie hakera (chociaż jeśli są w punkcie, w którym próbują po prostu wymyślić nazwę schematu, prawdopodobnie już zostałeś oszukany).

Tam, gdzie pracuję, używamy schematów, aby podzielić bazę danych na logiczne sekcje i przypisać uprawnienia do schematów.

Na przykład możemy mieć system inwentaryzacji z bazą danych. Główne tabele mogą znajdować się w schemacie inv. Jeśli zaimportujemy coś do bazy danych, wówczas jako część procesu importowania zostanie użyty schemat pomostowy. Jeśli mamy jakieś systemowe procedury składowane, do których użytkownicy nie potrzebują dostępu, umieszczamy je w schemacie SP.


1
+1 za „unikaj go, ponieważ jest to ustawienie domyślne”. Zmusza użytkowników, aby choć trochę o tym pomyśleli podczas tworzenia obiektu.
BradC,

4

Nie była to wcześniej najlepsza praktyka, ponieważ schematy były ukryte przed SQL 2005, wszystko zostało umieszczone w schemacie dbo. Zespół SQL Server pokazuje to jako najlepszą praktykę i opublikował artykuł na ten temat: SQL Server Best Practices - Implementation of Object Object Schemas

Jeśli chodzi o inne pytanie dotyczące tego, kto powinien być właścicielem: schemat dbo jest własnością konta użytkownika dbo.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.