关于ROOT用户的MYSQL安全问题

时间:2011-06-21 14:22:08

标签: mysql

我的Web应用程序使用的数据源使用ROOT用户连接。 ROOT用户已分配所有权限。

我担心的是:

1)我应该使用这个用户(并且是好的/安全的)还是应该创建另一个具有更多限制权限的用户

2)如果我确实使用了其他用户,我该如何满足以下开头的所有触发器:

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

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

任何关于此的文档/链接/信息将不胜感激。感谢

4 个答案:

答案 0 :(得分:3)

  1. 您绝对应该使用受限制的用户来尽可能多地访问数据库。

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

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

答案 1 :(得分:0)

不,您的应用程序应使用root用户进行连接。您应该创建和配置具有应用程序所需权限的用户,而不是更多。

答案 2 :(得分:0)

我通常至少与三位用户合作:

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

答案 3 :(得分:0)

将root用户用于任何任务是个坏主意。您可以像系统用户一样看到它:只有系统应该在需要时使用它来执行所有内容

创建一个新用户并仅为其提供访问和权限,以执行应该所做的事情。这称为principle of least privilege

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

如果用户想要访问该过程,giveGRANT)可以访问该过程。如果root用户仍然拥有该过程,则仍然可以授予任何其他用户使用该过程。

正如我已经提到的,root用户是系统用户。如果你删除了特权,那么使用root的任何程序或用户都无法做到预期的事情(系统用户能够做所有事情),这会使你的系统瘫痪。

想一想:如果您从root用户那里删除了“ADD DATABASE”权限,您将如何添加新数据库?