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:如果用户需要检查运行过程。 只能使用所有数据库。