Wie kann ich sicherstellen, dass bestimmte Daten in der Datenbank nicht mehr geändert werden.Datenbankdatensätze schreibgeschützt machen
Wir arbeiten mit TSQL. In der Datenbank speichern wir Vertragsrevisionen. Diese haben einen Status: Entwurf/aktiv. Wenn der Status aktiv ist, darf die Revision nie mehr geändert werden. Eine Revision kann 8 aktive Module (jede mit einer eigenen Tabelle) mit jeweils eigenen Einstellungen und Untertabellen haben. Dadurch wird ein ganzer Baum von Tabellen mit Datensätzen erstellt, die sich möglicherweise nie mehr ändern, wenn die Vertragsrevision auf "Aktiv" gesetzt wurde.
Idealerweise würde ich diese Datensätze einfach als schreibgeschützt markieren. Aber so etwas gibt es heute nicht. Das nächste, was mir in den Sinn kommt, sind Trigger. Daher muss ich diese Trigger zu vielen Tabellen hinzufügen, die alle mit der Vertragsrevision in Zusammenhang stehen.
Jetzt gibt es vielleicht andere Ansätze, wie eine Datenbank nur für die Archivierung, auf der der Benutzer nur Einfügerechte hat. Wenn eine Vertragsrevision aktiv wird, wird sie daher von einem DB in die Archiv-DB verschoben (Einfügen ist erlaubt). Und kann nie mehr geändert werden (DENY UPDATE | DELETE).
Aber vielleicht gibt es andere geniale Optionen, an die ich nicht gedacht habe, und Sie haben. Vielleicht einschließlich der CLR oder was nicht.
Also wie kann ich eine Baumstruktur von Datensätzen innerhalb unserer TSQL-Datenbank effektiv nur lesbar machen, die am wartungsfreisten ist, leicht zu verstehen, schnell einzurichten und in einer generischen Weise angewendet werden kann?
schränken Sie die Benutzerfähigkeiten ein, um Änderungen tatsächlich zu bewirken. Stellen Sie sicher, dass die Benutzer, die Zugriff auf die Tabellen haben, nur Berechtigungen zum Einfügen, Nichtlö- schen oder Aktualisieren haben. – Takarii
Vielleicht kann diese Frage nützlich sein: http://stackoverflow.com/questions/11185932/how-can-i-disable-update-table-for-all-user –
@Takarii Vielen Dank für Ihren Kommentar. Dies ist jedoch nicht das Problem, da wir auch verhindern wollen, dass Fehler in gespeicherten Prozeduren und EF die Daten nicht versehentlich ändern oder löschen können. Stellen Sie sich fehlerhafte Joins in einer UPDATE-Anweisung vor. Es gibt eine Menge Code in SQL und C#, die etwas mit einer Vertragsrevision oder einem ihrer Module zu tun hat. –