在MySQL中设置应用程序权限

时间:2010-07-31 17:24:31

标签: mysql security privileges

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

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

所以...用户连接到应用程序myBlog,后者又以用户root连接到MySQL,使用密码whatever ---它不是真正连接到的用户MySQL,它是应用程序。正确的吗?

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

4 个答案:

答案 0 :(得分:6)

是的,应用程序连接到db。您应该为您的应用程序创建一个新的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实例中没有其他数据库。

答案 1 :(得分:2)

首先,你不应该使用mysql数据库的root帐户来管理其他任何工作。 其次,从理论上讲,你的博客的用户是你的mysql数据库中的“根”,但希望在执行任何查询之前,你的博客代码中有很多sanatizing和清理...其他任何东西都将是知道是“sql注入”

答案 2 :(得分:2)

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

答案 3 :(得分:1)

简短的回答是:是的。

答案很长

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

便利性:如果您需要更改密码,则无需更改应用程序,反之亦然。