Ist es möglich, eine Grenze für den physischen Speicherplatz festzulegen, den ein Benutzer (oder eine Gruppe von Benutzern) in einer einzelnen Datenbank verwenden kann? Gibt es beispielsweise eine Methode, um ein Schema einer Dateigruppe zuzuordnen und dann eine maximale Größe für die Dateigruppe festzulegen? Die eigentliche Datenbank würde andere Tabellen enthalten und daher andere Dateigruppen haben wollen, die unbegrenzt sind.
sql-server
SQLMIKE
quelle
quelle
Antworten:
Wenn Ihre Benutzer über Erstellungsberechtigungen in ihrem eigenen Schema verfügen, können Sie einen DDL-Trigger einrichten, um die Tabellenerstellung zu erfassen, die in einer anderen Dateigruppe als der mit diesem Benutzer verknüpften erfolgt. Sie können nicht verhindern, dass die Tabelle erstellt wird, aber Sie können sie zurücksetzen und eine Fehlermeldung zurückgeben.
Fügen wir zunächst einer vorhandenen Datenbank eine Dateigruppe und eine Datei mit maximaler Größe hinzu:
Erstellen wir nun ein Schema und eine Anmeldung, die dieses Schema steuern können:
Erstens kann dieser Benutzer mit diesen Einstellungen keine Tabellen in dbo oder einem anderen Schema als dem eigenen erstellen. Dies bedeutet, dass er standardmäßig nur Tabellen in seiner begrenzten Datei [Gruppe] erstellen kann. Wenn Sie als dieser Benutzer eine Verbindung zum Datenbank-Floob herstellen und versuchen, eine Tabelle in dbo zu erstellen:
Sie erhalten diesen Fehler:
Und aufgrund des Standardschemas dieses Benutzers wird bei Nichtangabe des SomeUser-Schemas immer noch eine in SomeUser erstellte Tabelle angezeigt (obwohl Sie hier, insbesondere in diesem Fall, unbedingt auf bewährte Methoden drängen und beim Erstellen oder Referenzieren von Objekten immer den Schemanamen angeben sollten ).
Jetzt können wir einen Trigger wie diesen erstellen, der den gesamten Stapel zurücksetzt, falls keine Dateigruppe angegeben ist:
Es ist besonders praktisch, die Namen von Benutzer, Schema und Dateigruppe gleich zu halten, was es einfacher macht, dies als programmatisch zu verwenden. Sie können zunächst überprüfen, ob das verwendete Schema nicht zu Ihren "umlimited" -Schemas gehört, und dann eine Prüfung durchführen, bei der der Schemaname mit dem Namen der Dateigruppe verglichen wird. Wenn es nicht übereinstimmt, hat dieser Benutzer Rechte für das falsche Schema und versucht, Objekte am falschen Ort zu erstellen. Es wird ein Fehler ausgegeben:
quelle