MySQL:授予只读选项?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我有一个用户,我想授予一个db架构的所有读取权限。

一种方法是:

GRANT SELECT, SHOW_VIEW  ON test.* TO 'readuser'@'%';

是否有一种方法可以将所有读取操作分组?

提问于
用户回答回答于

如果有任何单独的特权代表数据库上的所有读取操作。

这取决于你如何定义“所有读取”。

从表和视图中“读取”是SELECT特权。如果这就是你所说的“全部阅读”,那么是的:

GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';

然而,听起来你的意思是“看到”一切,“看而不碰”。因此,这里有一些其他的阅读方式。

“阅读”观点的定义是SHOW VIEW特权。

“读取”其他用户当前正在执行的查询列表是PROCESS特权。

“读取”当前复制状态为REPLICATION CLIENT特权。

请注意,根据所涉用户的性质,任何或所有这些都可能公开比您打算公开的信息更多的信息。

如果这是你想要做的阅读,可以将其中的任何一个(或任何其他的)组合在一起。可用特权)在一个单一的GRANT声明。

GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...

但是,没有单独的特权授予其他特权的子集,这听起来就像您要求的那样。

如果正在手动执行操作,并且在不需要记住通常为某个特定类别的用户提供的确切授权的情况下寻找一种更简单的方法,可以查找该语句来重新生成一个类似的用户授权,并将其更改为创建一个具有类似权限的新用户:

mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for not_leet@localhost                                                                                                      |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

不改变_如果要添加的新用户与密码匹配,Leet‘和’localhost‘将导致可重用GRANT语句创建新用户。

,如果希望一个操作设置并将有限的权限集授予用户,或者删除任何不值得的特权,则可以通过创建封装所有要执行的操作的存储过程来完成此操作。在整个过程中,可以构建GRANT语句使用动态SQL和/或直接操作授予表本身。

用户回答回答于
GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';

这将创建一个具有SELECT所有数据库(包括视图)的权限。

扫码关注云+社区