Effektiv metod för att upptäcka datamanipulation i databas?

Permalänk

Effektiv metod för att upptäcka datamanipulation i databas?

Hej!

Sitter och funderar på om det finns ett smart och allmänt vedertaget sätt för att upptäcka manipulation av data i en databas? Scenariot är att man graskar data i databasen och därefter markerar/godkänner den med en flagga som inte kan förfalskas med t.ex. kryptografi.

Utan att skriva en roman av upprinnelsen till detta så är kontentan att jag har en databas med krav i ett projekt och vill kunna "låsa" en del rader i denna databasen när jag har granskat och godkänt dem. Därefter vill jag förhindra manipulation av den raden, men om manipulation uppstår (nån går in med adminkonto och ändrar t.ex.) så måste det upptäckas.

Det jag funderar på främst är egentligen om det idag finns några eleganta lösningar på denna frågeställningen som är open source? Om inte så har jag en liten idé som jag tacksamt tar emot lite kommentarer på. Denna tanken har bubblat lite i skallen ett tag, men har inte riktigt fått tummen ur att göra någon implementation än. Den kan mao även vara helt åt skogen

Vad jag hittills har tänkt på är att man för alla relaterade dataposter gör en hash som man därefter krypterar med t.ex. OpenPGP. Antingen att man har en separat tabell om håller denna hashsumman eller att man har en hashkolumn per tabell.

Önskemålen är att så långt det går använda befintliga öppna standarder för allt (t.ex. OpenPGP) och att det skall vara Open Source. Sedan skall man kunna byta databasmedium och behålla säkerheten (t.ex. byta databasmotor, exportera till XML, JSON, etc).

Min idé tycker jag verkar fungera i teorin, men är rädd att den kan dras med mycket overhead (hashkolumner) och att det kan bli rätt tungrott då mängden data växer. Om man t.ex. ändrar i en rad som refererar till många andra rader måste samtliga dessa hashas och beräknas om.

Någon som har input på detta eller funderat på liknande, alternativt känner till ett vedertaget arbetssätt för att uppnå samma sak i dagsläget?

Visa signatur

Moderkort: Asus Z97-PRO CPU: Intel Core i7 4790K GPU: MSI GTX 980 Gaming
RAM: A-Data 2x8GB DDR3 Chassi: NZXT H400W

Permalänk
Medlem

Ett script där den kopierar datan på raden och sedan lagrar den separat och sedan med ett interval jämför datan i databasen med den kopierade texten.
Upptäcker den en differans så "larmar" den via email.

Det är väl den "enklaste" lösningen jag kan komma på

Permalänk
Medlem

Pratar vi manipulation direkt i Databasen, dvs utan ditt program?

Permalänk
Medlem

Är det möjligt att skapa immutable datalagringar på detta sätt ens?

Skrivet av Christhebalrog:

Vad jag hittills har tänkt på är att man för alla relaterade dataposter gör en hash som man därefter krypterar med t.ex. OpenPGP. Antingen att man har en separat tabell om håller denna hashsumman eller att man har en hashkolumn per tabell.

Skulle inte hjälpa i det fallet du ställer upp, då användaren bara kan uppdatera en av hasharna i denna separata tabell du snackar om. Samma dilemma kvarstår egentligen.

Skrivet av nikwad:

Ett script där den kopierar datan på raden och sedan lagrar den separat och sedan med ett interval jämför datan i databasen med den kopierade texten.
Upptäcker den en differans så "larmar" den via email.

Det är väl den "enklaste" lösningen jag kan komma på

Inget hindrar någon från att ändra båda ställena samtidigt dock.

Permalänk
Medlem
Skrivet av MrDoggo:

Är det möjligt att skapa immutable datalagringar på detta sätt ens?

Skulle inte hjälpa i det fallet du ställer upp, då användaren bara kan uppdatera en av hasharna i denna separata tabell du snackar om. Samma dilemma kvarstår egentligen.

Inget hindrar någon från att ändra båda ställena samtidigt dock.

Med t.ex. en blockkedja skulle det vara möjligt.

Men jag tycker lösningen med att köra på någon annan maskin ett skript som läser och kopierar de raderna med jämna mellanrum lät som en bra lösning. Se till att ingen annan har tillgång till den maskinen än du.

Visa signatur

AW3423DW QD-OLED - Ryzen 5800x - MSI Gaming Trio X 3090 - 64GB 3600@cl16 - Samsung 980 Pro 2TB/WD Black SN850 2TB

Permalänk
Medlem

@MrDoggo: Man får ju se till att det är enbart en själv som har tillgång till den burk/vm (eller w/e) som kör detta script.
För den lär ju inte behöva användas för resten av de som använder databasen.

Permalänk
Avstängd

Det vedertagna sättet är väl att se till att logins/användare har de korrekta rättigheterna och sedan koppla på auditing och change tracking i databashanteraren.

Annars får du väl sätta upp någon webbtjänst mot vilken informationen kan verifieras med jämna mellanrum eftersom det ändå handlade om information som var känd och godkänd av dig på förhand.

Permalänk

Tack för era idéer!

Skrivet av nikwad:

Ett script där den kopierar datan på raden och sedan lagrar den separat och sedan med ett interval jämför datan i databasen med den kopierade texten.
Upptäcker den en differans så "larmar" den via email.

Det är väl den "enklaste" lösningen jag kan komma på

Då tappar man lite rörligheten som jag hade tänkt, nämligen att du skulle kunna exportera datan till en filbaserad databas baserad på t.ex. JSON eller XML.

Skrivet av kobb3:

Pratar vi manipulation direkt i Databasen, dvs utan ditt program?

Ja, det är väl det som jag ser som troligast. Manipulation genom GUI/gränssnitt tänkte jag att man kan styra med flaggor och triggers i databasen. Det är så jag gör nu nämligen. Men det fungerar dessvärre inte om man exporterar och har en textfilsbaserad databas.

Skrivet av MrDoggo:

Skulle inte hjälpa i det fallet du ställer upp, då användaren bara kan uppdatera en av hasharna i denna separata tabell du snackar om. Samma dilemma kvarstår egentligen.

Inget hindrar någon från att ändra båda ställena samtidigt dock.

En hash kan ju alltid uppdateras och därför menar jag att en användare krypterar hashen med en privat nyckel från t.ex. OpenPGP. Jag gör antagandet att en illasinnad användare inte har kapacitet att förfalska min OpenPGP-signatur. Vad som då kan ske är att markeringen "granskad/godkänd" går förlorad och då är jag väl ganska nöjd eftersom jag då måste gå igenom datan igen för att kolla att den är korrekt.

Visa signatur

Moderkort: Asus Z97-PRO CPU: Intel Core i7 4790K GPU: MSI GTX 980 Gaming
RAM: A-Data 2x8GB DDR3 Chassi: NZXT H400W