Nachdem ich diese Frage zu Stackoverflow gestellt hatte , fragte ich mich, wo ich das Richtige / Best Practice getan habe.
Grundsätzlich wird jedes von mir erstellte Objekt in ein Schema verschoben, dessen Schemaname eine Verwendung widerspiegelt. Zum Beispiel habe ich die Schemata Audit
und Admin
(unter anderem).
Dies lässt wiederum keine Objekte in dbo
. Ist das ok? Muss ich noch etwas tun?
sql-server
best-practices
Stuart Blackler
quelle
quelle
Antworten:
Schemata sind nicht nur ein großartiges Sicherheitstool (Grund genug, sie zu verwenden), sondern sie eignen sich auch perfekt für die logische Trennung. Und es scheint, als ob Sie dies üben.
Selbst wenn die aktuelle Anforderung keine besondere Sicherheit erfordert, sollten später alle Datenbankobjekte, die sich auf die Überwachung beziehen, für eine Datenbankrolle sicher sein. Wenn diese Objekte im gesamten
dbo
Schema verteilt wären, müssten Sie explizitdeny
Berechtigungen für die einzelnen Objekte erteilen. Aber mit demAudit
Schema machen Sie eine einzigedeny
und Sie sind festgelegt.Ich persönlich übe die Verwendung von Schemata. Wie alle Dinge in Datenbanken gibt es jedoch ein fröhliches Medium. Ich würde nicht für jeden granularen Aspekt der Datenschicht ein Schema erstellen. Es gibt zu viele Schemata und Trennungen. Aber ich vermute, Sie sind dem nicht nahe.
quelle
Ein typisches Muster ist Schema auf Berechtigungen basiert, so dass Sie müßten
WebGUI
,Desktop
etc für Code , so dass alle Objekte , die die gleichen Zugriffsrechte haben aus dem Schema .Wenn Sie eindeutige Benutzergruppen haben, können Sie dies zulassen, aber Sie werden irgendwann überlappende und unübersichtliche Berechtigungen erhalten. Ich neige dazu, die Benutzer- / Gruppenprüfungen auf einige Überprüfungen innerhalb des Codes und nicht auf Berechtigungsobjekte zu verschieben: Angenommen, Sie haben Admin- und HR Excel-Benutzer: Diese führen alle
Desktop
Code aus.Daten werden normalerweise gemeinsam genutzt, sodass ich ein
Data
Schema habe, möglicherweise einHistory
oder einArchive
Schema.Einige Codes sind nicht öffentlich (wie eine UDF oder ein interner Prozess), daher würde ich ein
Helper
Schema für Code verwenden, der nicht vom Clientcode ausgeführt werden sollte.Schließlich Schemata wie
Staging
oderSystem
oderMaintenance
sind nützlich , manchmal.Obwohl das
dbo
Schema keine Benutzerobjekte enthält ,dbo
besitzt der Benutzer alle Schemas.quelle
Keine Objekte im
dbo
Schema sind vollkommen in Ordnung. Soweit ich sehen kann, ist dies auch keine Überbeanspruchung von Schemas - obwohl die Anzahl der Schemata "zu viele" ist, ist eine ziemlich subjektive Frage (vergleichbar mit "Wie viele Klassen sollte mein OO-Design haben?").Das einzige andere, was ich erwähnen würde, wäre, Berechtigungen für das Schema anstelle einzelner Objekte zu erteilen (Ihre SO-Frage gibt nichts über Berechtigungen an).
quelle
Ich möchte Schemata verwenden, um die Datenbank nach Modulen und Verwendungsmustern zu trennen. Ich finde, dass es sehr einfach ist, Datenbanktabellen zu verstehen, wodurch die Wartung einfacher wird. Ich hatte in meinem letzten SQL Server-Projekt folgende Schematypen. LT - Nachschlagetabellen
Für große Module haben wir sie auch in weitere Schemata unterteilt. Zum Beispiel besteht das Personalmodul aus mehr als 5 Modulen.
Wir haben auch Schemata wie für andere Aktivitäten TEMP, MAINTANENCE aufgenommen. Im Management Studio können Sie anhand des Schemanamens filtern. Ein Entwickler, der für MODUL1 verantwortlich ist, filtert nach Namen und arbeitet fast immer nur mit diesen Tabellen. Dies macht es Entwicklern, dbas und Neulingen gleichermaßen leicht, Datenbanktabellen zu verstehen.
quelle
Best Practices können für SQL Server anders sein als für Oracle. Ich habe jedoch die Erfahrung gemacht, dass je weniger Schemas, desto besser.
Ich möchte ein Schema für den Datenbank- / Programmierer haben, das über spezielle Berechtigungen und Code für die Wartung verfügt. Alle Geschäftsdaten sollten in einem Schema gespeichert werden, damit Sie wissen, wo sie sich befinden. Namenskonventionen reichen aus, um zwischen der Verwendung der Tabelle oder des gespeicherten Codes zu unterscheiden.
Ich sehe einen Fall, in dem Sie mehrere Geschäftsbereiche haben, die unterschiedliche Daten mit geringer Überlappung haben und jeweils ein eigenes Schema haben. Ansonsten halte es einfach.
quelle