2010-07-31 36 views
2

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

,当用户开始使用您的博客访问,张贴,并在螺纹评论,等等...我假设他们连接为root通过应用myblog ...

所以......用户连接到应用myBlog谁又连接到MySQL作为用户root,使用密码whatever ---这不是真的被连接到MySQL的用户,它的应用。正确?

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

回答

6

是,应用程序连接到数据库。你应该为你的应用程序创建一个新的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”部分是,如果你想创建一个新的分贝差的环境中,如开发,分期,督促,无论....

这样你的应用程序的用户有其数据库的完全访问权限,但在mysql实例中没有其他dbs。

+2

谢谢!但是,授予数百人使用的应用程序的所有权限不是一个坏主意吗? – Mohamad 2010-07-31 17:32:02

+2

@Mel,在这种情况下,'GRANT ALL'意味着由于'ON'子句给予所有数据库级别的权限。 – 2010-07-31 17:54:06

2

首先,你永远不应该使用MySQL数据库的root帐户为别的,然后管理员的工作。 其次,从理论上讲,你的博客的用户是你的mysql数据库中的“根”,但希望在执行任何查询之前有很多sanatizing和清理你的博客代码......其他任何东西要知道作为一个“SQL注入”

1

简短的回答是:是的。

龙回答

安全:你应该有你的应用程序不同的用户比你为自己做的administator。该应用程序用户应该只需读取(并在必要时写入)特定数据库上的权限即可访问。此外,它不应具有特权授予权限,也不应具有删除表权限,也不具有数据库创建/删除特权,也不具有为您保留的任何其他内容。

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

+0

谢谢。所以,基本上,不应该授予这个表(http://dev.mysql.com/doc/refman/5.1/en/privileges-provided.html)中说“服务器管理”(第三列,底部)的任何内容? – Mohamad 2010-07-31 17:46:03

+1

一般来说,是的。有时候人们会选择更具限制性的特权。例如,应用程序很可能不需要创建或删除表,因此您不会授予这些权限,但它确实需要执行select或insert操作,因此应授予这些权限。 – 2010-07-31 17:52:46

2

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