【问题标题】:Setting up application privileges in MySQL在 MySQL 中设置应用程序权限
【发布时间】:2010-07-31 17:24:30
【问题描述】:

假设您创建了一个博客应用程序,它的数据存储在 MySQL 数据库中。在您的应用程序配置中,您将数据源名称设置为 myBlog user root password whatever

现在,当用户开始使用您的博客访问、发帖和评论线程等时...我假设他们通过应用程序myblogroot 连接...

所以... 用户连接到应用程序 myBlog 又以用户 root 的身份连接到 MySQL,使用密码 whatever --- 连接到 MySQL 的并不是真正的用户,而是应用程序。对吗?

这种方法没有安全问题吗?我是否应该在 MySQL 中为应用程序 myBlog 创建一个具有特定权限的新用户名,而留下 root 仅用于管理数据库?

【问题讨论】:

    标签: mysql security privileges


    【解决方案1】:

    你完全正确。这称为principle of least privilege。您应该为应用程序提供完成工作所需的最低访问权限。这不会是 root。

    【讨论】:

      【解决方案2】:

      是的,应用程序连接到数据库。您应该为您的应用程序创建一个新的 mysql 用户,执行类似的操作

      CREATE DATABASE myblog_env;
      CREATE USER 'myblogenv-user'@'%' IDENTIFIED BY 'your pw';
      GRANT ALL PRIVILEGES ON myblog_env.* TO 'myblogenv-user'@'%' WITH GRANT OPTION;
      

      类似上面的东西应该可以做到。上面的 'env' 部分是针对如果你想为不同的环境创建一个新的数据库,比如 dev、stage、prod 等等......

      这样,您的应用程序用户可以完全访问其数据库,但在 mysql 实例中没有其他数据库。

      【讨论】:

      • 谢谢!但是,将所有权限授予数百人使用的应用程序不是一个坏主意吗?
      • @Mel,在这种情况下,GRANT ALL 意味着由于ON 子句而赋予所有数据库级权限。
      【解决方案3】:

      首先,你不应该将 mysql 数据库的 root 帐户用于其他任何事情,然后是管理员工作。 其次,理论上是的,您博客的用户将是您的 mysql 数据库中的“根”,但希望在执行任何查询之前,您的博客代码中有很多清理和清理......其他任何事情都是称为“sql注入”

      【讨论】:

        【解决方案4】:

        简短的回答是:是的。

        长答案

        安全性:您的应用程序的用户应该与您自己作为管理员的用户不同。该应用程序用户应该只对它需要访问的特定数据库具有读取(和必要时写入)权限。此外,它不应具有授予特权、删除表特权、数据库创建/删除特权或为您保留的任何其他特权。

        方便:如果您需要更改密码,您不必更改您的应用程序,反之亦然。

        【讨论】:

        • 谢谢。因此,基本上,不应授予此表 (dev.mysql.com/doc/refman/5.1/en/privileges-provided.html) 中任何说“服务器管理”(第三列,底部)的内容?
        • 一般来说,是的。有时人们会选择更严格的特权。例如,应用程序很可能不需要创建或删除表,因此您不会授予这些权限,但它确实需要执行选择或插入操作,因此应该授予这些权限。
        猜你喜欢
        • 2013-01-02
        • 1970-01-01
        • 2013-06-05
        • 2011-11-15
        • 2017-07-12
        • 2011-08-04
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多