Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Anonymisieren eines Feldes

Begonnen von Carl, Oktober 11, 2017, 11:17:14

⏪ vorheriges - nächstes ⏩

Carl

Ich habe eine db mit der Tabelle tblProbanden und dem Endlosformular frmProbanden. Der Inhalt des Feldes [Probandenname] (String) soll mit klick auf den Button [Befehl200] durch eine 20stellige Zufallsfolge von Zeichen ersetzt werden. (Alle Buchstaben und alle Ziffern) Doppelte Werte sollen nicht zugelassen werden.

Hintergrund ist, dass die Probanden-Namen nach einer bestimmen Zeit anonymisiert werden sollen, ohne dass die Messergebnisse verloren gehen.

Welches Design und welche Befehle für Befehl200 würdet Ihr mir für diesen Zweck empfehlen?

Carl

Wurliwurm

Zitat von: Carl am Oktober 11, 2017, 11:17:14
Welches Design und welche Befehle für Befehl200 würdet Ihr mir für diesen Zweck empfehlen?

Diese zufällige Folge von Zeichen beinhaltet semantisch keine Information, deshalb kann man sie sich gleich sparen. Deshalb wäre der Wert NULL angemessen, unter der Voraussetzung, daß der Probandenname nicht Schlüsselfeld oder Teil des Schlüsselfelds ist.


MzKlMu

Hallo,
ich halte das Vorhaben auch für überflüssig. Da jeder Datensatz einen Primärschlüssel haben sollte, genügt es das Feld mit dem Namen einfach zu leeren (NULL, wie gesagt).
Da die Beziehungen über den Primärschlüssel laufen (sollten) gehen keine Messergebnisse verloren.
Gruß Klaus

Lachtaube

Carl, wenn Du ernsthaft mit Access arbeiten willst, solltest Du Steuerelementnamen wie Befehl200 nicht zulassen - taufe das Steuerelement ordentlich, z. Bsp. in ctlAnonymisiereProband (ohne weitere Typisierung, was ich mittlerweile bevorzuge) oder in cmdAnonymisiereProband oder btnAnonymisiereProband o.ä. und verwende dann durchgängig gleiche Präfixe für gleiche Steuerelementtypen.

Zum Problem: sollte man sich einer Hashfunktion bedienen, die eindeutige Werte liefert. Das Ergebnis stellt je nach verwendetem Algorithmus ein unterschiedlich langer Zahlenwert dar, der i.d.R. nicht zum Ausgangswert zurückzuführen ist.

Diese Zahl kann man dann auch in Zeichfolgen weiter codieren - siehe z. Bsp. Base64 oder Base32 - eine Hexadezimaldarstellung tuts aber auch, wobei bei letzterer alle Namen gleich lang wären.

Wenn Du Dich für eine Methode entscheiden solltest, kann ich gerne Links auf entsprechenden Code posten.
Grüße von der (⌒▽⌒)

Carl

Das mit den Benennungen werde ich berücksichtigen.

Die Idee mit dem Leeren des Feldes hatte ich deshalb verworfen, weil ich in den Formularen aus Platzgründen das Feld ID nicht anzeige. Und optisch sieht es komisch aus, wenn Namen-Felder leer sind. Ganz zu schweigen beim Datenexport mehrerer Tabellen in eine SPSS-Datei beispielsweise, wo dann die ID's mehrfach vorkommen. Da soll zur Identifikation des Datensatzes dann das Namensfeld dienen.

Hashen wollte ich vermeiden, weil es beispielsweise viele Leute mit dem Namen Müller gibt. Dann müsste ich erst ein Zusatzfeld mit [ID]+[PbnName], um das dann zu hashen.

Private Sub PbnNameAnonymisieren_Click()
Welcher Code muss hier stehen, damit die Schaltfläche in das Feld [PbnName] eine 12stellige Zufallskombination einträgt, die Buchstaben und Ziffern enthalten darf?
End Sub

Carl

Beaker s.a.

#5
Hallo Carl,
Vielleicht so (Luftcode)
Public Function ZufallsString() As String
Const strValidChars "StringMitGültigenZeichen"
Dim L As Integer
Dim z As Integer
Dim strResult As String

L = Len(strValidChars)
For z = 1 To 12
      Randomize
      strResult = strResult & Mid$(strValidChars, L*Rnd(L)+1, 1)
Next z

ZufallsString = strResult

End Function

Natürlich musst du hier oder beim Aufruf noch eine Prüfung bezügl. Eindeutigkeit einfügen.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

Hallo,
ZitatUnd optisch sieht es komisch aus, wenn Namen-Felder leer sind. Ganz zu schweigen beim Datenexport mehrerer Tabellen in eine SPSS-Datei beispielsweise, wo dann die ID's mehrfach vorkommen. Da soll zur Identifikation des Datensatzes dann das Namensfeld dienen.
Da machst Du einen Denkfehler. Die ID darf ja auch nicht mehrfach vorkommen. Und wenn Du mehrfache IDs hast so hast Du eine Abfrage mit mehreren Tabellen. Dann nutzt Dir das verfälschen auch nichts, dann bei mehreren Müllern hast Du ja auch wieder das Problem der Eindeutigkeit. Das Feld taugt dann dazu auch nicht.

Ich würde das Feld leeren und über eine Abfrage in diesem Feld die ID eintragen. Dann ist es nicht leer.
Da sich an der eigentlichen ID nichts ändert, bleiben alle Zuordnungen erhalten. Da das Namensfeld geleert wurde ist die Anonymität 100% gesichert.
Völlig problemlos.
Gruß Klaus

Carl

Hm ... okay.

Wieso über eine Abfrage? ich dachte an einen Button im Formular, der auf klick den Fildinhalt verändert. Hast Du da einen code im Kopf?

Beaker s.a.

Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

Hallo,
wenn es nur wenige Datensätze sind kannst Du das natürlich mit einem Button machen. Code siehe obigen Beitrag von ekkehard.
Wenn Du mehrere Datensätze ändern willst, dann eine Aktualisierungsabfrage.
Gruß Klaus