2009-07-09 5 views
2

Ist es sicher, Entitäts-IDs von Daten in Google Datastore verfügbar zu machen? Zum Beispiel in meinem Code ich habe Entität mit dieser ID:Aussetzen von Entitäts-IDs von Google Datastore-Daten

@PrimaryKey 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true") 
private String id; 

Die ID diesem ähnlich sein wird: agptZeERtzaWYvSQadLEgZDdRsUYRs

Jeder kann extrahieren Passwort, Anwendungs-URL und andere Informationen aus diesem Schnur? Was bedeutet diese Zeichenfolge?

+0

Interessieren Sie sich für die gleiche Frage, aber in Python? – dfrankow

Antwort

2

Diese Entitäts-ID enthält die Objekt-ID, die Anwendungs-ID und den Objektklassennamen. Es ist nur eine codierte Zeichenfolge. Nicht wirklich irgendeine Art von Sicherheitsrisiko.

1

Sie die KeyFactory verwenden können, um keytoString zu konvertieren, stringToKey wie folgt URL Google App Engine:

die ID, dass ich glaube, dass es eine eindeutige ID für die Datenspeicherung in Google App Engine war.

Key-Instanzen können die KeyFactory Methoden keyToString() und stringToKey() unter Verwendung von und aus der codierten String-Darstellung umgewandelt werden.

Wenn codierten Schlüsselfolgen verwenden, können Sie können den Zugriff auf ein mit einem zusätzliche Felder Zeichenfolge oder numerische ID des Objekts liefern.

Ich hoffe, es hilft.

Tiger.

+0

Hinweis für andere: in Python: str (entity.key()). Siehe http://code.google.com/appengine/docs/python/datastore/keyclass.html#Key – dfrankow

0

Wenn Sie zu localhost: 4321/_ah/admin navigieren, können Sie den sdk datastore viewer nutzen, wo Sie sehen, dass jede Art von Entity ein KEY-Feld und ein NAME/ID-Feld hat;

Unabhängig davon, ob Sie long, String oder Key als @PrimaryKey verwenden, gibt es eine ID/Name-Spalte mit einer Zeichenfolge/Nummer und eine KEY-Spalte mit dem codierten Schlüssel für diese ID. Wie in anderen Posts erwähnt, enthält diese Kodierung {md5s, höchstwahrscheinlich} die Appspot-Anwendungs-ID, den vollständig qualifizierten Klassennamen des Datenobjekts und was immer Sie als @PrimaryKey angeben.

Die einzige Zeit, die Sie jemals direkten Zugriff auf dieses Feld wünschen, ist, wenn Sie absolut nicht interessiert, was die Daten benannt sind, {wenn Sie Ihr Programm benötigen, um zu finden, aber Menschen werden nicht danach suchen Wörter in ein Textfeld eingeben} oder wenn Sie mehrere Objekte des gleichen Typs und Namens haben möchten {vielleicht mit einer Version int?}, dann sollten Sie die Syntax des codierten Schlüssels verwenden. Sowohl KEY als auch ID sind in der db vorhanden, unabhängig davon, ob Sie ein Feld in Ihre Klasse einfügen. Mit der codierten Schlüsselsyntax können Sie nur auf diesen Wert zugreifen.

Außerdem gibt es einen verfügbaren Geschwindigkeitsbonus für Anwendungen, die codierte Schlüssel verwenden ... Es gibt nur zwei Arten von Abfragen: SELECT * und SELECT _ _ key _ _ {Leerzeichen zum Anzeigen von zwei _}. Für große Datenmengen in AJAX-Anwendungen besteht die einzige effiziente Möglichkeit zum Paginieren von Daten darin, alle Schlüssel auszuwählen, sie an den Client zu senden und den Client nach 0-> X Anzahl der Datensätze fragen zu lassen, Links für die anderen X-> zu erstellen Y Ergebnisse, und fragen Sie den Server mit dem ersten Satz von codierten Schlüsseln für vollständige Daten, analysieren Sie die Antwort in nette kleine Listen und vermeiden Sie das Laden von 397 Server-Datenobjekten, die nicht sofort nützlich sind.

Das Senden von codierten Schlüsseln über den Draht kann etwas mehr Bandbreite erfordern als uncodierte Schlüssel (es sei denn, Sie sind so lange damit beschäftigt, Dinge zu benennen, wie ich bin!}; aber es rasiert diese CPU-Zyklen auf appengine, macht deine Quoten glücklicher, und die App von jedem läuft nur einen Bruchteil schneller!

Dieser Schlüssel wird, selbst wenn er nicht aufgetrennt wird, nur so sensible Daten offenlegen, wie Sie einen Primärschlüssel erstellen. Ihr App-Passwort ist nicht betroffen, ebenso wenig wie Benutzerpasswörter in einem vernünftigen Datenmodell. Das einzige, was möglicherweise {BIG} austreten könnte, ist eine Benutzer-E-Mail-Adresse, wenn Sie die angegebene Benutzerklasse für die Authentifizierung verwenden, oder die Klassennamen, die Sie in Ihrer Quelle verwenden.

... Grundsätzlich können nur Informationen verfügbar sein, die bereits bei der Anzeige einer oder mehrerer Firebug-Anfragen verfügbar sind.

Verwandte Themen