gpt4 book ai didi

python - 在 Python 中开发时保护 MySQL 密码?

转载 作者:IT老高 更新时间:2023-10-29 00:16:16 25 4
gpt4 key购买 nike

我正在编写一个 Python 脚本,它使用本地托管的 MySQL 数据库。该程序将作为源代码交付。因此,MySQL 密码将是肉眼可见的。有什么好的方法来保护它吗?

这个想法是为了防止一些顽皮的人查看源代码,直接访问MySQL,并做一些......好吧,顽皮。

最佳答案

简答

你不能。

如果密码存储在交付给最终用户的工件中,您必须认为它已泄露!即使工件是编译后的二进制文件,也总是有(或多或少复杂)的方法来获取密码。

保护资源的唯一方法是仅向最终用户公开有限的 API。要么构建一个程序化的 API(REST、WS+SOAP、RMI、JavaEE+Servlets,...),要么只通过 SPROCs 在你的数据库中公开某些功能(见下文)。

先说一些...

这里的问题不应该是如何隐藏密码,而是如何保护数据库。请记住,仅密码通常是一种非常弱的保护,不应被视为保护数据库的唯一机制。你在使用 SSL 吗?不?那么,即使您设法将密码隐藏在应用程序代码中,仍然很容易在网络上嗅探它!

您有多种选择。都具有不同程度的安全性:

“应用角色”

为应用程序创建一个数据库用户。为此角色申请授权。一个非常常见的设置是只允许 CRUD 操作。

优点

  • 非常容易设置
  • 防止 DROP查询(例如在 SQL 注入(inject)中?)

  • 缺点
  • 每个看到密码的人都可以访问数据库中的所有数据。即使该数据通常隐藏在应用程序中。
  • 如果密码被泄露,用户可以运行 UPDATEDELETE没有条件的查询(即:一次删除/更新整个表)。

  • 原子认证&认证

    为每个应用程序/最终用户创建一个数据库用户。这允许您甚至在每列的基础上定义原子访问权限。例如:用户 X 只能从表 foo 中选择列 far 和 baz。没有别的。但是用户Y可以 SELECT一切,但没有更新,而用户 Z 拥有完整的 CRUD(选择、插入、更新、删除)访问权限。

    某些数据库允许您重复使用操作系统级别的凭据。这使得对用户的身份验证是透明的(只需要登录到工作站,然后将该身份转发到数据库)。这在完整的 MS 堆栈(OS=Windows、Auth=ActiveDirectory、DB=MSSQL)中最简单,但 - 据我所知 - 也可以在其他数据库中实现。

    优点
  • 相当容易设置。
  • 非常原子的授权方案

  • 缺点
  • 在 DB 中设置所有访问权限可能很乏味。
  • 用户 UPDATEDELETE权限仍然可以在没有条件的情况下意外(或故意?)删除/更新。您可能会丢失表中的所有数据。

  • 具有原子身份验证和身份验证的存储过程

    不要在您的应用程序中编写 SQL 查询。通过 SPROC 运行一切。然后为每个用户创建 db-accounts 并仅将权限分配给 SPROC。

    优点
  • 最有效的保护机制。
  • SPROC 可以强制用户将条件传递给每个查询(包括 DELETEUPDATE)

  • 缺点
  • 不确定这是否适用于 MySQL(我在该领域的知识很不稳定)。
  • 复杂的开发周期:你想做的每一件事,都必须首先在一个 SPROC 中定义。

  • 最后的想法

    您永远不应允许应用程序执行数据库管理任务。大多数时候,应用程序唯一需要的操作是 SELECT , INSERT , DELETEUPDATE .如果您遵循此准则,则用户发现密码几乎不会涉及风险。除了上面提到的几点。

    无论如何,请保留备份。我假设您想针对意外删除或更新来投影您的数据库。但是事故发生了......记住这一点;)

    关于python - 在 Python 中开发时保护 MySQL 密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6981064/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com