3

我正在构建一个由 MySQL 服务器支持的 Django 支持的站点。这个 MySQL 服务器将从网站以外的其他来源访问,以读取和写入表数据;例如用户在本地运行的连接到数据库的程序。

目前本地运行的程序是使用 MySQL/C Connector 库直接连接到 sql server 并执行查询。在最终向公众发布的版本中,这似乎是不安全的,因为我会在代码或配置文件中将连接字符串暴露给数据库。

我正在考虑的一种替代方法是将所有查询发送到 Django 网站(使用用户的登录名和密码进行身份验证),然后该站点将代表用户清理和执行查询并将结果返回给他们。

这有很多我能想到的缺点。通过处理所有 SQL 查询,网络服务器将承受更大的负载,这可能会超出我主机的限制。此外,我必须想办法在 Python 中序列化和传输 sql 结果,然后在客户端用 C/C++ 反序列化它们。这将是需要编写和维护的大量自定义代码。

人们能想到这种方法的任何其他缺点吗?

这听起来合理吗?如果合理,任何可以减轻工作的事情;例如 Python 或 C 库来帮助开发代理接口?

如果这听起来是个坏主意,对替代解决方案的任何建议,即专门研究这种类型的代理 sql 服务器逻辑的 Python 库,一种加密 sql 连接字符串的方法,以便我可以安全地使用我当前的解决方案,等等......?

最后,这是一个有效的担忧吗?该数据库目前不包含任何关于用户的非常敏感的信息(最敏感的是他们的电子邮件和他们可能从其他来源重复使用的网站密码),但如果它不安全,将来可能会引起我的担忧。

4

1 回答 1

1

这是一个完全有效的问题,也是一个非常普遍的问题。您已经描述了创建 RESTful API。我想它可以被认为是数据库的代理,但通常不被称为代理。

Django 是一个很好的工具,用于完成此任务。Django 甚至有几个包可以帮助快速开发,Django REST Framework、Tastiepy 和 django-piston 是最受欢迎的。当然,您可以只使用普通的旧 Django。

您的 Django 项目将是唯一与数据库交互的东西,并且客户端可以向 Django 发送经过身份验证的请求;所以客户端永远不会直接连接到您的数据库。这将为您在每个客户端、每个资源的基础上提供细粒度的权限控制。

通过处理所有 SQL 查询,网络服务器将承受更大的负载,这可能会超出我主机的限制

我相信扩展 Web 服务比扩展从客户端到数据库的直接连接要容易得多。有许多经过验证的方法可用于扩展每秒对数据库有数百个请求的应用程序。因为您和网络服务器之间有 Django,所以您可以为频繁请求的资源实现缓存。

此外,我必须想办法在 Python 中序列化和传输 SQL 结果,然后在客户端用 C/C++ 反序列化它们

这应该是一个有争议的问题。有许多非常流行的数据交换格式。我从未使用过 C/C++,但快速搜索我看到了几个 c/c++ json 序列化程序。python 有免费内置的 JSON,如果你使用预制的 C/C++ JSON 库,不应该有任何自定义代码需要维护。

人们能想到这种方法的任何其他缺点吗?

我认为没有任何缺点,这是一种久经考验的真实方法。它已经被证明了十年,世界上最受欢迎的网站通过 restful api 暴露自己

这听起来合理吗?如果合理,任何可以减轻工作的事情;例如 Python 或 C 库来帮助开发代理接口?

听起来很合理,我在答案开头提到的 Django 应用程序应该提供一些样板,让您更快地开始使用您的 API。

于 2013-02-20T23:43:56.530 回答