
Ich erstelle eine Multi-Tenant-Anwendung, die eine einzelne Datenbank mit mehreren Schemata verwendet. Jeder Mandant hat seinen eigenen Benutzernamen/sein eigenes Passwort. Ich konnte die Anzeigeberechtigungen auf ein bestimmtes Schema beschränken.
Das einzige Problem, auf das ich immer wieder stoße, ist das Aktualisieren von Schemata. Derzeit melde ich mich mit den richtigen Schemaanmeldeinformationen bei meinem C#-Code an und führe dann SQL-Code aus, wenn ich ein bestimmtes (oder alle) Schemata aktualisieren möchte.
Zuerst habe ich versucht, die Tabelle zu ändern, und dann festgestellt, dass ich nicht über genügend Berechtigungen verfügte. Also habe ich die Berechtigungen erneut angepasst. Jetzt versuche ich, eine Volltextindizierung für alle Schemata hinzuzufügen, und es wird mir angezeigt, dass ich nicht über die erforderlichen Berechtigungen verfüge.
Meine Frage ist einfach: Wie kann ich die Berechtigungen eines Benutzers so definieren, the database owner for a specific schema
dass ich keine Probleme mit einem Skript habe, das auf der Datenbank ausgeführt wird?
Antwort1
GRANT CONTROL ON SCHEMA::<schemaname> TO <username>;
erteilt alle Berechtigungenanwendbar auf Schemata und in Schemata enthaltene Objekte. Es werden jedoch keine Berechtigungen für Nicht-Schema-Objekte erteilt. Dies gilt beispielsweise nicht für Volltextkataloge, dienichtSchemagebundene Objekte (Sie geben beim Erstellen eines FT-Katalogs kein Schema an) und für die eine besondere CREATE FULLTEXT CATALOG
Berechtigung erforderlich ist.
In Ihrem Fall müssen Sie Ihr gesamtes Sicherheitsmodell überprüfen und entscheiden, welche Berechtigungen und Aktionen für Ihre Mandanten erforderlich/erlaubt sind. Es gibt keine einfache, allgemeingültige Antwort. Wenn Sie Ihren Mandanten die Freiheit gewähren, sich wie ein vollständiger Datenbankbesitzer zu verhalten, müssen Sie ihnen eine echte Datenbank gewähren. Sie können kein Schema einschleusen und so tun, als wäre es eine Datenbank. Das SQL-Sicherheitsmodell funktioniert einfach nicht so, und Sie sollten lieber mitmachen, als zu versuchen, es zu umgehen.
Antwort2
Ich glaube nicht, dass das möglich ist. Wenn sie DBO sind, können sie in dieser Datenbank alles tun, was nötig ist. Wenn sie nicht DBO sind, sind sie eingeschränkt. Datenbankbesitzer bedeutet genau das – der Besitzer dieser Datenbank.