【发布时间】:2016-07-22 20:39:10
【问题描述】:
我已经阅读了许多帖子和文章,它们非常清楚地表明,为了在最坏情况下的损害限制中获得最佳效果,MySQL 帐户应该只能做他们打算做的事情,而不能做其他事情。这是完全合理的,因此会有一个连接到我的数据库的帐户来执行所有SELECTing 数据,以及另一个执行UPDATE 和INSERT 活动的帐户,这样如果有人确实得到了@ 的妥协987654325@ing 数据他们不应该,那么他们就不能像UPDATE 该数据或INSERT 等那样轻松相当。
你明白了。
但是,我有各种数据库并使用帐户来读取/SELECT 数据并将其输出到客户端页面,但通常这些帐户需要更新,例如当(网站)用户更新时登录他们的帐户,或更新某种命中计数器或其他次要功能。考虑到上述问题的限制,我觉得这有点像使用洪水来灭火,允许UPDATEing(等)访问特权 MySQL 连接,只是说用户Bob 最后在下午 4:10 登录。
我一直在网上寻找合适的指南、博客文章和文章,以了解如何使用多个 MySQL 特权帐户以最佳方式构建以尽可能降低过度特权的风险来完成必要的工作,但我没有发现任何用处很大,(主要是因为我的措辞似乎在吸引有关设置网站用户的文章,或与这些关键字相关的其他主题:-/)
我对当前方法有一些想法,并希望就第 2 段中描述的进行活动的最佳方法获得一些反馈,通常为 95% SELECTing,以及UPDATEing 的一些具体实例,或如果以下任何一项是可能的(或另一方面,是非常糟糕的想法)? :
- 我目前为每个连接权限用户设置了单独的 PHP 连接对象。这是最好的方法吗?
- 我能否以某种方式授予特权用户访问权限,使其仅更新某个表(甚至某个表列?)以及来自任何表的
SELECT?这将是完美的。 -
使用
TRIGGERs 是一种常见的方法吗?如果我创建一个触发器(使用特权用户)然后让SELECT用户帐户访问触发器,这会有什么缺点吗?- 我可以设置某些用户只能使用某些触发器吗?
还有其他方法吗?
【问题讨论】:
-
可以在数据库和表级别设置权限,并且用户可以在每个级别上设置不同的权限级别 - 请参阅dev.mysql.com/doc/refman/5.7/en/grant.html
-
@PaulF 这正是我所希望的,Brilliant,谢谢。如果您想将其填充为适合我的答案:-)