2009-07-09 3 views
2

Google DatastoreにあるデータのエンティティIDを公開するかどうかを保存しますか? は、例えば、私のコードでは、私はこのIDを持つエンティティを持っている:Google DatastoreデータのエンティティIDを公開する

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

は、IDは次のようになるだろう:agptZeERtzaWYvSQadLEgZDdRsUYRs

は、誰もがこのことから、パスワード、アプリケーションのURLやその他の情報を抽出することができます文字列?その文字列の意味は何ですか?

+0

同じ質問にリンクするのに気をつけますが、Pythonでは気にしませんか? – dfrankow

答えて

2

そのエンティティIDには、オブジェクトID、アプライメントID、およびオブジェクトクラス名が含まれています。それは単なるエンコードされた文字列です。セキュリティ上のリスクはありません。

1

あなたはURL Google App Engine次のようにkeytoString、stringToKeyに変換するKeyFactoryを使用することができます。

が、私はそれがGoogle App Engineのデータ記憶のためのユニークなIDだったと信じているIDを。

キーのインスタンスがするKeyFactory方法を keyToString()とstringToKey()を使用してエンコードされた文字列表現 からとに変換することができます。

エンコードされたキー文字列を使用する場合、 は、オブジェクトの 文字列または数値IDに の追加フィールドを使用してアクセスできます。

私はそれが役に立ちそうです。

Tiger。

+0

その他の注意:Pythonで:str(entity.key())。 http://code.google.com/appengine/docs/python/datastore/keyclass.html#Keyをご覧ください。 – dfrankow

0

localhost:4321/_ah/adminに移動すると、すべての種類のエンティティにKEYフィールドとNAME/IDフィールドがあることがわかるsdkデータストアビューアを利用できます。

@PrimaryKeyとしてlong、StringまたはKeyを使用する場合、そのIDのエンコードされたキーを持つString/numberとKEY列を持つID/Name列があります。他の記事で述べたように、このエンコーディングは、{md5s、おそらく} appspotアプリケーションID、データオブジェクトの完全修飾クラス名、@PrimaryKeyとして指定したものをハッシュします。

このフィールドに直接アクセスする唯一の時間は、データの名前が何であるか気にしない場合です。{あなたのプログラムでそれを見つける必要があるが、人間はあなたが同じタイプと名前(多分バージョンintを使用していますか?)を持つ複数のオブジェクトを持っていたいなら、エンコードされたキー構文を使うべきです。あなたのクラスにフィールドを置くかどうかにかかわらず、KEYとIDの両方がデータベースに存在します。エンコードされたキー構文を使用すると、この値にアクセスできます。

また、エンコードされたキーを使用するアプリケーションにはスピードボーナスがあります。SELECT *とSELECT _ _ _ _ _ {2つの_があることを示すために使用されるスペース}の2種類しかありません。 AJAXアプリケーションの大きなデータセットの場合、データをページ設定する唯一の効率的な方法は、すべてのキーを選択してクライアントに送信し、クライアントに0 - > X個のレコードを要求させ、他のX-> Yの結果を取得し、完全なデータの場合はエンコードされたキーの最初のセットでサーバーに照会し、小さなリストに応答を解析し、直ちに有用でないサーバーデータオブジェクトを読み込まないようにします。

コード化されたキーをワイヤーで上下に送信すると、エンコードされていないキーよりも少し帯域幅が大きくなる可能性があります。 appengineでこれらのCPUサイクルを削って、クォータをより幸せにしてくれます。また、みんなのアプリはちょっとだけ速く走っています!

このキーは、何らかの形でハッシュされていなくても、プライマリキーを作成するものと同じように機密情報として公開されます。あなたはアプリのパスワードが関与していないし、まったくまれなデータモデルのユーザーパスワードもありません。あなたが提供するUserクラスを認証に使用する場合、またはあなたのソースで使用するクラス名を使用する場合、{BIGが漏れるかもしれない}唯一のことは、ユーザーの電子メールアドレスです。

...基本的には、すでに1つまたは2つのファイルを見るのに利用できる情報だけが公開される可能性があります。

関連する問題