如何正确处理多个特权MySQL连接帐户

时间:2016-06-14 10:59:07

标签: mysql database

我已经阅读了很多帖子和文章,这些帖子和文章非常清楚地表明,对于最坏情况下的最佳损害限制,MySQL帐户应该只能做他们想做的事情,而不是别的。这是完全合理的,因此我的数据库中将有一个连接帐户可以执行所有SELECT数据,另一个帐户执行UPDATEINSERT个活动,这样如果有人确实通过SELECT他们不应该得到的数据来妥协,然后他们不能完全那么轻松UPDATE那个数据或INSERT等。

你明白了。

但是,我有各种数据库并使用帐户来读取/ SELECT数据并将其输出到客户端页面,但这些帐户通常需要更新,小的事情如更新时(网站) )用户登录他们的帐户,或更新某种hitcounter或其他次要功能。鉴于上面提到的关注点,我觉得这有点像使用洪水来篝火,允许UPDATE等。)到特权MySQL连接简单地说该用户Bob于下午4:10登录。

我一直在网上寻找合适的指南,博客文章和文章,关于如何使用多个MySQL特权帐户进行最佳结构,以尽可能减少超额特权的风险来完成nessecary工作,但我没有发现任何已经大量使用,(主要是因为我的措辞似乎吸引了关于设置网站用户的文章,或与这些关键字相关的其他主题:-/

我对当前的方法有一些想法,并希望对第2段所述的最佳活动方法提出一些反馈,通常是95%SELECT,以及{{1}的一些特定实例如果有可能(或者在另一方面,是非常糟糕的想法)? :

  • 我目前为每个连接权限用户都有单独的PHP连接对象。这是最好的方法吗?
  • 我可以以某种方式授予权限用户访问权限,只更新某个表(甚至某个表列?),以及任何表中的UPDATE吗?这将是完美的。
  • 使用SELECT是一种常见方法,如果我创建了一个触发器(具有特权用户),然后让TRIGGER用户帐户访问触发器,那么这会有任何缺点吗?

    • 我可以设置某些用户只能使用某些触发器吗?
  • 还有另一种方法吗?

1 个答案:

答案 0 :(得分:1)

MySQL允许用户在数据库和单个表级别设置不同的权限。有关GRANT(http://dev.mysql.com/doc/refman/5.7/en/grant.html)语法的文档提供了在一个数据库上为用户设置所有权限,而只选择对另一个数据库中的表的访问权限的示例。

甚至可以为表格中的特定列(http://dev.mysql.com/doc/refman/5.7/en/grant.html#grant-column-privileges)设置权限。也适用于存储过程(http://dev.mysql.com/doc/refman/5.7/en/grant.html#grant-routine-privileges)。