如何在 python 项目中存储 MySQL 凭据,以便以后不仅来自我的电脑的用户也能使用它?

问题描述 投票:0回答:1

我有以下代码:

class Server:
    def __init__(self):
        #server credentials
        self.ip = "192.168.1.182"
        self.user = "bank_user"
        self.password = "*mypass*"
        self.port = 3307
        self.database = "bank"
    def connect_to_server(self):
        try:
            self.mydb = mysql.connector.connect(
                host = self.ip,
                user = self.user,
                password = self.password,
                port = self.port,
                database = self.database
                )
            self.mycursor = self.mydb.cursor()
            print("✓ Server connection estabilished")
            rlist = [True]

问题是,我不想将其存储在我的代码中,因为我觉得它不安全 我正在创建一个银行应用程序(只是为了好玩),因此稍后用户不仅可以从我的电脑上将其用作 .py->.exe。我不应该存储在配置文件或纯文本文件中,因为如果有人获得凭据,他基本上可以登录 MySQL 数据库并修改所有数据。 所以不:

  • 环境变量
  • 纯文本/配置文件
  • 它应该可以在任何电脑上运行(我正在使用 pytoexe 将我的 python 文件转换为 exe,以便每个人都可以运行该应用程序) 我是 stackoverflow 的新手,所以如果我写错了,请原谅我

我想过创建密码加密,但是任何获得解密密钥的人都可以解密密码。我也考虑过创建自己的加密方法,但是任何访问我的代码的人都可以使用解密函数并执行它,例如:decryptor(“encryptedpassword”)

python mysql security credentials
1个回答
0
投票

是的,任何获得您代码的人都可以提取 MySQL 密码并使用任何其他客户端进行连接。他们可以根据您授予该 MySQL 用户的权限执行任何 SQL 查询。

即使您使用 pytoexe 进行编译,技术人员也可以使用调试器或简单地使用

strings
工具来提取密码。

如果你加密,他们就可以解密。如果您尝试发明自己的加密算法,请假设他们可以更轻松地解密它。我认为你不是一个有成就的博士。在应用密码学中,因此您想到的任何新颖的加密方法肯定会比最先进的加密工具更容易破解。 解决这个问题有两种常用的方法:

    给他们MySQL密码,但限制他们可以执行的SQL。权限本身只能给您有限的控制权,因此您需要在 MySQL 数据库中创建一层存储例程和视图。他们应该能够访问存储的例程和视图,但用户无法访问基础表。例程和视图有特权做到这一点。因此,用户只能执行您允许他们在这些例程和视图中执行的操作。
  1. 不要给他们 MySQL 密码。您给他们的应用程序没有 MySQL 连接。该应用程序向您开发的 Web 服务发出 HTTP 请求。 Web 服务中的代码实现了它们可以执行的特定 SQL。您可以在此处强制执行有关他们可以访问的内容的业务规则。
© www.soinside.com 2019 - 2024. All rights reserved.