Sollte ein DBO-Schema vermieden werden?

29

Wenn es um das Dbo-Schema geht:

  • Ist es eine bewährte Methode, beim Erstellen von Datenbankobjekten die Verwendung des DBO-Schemas zu vermeiden?
  • Warum sollte das Dbo-Schema vermieden werden oder sollte es?
  • Welcher Datenbankbenutzer sollte das Dbo-Schema besitzen?
jrara
quelle
Einige Berater gaben an, dass es empfehlenswert sei, das Dbo-Schema zu vermeiden und immer benutzerdefinierte Schemata zu erstellen und diesen Schemata Objekte zuzuweisen.
Jrara
Ich fand auch diese Aussage von Alexander Kuznetsov in den Kommentaren dieses Blog Beitrag :
jrara

Antworten:

21

Dies kann eine gute Vorgehensweise sein, da Sie den Zugriff anderer Benutzer auf die Datenbank mithilfe von Schemas einschränken möchten. In einer Datenbank haben Sie beispielsweise die folgenden Tabellen.

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

Als HR-Direktor kann ich auf alles im HRSchema zugreifen , als ITDirektor kann ich Benutzernamen und Zugriffsebenen von Mitarbeitern anzeigen. Die EngineeringAbteilung kann sehen, welche Baustellen aktiv sind usw. Wenn dbo das festgelegte Schema für alle Tabellen wäre, würde es mir schwerer fallen, meine Daten zu segmentieren und Zugriffsrollen bereitzustellen.

Ich glaube, die Idee bei SQL Server ist es, ein Produkt anzubieten, auf das von verschiedenen Abteilungen zugegriffen und abgefragt werden kann. In Wirklichkeit greifen nur DBAs / DBDevs wirklich auf die Datenbank zu und speichern normalerweise nur Anwendungsdaten.

Es hilft auch bei der Lesbarkeit und Verwaltbarkeit. Auf den ersten Blick kann ich leicht erkennen, welche Tabelle welche Daten enthält und wie die Daten getrennt sind.

Persönlich bevorzuge ich es, Schemata als allgemeine Praxis zu definieren. Denken Sie daran, dass das Schema für den Plan griechisch ist. Eine übersichtliche Schema-Struktur hilft Ihnen beim Planen und Identifizieren von Daten.

Ryan
quelle
6

Ich denke, das hängt wirklich von den Vorlieben der Benutzer ab, da es keinen wirklichen technologischen Grund gibt, dies zu tun. Der Einfachheit halber sage ich immer dbo, es sei denn, Ihre Sicherheitsanforderungen sehen etwas anderes vor. Natürlich können Sie dies auch nur zu organisatorischen Zwecken tun.

Eric Humphrey - Lotsahelp
quelle
1
100% hinter diesem Ansatz. Ich lasse die "Kern" -Tabellen der Einfachheit halber oft im Dbo-Schema und beginne bei Bedarf mit dem Hinzufügen. Normalerweise ist das erste separate Schema, das ich hinzufüge, "Stage" oder "Staging", um meine Staging-Tabellen separat zu gruppieren. Ein weiteres Beispiel wäre das Hinzufügen von Daten aus einer externen Quelle, beispielsweise Twitter. Anstatt allen Tabellen (dh TwitterAccount, TwitterStatus usw.) ein Präfix zu geben, erstelle ich ein "Twitter" -Schema.
Robopim
5

Wenn überhaupt, sollte Dbo vermieden werden, da dies die Standardeinstellung für SQL Server ist. Außerdem ist es überhaupt nicht beschreibend. Wie alle anderen Standardnamen macht es einem Hacker das Leben um einiges leichter, da es vorbekannt ist (obwohl Sie wahrscheinlich bereits überlistet sind, wenn er gerade versucht, Ihren Schemanamen herauszufinden).

Wo ich arbeite, verwenden wir Schemas, um die Datenbank in logische Abschnitte zu unterteilen und Schemas Berechtigungen zuzuweisen.

Zum Beispiel können wir ein Inventarsystem mit einer Datenbank haben. Die Haupttabellen befinden sich möglicherweise im inv-Schema. Wenn wir etwas in die Datenbank importieren, wird ein Staging-Schema als Teil des Importvorgangs verwendet. Wenn wir gespeicherte Systemprozeduren haben, auf die Benutzer keinen Zugriff benötigen, fügen wir sie in ein SP-Schema ein.

DForck42
quelle
1
+1 für "Vermeide es, weil es die Standardeinstellung ist". Zwingt die Benutzer, zumindest ein wenig darüber nachzudenken, wenn sie ein Objekt erstellen.
BradC
4

Es war bisher keine bewährte Methode, da Schemas vor SQL 2005 ausgeblendet wurden und alles in das Dbo-Schema eingefügt wurde. Das SQL Server-Team zeigt dies als Best Practice und veröffentlichte einen Artikel darüber: Best Practices für SQL Server - Implementierung von Datenbankobjektschemata

Was Ihre andere Frage betrifft, wem es gehören sollte: Das dbo-Schema gehört dem dbo-Benutzerkonto.

Shawn Melton
quelle