假设您正在使用Ruby和MySQL编写一个简单的数据库Web应用程序。 Ruby代码控制对数据库的访问。 Ruby代码用于访问数据的用户名是数据库中唯一的常规用户。这个用户是“root”是否有意义?或者在为应用程序创建第二个用户时是否有额外的安全性?
答案 0 :(得分:2)
简单,将root视为主要用户,可以执行所有操作(默认情况下)。
如果他想要转储整个数据库,他可以,如果他想创建一些数据来创建(例如)假账户以超越你的银行系统,他可以。 因此,如果您的代码不够安全(而且通常很常见),那么您就会遇到很强的安全问题。
通常,“基本”安全(非常基本)应该是这样的: 创建一个简单的用户,给他(使用GRANTS)在特定数据库上SELECT,INSERT,UPDATE和DELETE的权利。
创建另一个可以SELECT和锁定表的用户以及SHOW VIEWS来执行dump(数据库保存)。
在一个更“复杂”的系统上,您应该创建许多用户,具体取决于他们应该访问的内容,这是出于以下原因:如果有人获得了SQL注入访问权限,那么用户只能访问单个视图(对于例子),而不是整个数据库,这是一个安全问题,但不是最坏的... 也经常使用视图...
最后不要忘记触发器,如果你想要(例如一个日志表),禁用表上的插入或更新或删除,为每个人(当然可以销毁触发器的人除外): Use a trigger to stop an insert or update
答案 1 :(得分:2)
除了编辑或删除数据库中的所有数据外,root用户还具有FILE权限,可以访问:
LOAD DATA INFILE
,可用于读取服务器计算机上的任何文件。LOAD DATA LOCAL INFILE
可以读取客户端计算机(Web服务器计算机)上的文件。SELECT ... INTO OUTFILE
可以在服务器上创建文件。这就是为什么您的应用程序应该只拥有它所需的权限,这也是您的MySQL服务器守护程序应该作为服务器计算机上的非特权用户运行的原因。
另请参阅手册中的General Security Issues。
答案 2 :(得分:1)
如果每个人/事物都是root用户,则会失去审核能力,您将失去限制应用程序停止攻击的能力(即您的应用程序不需要这段敏感信息,将其与用户隔离开来)。如果有人妥协了该应用,您可以暂停该帐户等。
答案 3 :(得分:0)
我不使用户“root”。
我只为该应用程序创建一个单独的用户名和密码,并仅授予其完成工作所需的权限。
答案 4 :(得分:0)
我会创建一个新用户,只给它所需的权限(SELECT,UPDATE,INSERT和DELETE通常可以做到这一点)。像这样,你限制了以非预期的方式操纵代码的能力。
答案 5 :(得分:0)
“root”,或者一般来说,具有超级用户权限的用户可以更改密码,删除帐户,从而阻止您访问自己的数据库。
如果您的服务器只托管一个应用程序,那么您可能不需要创建多个较低权限的帐户。但是,通常的做法是为每个应用程序创建至少一个用户,这样,如果一个应用程序受到攻击,其他应用程序(和基础数据)可能不会。