Hi,
damit meine Abfragen gut performen ist es notwendig dass ich die Standortdaten unverschlüsselt abspeichere. 70% meiner Abfragen sind Standortbasiert, wären diese verschlüsselt ist es notwendig dass mysql jede einzelne Zeile durchgehen muss um diese zunächst zu entschlüsseln.
Da vorgesehen ist dass sehr viele Zeilen die Datenbank füllen soll wäre das eine Katastrophe.
Eine Abfrage (nicht optimiert - kurz und knapp zum Verständnis) sieht in etwa so aus:
Nun hab ich mir überlegt wenn ich die Daten schon unverschlüsselt abspeichern müsste könnte ich zumindest die latitude und longitude kürzen. In etwa:
lat: 52.52835
lng: 13.40547
->
lat: 52.528
lng: 13.405
Dadurch würde eine Kürzung auf 3 ter Nachkommastelle ein Rechteck von ~ 50x80m ergeben. Für die Berechnung kein Problem.
Kürzung auf 2 ter Nachkommastelle ein Rechteck von ~ 400x700m. Worst case würde das eine Differenz von 1km betragen, was der Berechnung Schaden könnte.
Als Mittellösung könnte man die 3 te Nachkommastelle immer mit einer 5 ergänzen um die Berechnung von oben auf 500m worst case zu verringern.
Das Problem... Sollte es ein "Angreifer" auf meine Datenbank schaffen wüsste er nicht nur den ungefähren Standort jeder Nutzer sondern könnte dieser in Ausnahmefällen auch eine Adresse eines Nutzers herausfinden wenn sich im gesamten Rechteck nur ein Haus befindet.
Anstelle des Kürzens könnte man auch einfach für jeden Nutzer für die Abfrage die Stadt Koordinaten abspeichern. Dadurch wäre das obere Problem gelöst, allerdings würden sich bei größeren Städten wie Berlin usw die Genauigkeit der Berechnung um mehrere Kilometer verzerren was die Berechnung komplett sinnlos macht...
Was meint ihr ? Ist es gefährlich die Standortnutzerdaten unverschlüsselt, aber gekürzt abzuspeichern ?
Andere Vorschläge ?
damit meine Abfragen gut performen ist es notwendig dass ich die Standortdaten unverschlüsselt abspeichere. 70% meiner Abfragen sind Standortbasiert, wären diese verschlüsselt ist es notwendig dass mysql jede einzelne Zeile durchgehen muss um diese zunächst zu entschlüsseln.
Da vorgesehen ist dass sehr viele Zeilen die Datenbank füllen soll wäre das eine Katastrophe.
Eine Abfrage (nicht optimiert - kurz und knapp zum Verständnis) sieht in etwa so aus:
Code:
SELECT
...
(
6371 * acos( cos( radians:)lat) ) * cos( radians( AES_DECRYPT(l.lat, :key, l.latnonce) ) ) * cos( radians( AES_DECRYPT(l.lng, :key, l.lngnonce) ) - radians:)lng) ) + sin( radians:)lat) ) * sin(radians(AES_DECRYPT(l.lat, :key, l.latnonce))) )
) AS distance
FROM
...
INNER JOIN
location l
ON l.id = s.id
HAVING
distance <= 50
ORDER BY
...
ASC
LIMIT 2
Nun hab ich mir überlegt wenn ich die Daten schon unverschlüsselt abspeichern müsste könnte ich zumindest die latitude und longitude kürzen. In etwa:
lat: 52.52835
lng: 13.40547
->
lat: 52.528
lng: 13.405
Dadurch würde eine Kürzung auf 3 ter Nachkommastelle ein Rechteck von ~ 50x80m ergeben. Für die Berechnung kein Problem.
Kürzung auf 2 ter Nachkommastelle ein Rechteck von ~ 400x700m. Worst case würde das eine Differenz von 1km betragen, was der Berechnung Schaden könnte.
Als Mittellösung könnte man die 3 te Nachkommastelle immer mit einer 5 ergänzen um die Berechnung von oben auf 500m worst case zu verringern.
Das Problem... Sollte es ein "Angreifer" auf meine Datenbank schaffen wüsste er nicht nur den ungefähren Standort jeder Nutzer sondern könnte dieser in Ausnahmefällen auch eine Adresse eines Nutzers herausfinden wenn sich im gesamten Rechteck nur ein Haus befindet.
Anstelle des Kürzens könnte man auch einfach für jeden Nutzer für die Abfrage die Stadt Koordinaten abspeichern. Dadurch wäre das obere Problem gelöst, allerdings würden sich bei größeren Städten wie Berlin usw die Genauigkeit der Berechnung um mehrere Kilometer verzerren was die Berechnung komplett sinnlos macht...
Was meint ihr ? Ist es gefährlich die Standortnutzerdaten unverschlüsselt, aber gekürzt abzuspeichern ?
Andere Vorschläge ?
Zuletzt bearbeitet: