如何在python中保护mysqldb连接?

时间:2014-07-29 11:23:43

标签: python mysql pygtk mysql-python

我正在创建一个需要来自远程数据库的mysql连接的pygtk应用程序。

db = MySQLdb.connect("remotehost","username","password","databse", charset='utf8')

应用程序即将完成并即将发布。但问题是,如果有人反编译这个脚本,他们可以轻松阅读上述凭据,然后就会出现安全问题。那么我如何才能保护这段代码,或者有什么方法可以强烈编译这个文件呢?

5 个答案:

答案 0 :(得分:3)

数据库连接通常由受信任网络内的可信计算机构成,原因有多种:

  • 正如您所见,客户端需要将访问凭据存储到数据库中。
  • 大多数情况下,此类连接是在没有传输安全性(未加密)的情况下进行的,因此任何窃听者都可以观察并破坏请求/响应。
  • 数据库路径的延迟通常是一个问题,因此您希望将其最小化,从而将客户端放在数据库附近

违反这种惯例意味着您必须处理这些问题。

使用其他协议(例如,HTTP / REST)来提供中间服务来公开间接修改数据库的API是很常见的。您将服务保留在trusted computing base中的主机上,并且只有该主机访问该数据库。 在此体系结构中,您可以(并且应该)在中间服务中执行身份验证和mandatory access control。反过来,为访问该服务的每个客户端提供不同的凭据将有助于保证安全。


如果此时您无法重写您的应用,则应遵循patriciasz对keeping the least priviledge possible的建议。您可能还对techniques to make it harder (but not impossible) to obtain the credentials

感兴趣

答案 1 :(得分:2)

无法保护您的代码(已编译或未编译)与其运行的计算机的所有者。

在这种情况下,他将有效地使用您的应用程序的SQL用户具有相同的访问限制。

答案 2 :(得分:1)

没有好方法可以保护您的代码,但您可以在使用read_default_file时使用connect选项。然后将从文件中读取连接参数,使用 read_default_file。 注意:这绝不保护您的用户名,密码,因为任何有权访问cnf文件的人都可以获取信息。

答案 3 :(得分:0)

在数据库和应用程序之间构建一个接口。只有接口才能获得真正的数据库访问。

提供应用凭据以访问接口,仅访问接口,然后让接口与数据库进行交互。这增加了第二层以提高安全性并有助于保护数据库完整性。

将来从一开始就采用独立的逻辑开发。该应用程序不需要访问数据库。相反,它需要来自数据库的数据。

另外,作为数据库安全规则,请避免在客户端放置凭据。如果您有 n 应用程序,那么 n 应用程序可以访问您的数据库,控制访问点是数据库逻辑的重要组成部分。

答案 4 :(得分:0)

分离程序逻辑是真正的交易,凭证不需要驻留在客户端机器上就像芯片所说