2011-06-21 30 views
2

我的Web应用程序使用的数据源使用ROOT用户连接。 ROOT用户拥有分配的所有权限。MYSQL关于ROOT用户的安全问题

我的担忧是:

1)我应该使用这个用户(以及是否确定/安全),或者我应该创建另一个用户有一个更受限制的权利

2)如果我做使用其他用户,我怎么照顾我所有的特效开头为:

CREATE DEFINER=`root`@`%` PROCEDURE `Blah`() 

3)它是一个坏主意,从ROOT用户删除权限。例如,如果我删除了“DROP”权限,当通过管理员或查询浏览器登录时,我仍然可以删除对象。我的猜测是否定的,我不应该嘲笑这些特权。

任何文件/链接/信息将不胜感激。谢谢

回答

3
  1. 你应该绝对使用受限用户来尽可能访问数据库。

  2. 有权限允许您的用户访问过程。我没那么熟悉,但这里的官方文档:http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

  3. 不要乱用root的权限:)

+0

所以ROOT用户应该拥有所有权限,但不应该用于任何事情,只能由系统使用? – Cheeky

+0

或系统管理员。它通常被称为“超级用户”,因为它被授予做*任何*。它只能在安装或安装过程中使用。在所谓的“生产”使用过程中,不应该触摸根用户。而且我甚至认为定期维护应该让root用户独自一人。 – Pindatjuh

0

不,你的应用程序应该使用root用户进行连接。您应该创建并配置具有应用程序所需权限的用户,而不再需要其他权限。

0

我通常有至少三个用户去:

  • 根可以做任何事情。更改root的权限是一个灾难的秘诀(除非你确切知道你在做什么)
  • 应用程序拥有自己的用户,并且该用户具有非常严格的权限 - 通常只需要SELECT,UPDATE,INSERT,DELETE 。无论如何,没有允许架构修改的权限(CREATE/ALTER TABLE等)。
  • 一个特殊的用户,可以访问应用程序的数据库,但没有别的。此用户用于维护任务,如架构升级,但不适用于应用程序本身。
0

对任何任务使用root用户是个坏主意。你可以像系统用户一样看到它:只有系统应该使用它,当它需要时,做的一切

创建一个新用户,并给它只有访问权限和特权才能做应该做的事情。这被称为principle of least privilege

在这种情况下,程序是某些用户,模块或程序的一部分在正常情况下应该执行的操作的一部分。因此,您创建ownsDEFINER)该程序的用户。您应该从root用户中删除该程序并将其添加到新创建的用户。如果不可能从根用户中删除:那就这样吧!但是:

如果用户想访问该过程,他们就可以访问该过程,giveGRANT)。在root用户仍然拥有该程序的情况下,任何其他用户仍然可以授予使用的程序。

正如我已经提到的那样,root用户是系统用户。如果您放弃特权,则任何使用root的程序或用户都无法完成预期的任务(系统用户能够执行所有任务),并且这会削弱您的系统。

想一想:如果您从根用户中删除了“ADD DATABASE”特权,您将如何添加新的数据库?