关于mysql:如何保护python中的mysqldb连接?

How to protect mysqldb connection in python?

我正在创建一个Pygtk应用程序,需要远程数据库的MySQL连接。

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

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


数据库连接通常由受信任网络内的受信任计算机进行,原因有很多:

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

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

使用其他协议(例如http/rest)公开间接修改数据库的API是非常常见的。您将服务保存在受信任的计算基础上的主机上,并且只有一个主机访问数据库。在此体系结构中,您可以(并且应该)在中介服务中执行身份验证和强制访问控制。反过来,为每个访问该服务的客户机提供不同的凭据将有助于确保安全。

如果此时无法重写应用程序,则应遵循Patriciasz关于尽可能保持最小权限的建议。您也可能对使获取证书更困难(但并非不可能)的技术感兴趣。


无法保护您的代码(编译或不编译)不受运行它的计算机的所有者的保护。

在这种情况下,他实际上具有与应用程序的SQL用户相同的访问限制。


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


分离程序逻辑是真正的交易,凭证不需要像Chip所说的那样驻留在客户机上。


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

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

在未来的发展中,从一开始就有独立的逻辑。应用程序不需要访问数据库。相反,它需要来自数据库的数据。

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