【问题标题】:safe way to add admin mysql users via php通过 php 添加管理员 mysql 用户的安全方法
【发布时间】:2012-02-13 03:15:55
【问题描述】:

我正在构建一个在 mysql 中添加和删除用户的 php 系统。它目前是这样设置的: - 用户尝试登录网站 - 在 projectdb.users 中查找用户名和哈希(sha256,盐,密码)(这也是一个 mysql 用户凭据) - 找到它,然后在登录时使用该用户名和密码执行任何 mysql_connect

因此,当我在系统中添加用户时,我会将他们的凭据添加到表中,并将它们添加为仅对 projectdb 数据库具有最小权限的 mysql 用户。

但是当我添加一个管理员帐户时,我将授予他们对该数据库的完全权限,并授予他们 mysql 授予/添加用户权限,以便他们可以添加更多用户。这似乎太强大了,即使这些用户不能直接连接和登录 mysql(但如果可以的话,他们可以添加任何人)。

在 php 文件中硬编码单个用户和管理员权限而不是实际将 mysql 用户添加到系统中更好吗?还有比这两个想法更安全的方法吗?

【问题讨论】:

  • 如果这是一个网络应用程序,你为什么要将它们添加到 MySQL 用户?这是用来记录的吗?如果没有真正令人信服的理由,我不会认为以编程方式添加用户是一种好的做法。
  • 您知道每个用户都可以共享一个 mysql 用户组凭据吗?
  • 数据库连接凭据通常与应用程序代码一起存储,将应用程序用户与单个数据库帐户相关联是非常不寻常的(对于 Web 应用程序)。
  • @AlexC,这应该作为答案发布。这是正确的。
  • @davidethell 我把你的建议铭记在心。谢谢。

标签: php mysql security authentication


【解决方案1】:

如果用户不直接访问数据库,您不必直接授予他们授予/添加用户权限。

大多数 CMS 实现了一个权限表,允许 PHP 代码检查用户是否具有执行特定操作的适当权限。因此,您的 PHP 代码可以简单地检查登录用户是否具有权限表设置的权限,然后让一个实际的管理员用户(即 root)自己创建用户。它更加迂回,但通过在该权限结构上创建一个额外的层来提供更细粒度的控制。

【讨论】:

  • 是的,这就是我一直在想的,但是获取管理员 mysql 用户权限的最安全方法是什么?我只是把它们放在php文件中吗?我知道 php 代码都是在服务器端处理的,但是如果有人设法保存 php 文件,他们会看到用户名和密码。
  • 刚刚环顾四周,发现我上面评论的一些很好的答案,我想我会使用 .htaccess 文件方法来保护密码。谢谢大家。 how-to-secure-database-passwords-in-php
【解决方案2】:

根据 David 的建议...如果这是一个 Web 应用程序,您为什么要将它们添加到 MySQL 用户?这是用来记录的吗?如果没有真正令人信服的理由,我看不到以编程方式添加用户是一种好的做法。这通常是有目的的抽象化,以尽量减少风险。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多