Над використанням / правильним використанням схем?


9

Задавши цей питання на Stackoverflow , я задавався питанням, де то , що я зробив це правильно / найкращої практики.

По суті, кожен створений мною об'єкт переходить у схему з назвою схеми, що відображає використання. Наприклад, у мене є схеми Auditі Admin(серед інших).

Це, в свою чергу, не залишає жодних об'єктів dbo. Чи це добре? Чи є ще щось, що мені потрібно зробити?


Відповіді:


13

Схеми - це не лише чудовий інструмент захисту (що є достатньою підставою для їх використання), але вони також ідеально підходять для логічного роз'єднання. І начебто це те, що ти практикуєш.

Навіть якщо поточна вимога не потребує спеціального захисту, скажімо, вниз всі об'єкти бази даних, пов'язані з аудитом, повинні бути захищені до ролі бази даних. Якщо ці об'єкти були розкидані по всій dboсхемі, вам доведеться явно мати denyдозволи на окремі об'єкти. Але за допомогою Auditсхеми ви робите сингл denyі ви налаштовані.

Я особисто практикую використання схем. Як і всі речі в базах даних, однак, є щасливий засіб. Я б не створив схему для кожного деталізованого аспекту рівня даних. Існує таке поняття, як занадто багато схем і розділення. Але я здогадуюсь, що ти ніде не близький до цього.


5

Типовою схемою є схеми, засновані на дозволах, тож ви мали б WebGUIі Desktopт. Д. Для коду, щоб усі об'єкти мали однакові дозволи від схеми .

Якщо у вас є чіткі групи користувачів, ви можете на це дозволити, але ви в якийсь момент отримаєте перекриття та брудні дозволи. Я схильний відкладати перевірки користувачів / груп на деяку перевірку внутрішнього коду, а не об'єктів дозволів: скажімо, у вас є користувачі адміністратора та HR Excel: це всі запущені Desktopкоди.

Дані зазвичай поділяють , так що я б мати Dataсхему, може бути, Historyабо Archiveсхему.

Деякий код не є загальнодоступним (наприклад, UDF або внутрішній протокол), тому я використовував Helperсхему для коду, який не повинен працювати за кодом клієнта.

Нарешті, схема подобається Stagingабо Systemабо Maintenanceє корисними іноді.

Хоча в dboсхемі немає жодних об’єктів користувача , користувачеві dboналежать усі схеми.


4

Жодні об’єкти в dboсхемі не є прекрасними. Як я бачу, це також не є надмірним використанням схем - хоча скільки схем є "занадто багато", є досить суб'єктивним питанням (це порівнянно з "Скільки класів повинен мати мій дизайн OO?").

Єдине інше, що я зазначив би - це надання дозволів для схеми, а не окремих об'єктів (у вашому запитанні SO нічого не вказано про дозволи).


Я зазвичай розбираю дозволи в кінці розробки, оскільки ми маємо дещо "текучі" специфікації. Це як ви це робите? Або ви призначаєте дозволи, створюючи об'єкти тощо
Стюарт Блеклер

Створіть об’єкт, призначте його схемі, призначте дозволи до схеми. Якщо вам потрібен широко відкритий доступ для розробки, просто надайте повні дозволи на схеми (схеми) та звужуйте їх пізніше.
Simon Righarts

1

Я хотів би використовувати схеми для розділення бази даних відповідно до модулів та моделей використання. Я вважаю, що це дуже легко зрозуміти таблиці баз даних, тому обслуговування стає простішим. У останньому проекті сервера sql у мене були такі типи схем. LT - таблиці пошуку

COMMON
LT_COMMON
MODULENAME1
LT_MODULENAME1
..

Для великих модулів ми також розділили їх на більше схем. Наприклад, personel модуль складається з більш ніж 5 модулів.

PERSONEL_COMMON
PERSONEL_FINANCE
PERSONEL_MODULE2
..
LT_PERSONEL_COMMON
LT_PERSONEL_FINANCE
LT_PERSONEL_MODULE2

Ми також включили схеми, як і для інших заходів TEMP, MAINTANENCE. У студії управління можна фільтрувати за допомогою назви схеми. Розробник, відповідальний за MODULE1, фільтрує за назвою і працює майже весь час лише з цими таблицями. Це дуже легко розробникам, dbas, новим бажаючим зрозуміти таблиці баз даних.


-1

Найкращі практики можуть бути різними для sql-сервера, ніж для Oracle, однак мій досвід: чим менше схем, тим краще.
Мені подобається мати схему для dba / програміста, який має спеціальні привілеї та якийсь код для обслуговування. Усі бізнес-дані повинні входити в одну схему, щоб ви знали, де вони є. Конвенції іменування достатньо для розмежування використання таблиці або збереженого коду.
Я можу побачити випадок, коли у вас є кілька бізнес-одиниць через різні дані з невеликим перекриттям, кожен з яких має власну схему. Інакше тримати це просто.


2
Schemas є різні по SQL Server: є повне розділення бази даних схеми користувач. Я знайшов обмежені схеми Oracle
gbn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.