Account Options

  1. Sign in
The old Google Groups will be going away soon.
Switch to the new Google Groups.
Google Groups Home
« Groups Home
Nachvollziehbare Änderungen an Daten
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  2 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Sebastian.Gohres@googlema il.com  
View profile   Translate to Translated (View Original)
 More options Jan 19, 9:47 am
Newsgroups: de.comp.datenbanken.mysql, de.comp.lang.php.misc
From: "Sebastian.Goh...@googlemail.com" <sebastian.goh...@googlemail.com>
Date: Thu, 19 Jan 2012 06:47:40 -0800 (PST)
Local: Thurs, Jan 19 2012 9:47 am
Subject: Nachvollziehbare Änderungen an Daten
Hallo zusammen!

Ich stehe vor folgender Aufgabe:

Auf einer Website mit diversen verschiedenen Formularen (Kundenstamm,
Produkte, ...), deren Daten in einer mySQL-Datenbank gespeichert
werden, sollen sämtliche Änderungen nachvollziehbar gespeichert sein.

Bisher werden Änderungen mit einem UPDATE-Statement einfach
gespeichert.
Problem für den Auftraggeber: Er kann nicht mehr sehen,
1. welcher Wert zuvor in der Datenbank stand
2. wer hat die Änderungen vorgenommen (also welcher auf der Website
angemeldete Benutzer)
3. wann wurde diese Änderung vorgenommen.

Und zwar soll _jede_ Änderung nachvollziehbar sein, nicht nur die
letzte. Also eine Art Historie/Verlauf.

Wie kann man dies, vor allem für beliebig viele Formulare/DB-Tabellen
am besten lösen?
Zudem sind viele Formulare über mehrere DB-Tabellen mittels
Primärschlüssel verteilt (Normalform halt).

Am einfachsten wäre es natürlich, für jede betroffene Tabelle eine
"Kopie" der Tabelle anzufertigen, in welcher bei einem Update zuerst
eine Kopie des alten Eintrags erstellt wird.
Aber dieses hat viele Nachteile:
- Immenser Overhead an Daten (z.B. falls nur ein Feld geändert wurde)
- Abhängigkeiten über Indizes
Beispiel: Es wird eine Änderung an einem Produkt vorgenommen. Dieser
Datensatz enthält u.a. die ID zu dem Hersteller. Was, wenn dieser
geändert wird oder gelöscht, etc? Dann könnte man mit den Datensatz
aus der Historie nichts mehr anfangen, da es keinen Bezug mehr gibt.
Mögliche Lösung: Sämtliche Abhängigkeiten auflösen, was z.T. über
viele Tabellen geschehen müsste (Produkt -> Hersteller -> Adresse,
Produkt -> Lieferant -> Adresse ...)
Dies wäre aber nicht nur sehr komplex, sondern würde auch einen
Overhead und eine Redundanz an Daten bedeuten, die jenseits von gut
und böse sind.
Zudem müssen neue Indizes generiert werden, um die Kopien miteinander
zu verknüpfen.

Daher bin ich diese Möglichkeit sehr kritisch gegenüber.
Hat hier jemand eine bessere Idee?

Vielen Dank!


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Discussion subject changed to "=?ISO-8859-1?Q?Nachvollziehbar e_Änderungen_an_Daten?" by Axel Schwenke
Axel Schwenke  
View profile   Translate to Translated (View Original)
 More options Jan 19, 11:54 am
Newsgroups: de.comp.datenbanken.mysql, de.comp.lang.php.misc
From: Axel Schwenke <axel.schwe...@gmx.de>
Date: Thu, 19 Jan 2012 17:54:19 +0100
Local: Thurs, Jan 19 2012 11:54 am
Subject: Re: =?ISO-8859-1?Q?Nachvollziehbare_Änderung en_an_Daten?

"Sebastian.Goh...@googlemail.com" <sebastian.goh...@googlemail.com> wrote:
> Ich stehe vor folgender Aufgabe:

[permanenter Audit-Trail]

Als MySQLer fällt einem natürlich sofort das Binlog ein, in das MySQL
jede Datenänderung loggt. Allerdings hat das einen Schönheitsfehler:
MySQL loggt nicht, welcher MySQL-Account jeweils verwendet wurde.
Allerdings gibt es ab MySQL 5.5 ein API für Audit-Plugins, das diese
Information abgreifen könnte:

http://dev.mysql.com/doc/refman/5.5/en/audit-plugins.html

Viel schwerer wiegt jedoch, daß (Web-)Applikationen i.d.R. nur /einen/
MySQL-Account verwenden und der Benutzer sich nur gegenüber der
Applikation (und nicht der Datenbank) identifiziert. D.h. normaler-
weise kommen für MySQL alle Änderungen vom gleichen Account.

Was man nun machen könnte:

1. die Applikation führt ein entsprechendes Log selber. Dazu wird
   einfach jedes INSERT/UPDATE/DELETE auf eine der "kritischen"
   Tabellen zusammen mit Uhrzeit und Nutzername geloggt.

2. man verwendet doch das MySQL-Binlog, läßt die Applikation aber
   in jedes entsprechende Statement einen SQL-Kommentar mit dem
   Nutzernamen einfügen. Etwa so:
   UPDATE /* App: foo, Form: bar, User: Müller */ Kunden SET ...

Ob das Ergebnis (eine laaaaange Liste SQL Statements mit Timestamps)
dem Kunden dann lesbar genug ist; und ob es ihm genügt, daß die "bevor"
Werte nur implizit da drin stehen, ist natürlich eine andere Frage.
Aber wenn man das schöner haben will, dann geht es definitiv *nur*
aus der Anwendung heraus.

Allerdings klingt das für mich nach einer typischen "Schlipsträger"
Forderung. Wahrscheinlich wird sich kein Schwein die Daten jemals
ansehen und über die anfallenden Datenmengen oder Anforderungen des
Datenschutzes (Kunde gelöscht - was ist mit den Kundendaten im Audit?)
hat auch niemand auch nur ansatzweise nachgedacht.

XL


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions Older topic »