You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多用户使用的Python项目中安全存储MySQL凭证?

解决硬编码数据库凭证的安全方案

结合你的练手银行应用场景,给你几个实用的思路:

1. 重构架构:客户端不直接连接数据库

这是最根本的安全方案,彻底避免客户端接触数据库凭证:

  • 搭建一个中间API服务器(用Flask/Django都可以),所有数据库操作都由这个服务器完成
  • 客户端exe只负责和API服务器交互(比如发送查询、转账请求),API服务器再去连接数据库执行操作
  • 数据库凭证只存在API服务器上,客户端完全碰不到,哪怕exe被反编译也拿不到数据库的权限

示例简化流程:

# 客户端代码(exe里的逻辑)
import requests

def get_user_balance(user_id):
    # 只和API服务器通信
    resp = requests.get("https://你的API服务器地址/api/balance", params={"user_id": user_id})
    return resp.json()

# API服务器代码(运行在你的服务器上)
from flask import Flask, request
import mysql.connector

app = Flask(__name__)

# 数据库凭证只存在这里,客户端看不到
db_config = {
    "host": "192.168.1.182",
    "user": "bank_user",
    "password": "*mypass*",
    "port": 3307,
    "database": "bank"
}

@app.route("/api/balance")
def get_balance():
    user_id = request.args.get("user_id")
    mydb = mysql.connector.connect(**db_config)
    mycursor = mydb.cursor()
    mycursor.execute("SELECT balance FROM users WHERE id = %s", (user_id,))
    result = mycursor.fetchone()
    mydb.close()
    return {"balance": result[0] if result else 0}

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

2. 凭证混淆+反编译防护(适合练手场景,仅防普通用户)

如果一定要让客户端直接连数据库,只能尽量提高凭证获取的门槛:

  • 把凭证拆分成多段,分散在代码的不同位置,运行时再拼接
  • 用Cython把包含凭证和解密逻辑的代码编译成.pyd文件(二进制),再打包成exe,反编译难度比纯Python代码高很多
  • 示例混淆逻辑:
# 分散存储的凭证片段
ip_part1 = "192.168"
ip_part2 = "1.182"
user_part = "bank_"
password_part1 = "*my"
password_part2 = "pass*"

class Server:
    def __init__(self):
        self.ip = ip_part1 + "." + ip_part2
        self.user = user_part + "user"
        self.password = password_part1 + password_part2
        self.port = 3307
        self.database = "bank"
    # 后续连接逻辑不变...

3. 限制数据库账号权限

给客户端用的数据库账号最小化权限:

  • 只授予必要的操作权限,比如SELECT、INSERT(仅限特定表),绝对不授予UPDATE、DELETE、ALTER等危险权限
  • 即使凭证泄露,攻击者也只能做有限的操作,无法修改整个数据库的数据

内容的提问来源于stack exchange,提问作者piotrek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:47:24