1

google.cloud.datastoreでデータストアエンティティを細かく作成または変更できますが、ブラウザでCloud Platformプロジェクトにログインしてチェックしますエントリは、そのプロパティのすべてが暗号化されているように見えます(彼らは"Rm9vIEJhcg=="などのように見えます - 私はブラウザからそれを作成すると正常に見ることができます)。データストアエントリを作成すると、ブラウザで表示したときに暗号化されたプロパティが生成される

私は、サービスアカウントのアイデンティティのJSONファイルで認証しています:

self.client = datastore.Client() 
self.client = self.client.from_service_account_json(cert_file.json) 

サービスアカウントがプロジェクト全体の「編集者」の権限を持っています。ログインに使用するgmailアカウントに設定されている「所有者」に変更すると、問題は解決されません。

私はこのようなエンティティを作成します。私はPythonライブラリを修正するエントリは、ブラウザのサイトから読めるようにそれを作るために

with self.datastore.client.transaction(): 
    entity = Entity(Key("key", project="project")) 
    entity["property"] = "data" 
    self.datastore.client.put(entity) 

任意の方法?

答えて

5

値は実際には暗号化されず、むしろBase64でエンコードされます。これは、値がText/Character Stringの代わりにBlob(生のバイト)として格納されるためです。コンソールには、BlobフィールドがBase64形式で表示されます。 Base64でデコードしたときの値Rm9vIEJhcg ==はFoo Barです。

私はPythonで多くの知識を持っていますが、公式 documentationから注意を見てみません

バックエンドにエンティティを保存するとき、「テキスト」(ユニコード である値Python3のstr)は、UTF-8にエンコードされた後、 'text_value' フィールドを使用して保存されます。バックエンドから検索すると、 そのような値は再び "テキスト"にデコードされます。 (Python2のstr、Python3のバイト)の値は、 の 'blob_value'フィールドを使用して、デコード/エンコードのステップなしで保存されます。

使用しているPythonのバージョンによっては、データのデータタイプを調整して問題を解決する必要があります。

+0

ありがとうございます。エンティティを保存する前に、テキスト文字列をユニコードに変換して修正しました。 – leoncvlt

関連する問題