MySql:授予只读选项?
我有一个用户,我想授予所有数据库架构的读取权限。
一种方法是:
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 ...
然而,没有一个特权授予其他特权的一些子集,这就是你所要求的。
如果您正在手动执行操作并寻找一种更简单的方法来执行此操作,而无需记住您通常为特定用户类别提供的确切授权,则可以查看该语句以重新生成可比较的用户的授权,然后对其进行更改创build一个具有类似权限的新用户:
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
语句创build新用户。
如果你想要一个单独的操作来设置和授予用户有限的权限集合,并且可能删除任何不合适的特权,那么可以通过创build一个存储过程来完成你想要做的事情。 在过程的主体中,您将使用dynamicSQL构buildGRANT
语句并/或直接操作授权表本身。
在这个最近关于数据库pipe理员的问题上 ,海报希望非特权用户能够修改其他用户,这当然不是通常可以完成的事情 – 可以修改其他用户的用户几乎没有定义一个非特权用户 – 然而,存储过程在这种情况下提供了一个很好的解决scheme,因为它们以DEFINER
用户的安全上下文运行,允许任何具有该过程的EXECUTE
特权的人暂时承担升级权限,以允许他们执行特定程序完成的事情。
GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';
这将为包括Views在内的所有数据库创build一个拥有SELECT
权限的用户。
您可以授予用户的各种权限
ALL PRIVILEGES- This would allow a MySQL user all access to a designated database (or if no database is selected, across the system) CREATE- allows them to create new tables or databases DROP- allows them to them to delete tables or databases DELETE- allows them to delete rows from tables INSERT- allows them to insert rows into tables SELECT- allows them to use the Select command to read through databases UPDATE- allow them to update table rows GRANT OPTION- allows them to grant or remove other users' privileges
为了给特定的用户提供一个权限,你可以使用这个框架:
GRANT [权限types] ON [数据库名]。[表名] TO'[username]'@'localhost'; 我发现这篇文章非常有帮助
我在这里find了一步一步的指南。
为MySQL创build只读数据库用户帐户
在UNIX提示符下,运行MySQL命令行程序,并通过input以下命令以pipe理员身份login:
mysql -u root -p
input根帐户的密码。 在mysql提示符下,执行以下步骤之一:
要让用户从任何主机访问数据库,请键入以下命令:
grant select on database_name.* to 'read-only_user_name'@'%' identified by 'password';
如果收集器将与数据库安装在相同的主机上,请键入以下命令:
grant select on database_name.* to 'read-only_user_name' identified by 'password';
这个命令给予用户只能从本地主机读取数据库的权限。 如果知道将要安装收集器的主机的主机名或IP地址,请键入以下命令:
grant select on database_name.* to 'read-only_user_name'@'host_name or IP_address' identified by 'password';
主机名必须通过DNS或本地主机文件parsing。 在mysql提示符处,input以下命令:
flush privileges;
键入quit
。
以下是示例命令和确认消息的列表:
mysql> grant select on dbname.* to 'readonlyuser'@'%' identified by 'pogo$23'; Query OK, 0 rows affected (0.11 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> quit
如果您希望在授予读取权限后才能读取视图,则可以使用ALGORITHM = TEMPTABLE查看DDL定义。
即使用户已经得到答案,并且@Michael – sqlbot已经在他的post中主要覆盖了很多点,但有一点是失踪,所以只是试图掩盖它。
如果你想提供阅读权限给一个简单的用户(不是pipe理类) –
GRANT SELECT, EXECUTE ON DB_NAME.* TO 'user'@'localhost' IDENTIFIED BY 'PASSWORD';
注意:此处需要EXECUTE,以便用户可以在存在生成报告的存储过程(只有less量select语句)的情况下读取数据。
将localhostreplace为用户将连接到数据库的特定IP。
额外阅读权限 –
- SHOW VIEW:如果你想显示视图模式。
- 复制客户端:如果用户需要检查复制/从属状态。 但是需要对所有数据库授予权限。
- PROCESS:如果用户需要检查运行过程。 只能使用所有数据库。