Google App Engine Datastore与外部数据库的最佳选择?

3 投票
2 回答
2165 浏览
提问于 2025-04-15 21:24

我需要让一个App Engine的应用程序能够和一个外部数据库进行交流和共享数据。

我想到的最好办法是把外部数据库的数据输出到一个xml文件,然后在我的App Engine应用里处理这个文件,并把数据存储到数据存储区。

不过,分享的数据是一些敏感信息,比如登录详情,所以把这些信息输出到xml文件并不是个好主意。请问App Engine的应用能直接查询数据库吗?或者有没有安全的方法可以使用xml文件呢?

哦,对了,我使用的是python/django,而外部数据库会托管在另一个域名上。

2 个回答

3

你可以考虑在你数据库所在的外部域名上提供一组网络服务,然后使用App Engine的URL Fetch API来通过HTTPS与这个外部域名进行沟通。

6

Google Apps的安全数据连接器(SDC)就是为了处理这种任务而设计的——实际上,即使“其他数据库”在防火墙后面(这在企业数据中很常见),它也能正常工作,并且可以与其他Google应用(如文档、电子表格等)以及App Engine一起使用。

根据文档的总结,整个流程如下:

  1. Google Apps会将来自Google Apps域内用户的授权数据请求转发到Google隧道协议服务器。

  2. 隧道服务器会验证用户是否有权请求指定的资源。Google隧道服务器通过加密隧道与SDC连接,SDC则运行在公司的内部网络中。

  3. 隧道协议允许SDC连接到Google隧道服务器,进行身份验证,并加密在互联网上传输的数据。

  4. SDC使用资源规则来验证用户是否有权请求指定的资源。

  5. 可以使用可选的内部网络防火墙来提供额外的网络安全。

  6. SDC会向指定的资源或服务发起网络请求。

  7. 服务会验证签名请求,检查凭证,如果用户被授权,就会返回数据。

如果你不需要担心防火墙,也没有任何安全顾虑,你可以简化流程(正如Daniel的回答所建议的),直接使用urlfetch(不需要隧道、验证、加密、过滤等)——但你提到“共享的数据是敏感数据,比如登录信息”,这表明情况并非如此。

这并不是XML与其他格式的问题——问题在于敏感数据不应该在不受保护的通道上“明文”传输,也不应该随便让所有人都能访问。通常情况下,让专门的基础设施来处理加密、过滤和授权问题(就像SDC所做的那样)会更好,而不是在自己的应用或专门的中间件中编写所有这些代码(并确保它们完全安全和锁定)。对于这些目的,SDC可以非常有帮助,即使你只需要它的一小部分功能。

撰写回答