GAE 数据存储密钥是如何生成的?

Posted

技术标签:

【中文标题】GAE 数据存储密钥是如何生成的?【英文标题】:How GAE datastore key is generated? 【发布时间】:2011-12-15 16:02:19 【问题描述】:

它是随机值吗?或者,用户可以从这个值中提取一些数据吗?

【问题讨论】:

我不问或不回答问题的 2 个原因:应用程序设计不明智,GAE 安全性不明智。 @topchef,我可以同意第二部分,但不同意第一部分;)-我应该了解是否可以将其用作 url 的一部分-用户是否可以从中提取更多内容或不是。 @LA - 然后我们一起讨论 2d 部分。偶然地,前几天我刚刚与我维护的软件的一个客户进行了交谈,他问为什么我们不在我们的 UI 模型(在 MVC 中)中公开内部密钥,而我们在 URL 中大量使用它。除了我们不这样做之外,我想不出任何正当理由:它们对客户没有意义,我们提供具有业务语义和身份的唯一 ID。而且由于我无法给黑客任何额外的机会,我拒绝仅仅因为我可以暴露这些密钥。 【参考方案1】:

数据存储键由种类、字符串名称或整数 id 和可选的父实体路径 (docs) 组成。除 id 外,所有这些都是用户指定的,所以我认为这就是您要问的。

id 是根据从 0 开始的简单整数计数器分配的。目前,在给定的应用程序中,所有根实体共享一个计数器,而非根实体在其实体组内共享一个计数器。从长远来看,来自给定计数器的 id 会增加,但数据存储服务器会批量保留 id,因此您会经常看到 id 在短期内增加和减少。

更多详情:http://groups.google.com/group/google-appengine/browse_thread/thread/dec83c2dbd9542e4#f495648c988d758c

(至于安全问题,应用引擎的安全性不依赖于保持这个 id 分配机制的秘密。您可能想了解为什么通过默默无闻的安全性通常被认为是一件坏事。:P)

【讨论】:

以上是关于GAE 数据存储密钥是如何生成的?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 GAE 数据存储中导出 BLOB 类型字段?

如何通过键从 GAE 数据存储中删除多个实体

如何在 Datastore GAE Python 中定义键名?

GWT 应用程序的数据存储位置 - GAE 数据存储或 XML 文件

什么对 GAE 数据存储配额有影响?

GAE 数据存储性能(列与 ListProperty)