Ich möchte Ereignisse in einer Tabelle gespeichert, die Beziehungen zu anderen hat. Ereignisse werden über den Windows-Dienst eingefügt, der eine Verbindung zur Hardware herstellt und von der Hardware liest.SQL Server-Datenbank gegen clevere Admins sichern?
In der Ereignistabelle sind PK, Datum und Uhrzeit und 3 verschiedene Werte.
Das Problem ist, dass sich jeder Admin anmelden und Daten in diese Tabelle einfügen/aktualisieren/löschen kann, z. mit SQL Management Studio. Ich erstelle Trigger, um das Update und das Löschen zu verhindern. Wenn also der Admin keine Trigger kennt, kann er die Daten nicht ändern, aber wenn er den Trigger kennt, kann er den Trigger einfach deaktivieren und tun, was er will.
Also nach langem Nachdenken habe ich eine Idee, neue Spalte (Feld) zu Tabelle hinzufügen und so etwas wie Prüfsumme in diesem Feld speichern, diese Prüfsumme wird basierend auf anderen Werten berechnet. Diese Prüfsumme wird in insert/update-Anweisungen generiert. Wenn jemand etwas manuell einfügt/aktualisiert, werde ich es wissen, denn wenn ich Daten mit Prüfsumme überprüfe, wird es Mismatches geben.
Meine Frage ist, wenn Sie ähnliche Problem haben, wie lösen Sie es? Welchen Algorithmus für Prüfsummen verwenden? Wie kann ich gegen eine Löschanweisung schützen (ich weiß über leere Zahlen in PK, aber es ist nicht genug)?
Ich bin mit SQL Server 2005.
+1 gute Antwort, hilfreiche Tipps zum Auditing. tun Sie Ihr Bestes, um unbeabsichtigte Änderungen (Constraints, Trigger, Auditing) zu vermeiden und absichtliche Änderungen zu erkennen, aber am Ende läuft es auf ein Problem des Vertrauens hinaus. – spencer7593