我有一个用户,我想授予他对db模式的所有读取权限.
一种方法是:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
有没有办法将grant中的所有读取操作分组?
我有一个用户,我想授予他对db模式的所有读取权限.
一种方法是:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
有没有办法将grant中的所有读取操作分组?
如果存在代表数据库上所有读取操作的任何单一权限.
这取决于你如何定义"全部阅读"
"阅读"表格和视图是SELECT
项特权.如果这就是你所说的"全部阅读"的意思,那么是的:
GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';
然而,听起来你指的是一种"看到"一切、"看但不摸"的能力下面是我想到的其他阅读方式:
"阅读"视图的定义是SHOW VIEW
特权.
"读取"其他用户当前正在执行的查询列表是PROCESS
权限.
"正在读取"当前复制状态是REPLICATION CLIENT
权限.
请注意,根据用户的性质,任何或所有这些可能会expose 比您打算公开的更多的信息.
如果这是你想做的阅读,你可以将其中任何一个(或the available privileges个中的任何一个)组合在一个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)
更改"not_leet"和"localhost"以匹配您要添加的新用户,以及密码,将导致一个可重用的GRANT
语句来创建新用户.
当然,如果您希望通过一个操作设置并向用户授予有限的权限集,或者删除任何未满足的权限,可以通过创建一个存储过程来完成,该存储过程封装了您想要执行的所有操作.在过程主体中,您可以使用动态SQL构建GRANT
语句和/或直接操作grant表本身.
在this recent question on Database Administrators年,海报希望一个没有特权的用户能够修改其他用户,这当然不是正常情况下可以做到的事情——一个可以修改其他用户的用户,从定义上来说,基本上不是一个没有特权的用户——然而,存储过程在这种情况下提供了一个很好的解决方案,因为它们是在DEFINER
用户的安全上下文中运行的,因此允许在该过程中拥有EXECUTE
权限的任何人临时承担升级权限,以允许他们执行该过程完成的特定操作.