Django作为mysql代理服务器

Django as a mysql proxy server?

本文关键字:代理服务器 mysql 作为 Django      更新时间:2023-10-16

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

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

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

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

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

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

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

最后,这是一个合理的担忧吗?该数据库目前没有任何关于用户的非常敏感的信息(最敏感的是他们的电子邮件和网站密码,他们可能从另一个来源重复使用了这些信息),但如果不安全,将来可能会出现这种情况,这是我担心的原因。

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

Django是一个很好的工具,可以用来实现这一点。Django甚至有几个包可以帮助快速开发,Django REST框架、Tastiepy和Django-活塞是最受欢迎的。当然,你可以使用普通的Django。

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

通过处理所有SQL查询,这可能会超过我的主机的限制

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

此外,我还必须找到一些序列化和在Python中传输SQL结果,然后在客户端上的C/C++

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

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

我不认为有任何负面影响,这是一种行之有效的方法。它已经被证明了十年,世界上最受欢迎的网站通过restful api 来展示自己

这听起来合理吗?如果合理,任何可以缓解的措施致力于此;例如Python或C库,以帮助开发代理界面

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