2017-11-15 1 views
0

ich sicherstellen will, dass die Zeilen in meiner MySQL-Tabelle können nicht nach ihrer Erstellung manipuliert werden.auf MySQL-Tabelle

Ich weiß, dass nur Einsatz Gewährung und wählen Sie Privilegien ein Schritt in dieser Richtung ist, aber ich mag auch der Root-Benutzer sicherstellen, dass die Daten nicht nach dem Einsetzen verändern kann.

Incremental Hashing: Zu diesem Zweck Ich denke über eine zusätzliche Spalte ‚Hash‘, die den Hash-Wert der letzten Zeile der Hash-concatted mit den neuen Spaltendaten speichern.

Wenn ich die Hashes zB dann exportieren. Jeden Tag konnte jede Manipulation entdeckt werden.

Bin ich richtig? Kannst du mich auf einige Ressourcen hinweisen, wo dies bereits geschehen ist? Würde man das mit einem Trigger machen? Vielleicht sogar in einer Hilfstabelle, auf die nur von root zugegriffen werden kann?

Antwort

0

So etwas:

DELIMITER $$ 
CREATE TRIGGER trigger_hash 
AFTER INSERT 
    ON table_name FOR EACH ROW 

BEGIN 
UPDATE table_name 
SET hash = MD5(concat(NEW.field1, NEW.field2, NEW.field3, ...)) 
WHERE id= NEW.id 
END; 
$$ 
DELIMITER ; 
+0

Danke, geht das in die richtige Richtung. Allerdings möchte ich auch den Hash der letzten Reihe zu übernehmen, wie 'set new.hash: = SHA2 (CONCAT (NEW.f1, NEW.f2, ..., (wählen Hash aus der Tabelle, wo id = LAST_INSERT_ID())), 256) ' –

+0

Ich verstehe Ihren Kommentar nicht, möchten Sie den Hash der vorherigen Zeile in der neuen Zeile hinzufügen? –

+0

Ja! Auf diese Weise jede spätere Datenmanipulation (solange der Hash wird von Zeit zu Zeit gespeichert) nachgewiesen werden kann –