Überbeanspruchung / korrekte Verwendung von Schemata?

9

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 Auditund Admin(unter anderem).

Dies lässt wiederum keine Objekte in dbo. Ist das ok? Muss ich noch etwas tun?

Stuart Blackler
quelle
Mögliches Duplikat des Schemaentwurfs - Best Practices? . Und verwandte
gbn

Antworten:

13

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 dboSchema verteilt wären, müssten Sie explizit denyBerechtigungen für die einzelnen Objekte erteilen. Aber mit dem AuditSchema machen Sie eine einzige denyund 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.

Thomas Stringer
quelle
5

Ein typisches Muster ist Schema auf Berechtigungen basiert, so dass Sie müßten WebGUI, Desktopetc 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 DesktopCode aus.

Daten werden normalerweise gemeinsam genutzt, sodass ich ein DataSchema habe, möglicherweise ein Historyoder ein ArchiveSchema.

Einige Codes sind nicht öffentlich (wie eine UDF oder ein interner Prozess), daher würde ich ein HelperSchema für Code verwenden, der nicht vom Clientcode ausgeführt werden sollte.

Schließlich Schemata wie Stagingoder Systemoder Maintenancesind nützlich , manchmal.

Obwohl das dboSchema keine Benutzerobjekte enthält , dbobesitzt der Benutzer alle Schemas.

gbn
quelle
4

Keine Objekte im dboSchema 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).

Simon Righarts
quelle
Normalerweise sortiere ich Berechtigungen am Ende der Entwicklung aus, da wir manchmal etwas "flüssige" Spezifikationen haben. Machst du das so? Oder weisen Sie Berechtigungen zu, wenn Sie die Objekte usw. erstellen
Stuart Blackler
Objekt erstellen, einem Schema zuweisen, dem Schema Berechtigungen zuweisen. Wenn Sie für die Entwicklung einen offenen Zugriff benötigen, gewähren Sie einfach die vollständigen Berechtigungen für die Schemas und schränken Sie sie später ein.
Simon Righarts
1

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

COMMON
LT_COMMON
MODULENAME1
LT_MODULENAME1
..

Für große Module haben wir sie auch in weitere Schemata unterteilt. Zum Beispiel besteht das Personalmodul aus mehr als 5 Modulen.

PERSONEL_COMMON
PERSONEL_FINANCE
PERSONEL_MODULE2
..
LT_PERSONEL_COMMON
LT_PERSONEL_FINANCE
LT_PERSONEL_MODULE2

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.

Atilla Ozgur
quelle
-1

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.

kevinsky
quelle
2
Schemas sind in SQL Server unterschiedlich: Es gibt eine vollständige Trennung zwischen Datenbankschema und Benutzer. Ich fand Oracle-Schemas begrenzt
gbn