普通的mysql用户(select、insert、update)是否有任何方法可以临时以较少的权限(仅select)连接到服务器?
我问这个问题是因为我们的服务器上有很多mysql用户管理着数千个数据库。每个用户将负责50个数据库。既然他们需要创建api并发布对数据库的公共访问,那么最好使用mysql用户只具有select权限来访问数据库。我们可以为此创建一个全局用户,但这样它就有权访问所有数据库。
因此,最好只使用select权限限制对某些数据库的访问。
有没有办法使用现有的mysql用户,然后只在连接的基础上修改其权限(撤销insert、update)?
更新
一般来说,我知道如何撤销mysql用户的权限,但我需要的是只撤销特定连接会话中的权限,这样撤销就不会影响同一用户的其他mysql连接。
你知道吗?还是根本不可能?
3条答案
按热度按时间5ktev3wc1#
您应该对这类问题使用“授予特权”。
可以在一个grant语句中授予多个权限。
f0ofjuux2#
https://dev.mysql.com/doc/refman/5.7/en/privilege-changes.html 说:
重新加载授权表会影响每个现有客户端连接的权限,如下所示:
表和列权限更改将随着客户端的下一个请求生效。
数据库权限更改在客户端下次执行use db\u name语句时生效。
对于已连接的客户端,全局权限和密码不受影响。这些更改仅对后续连接生效。
换句话说,在每个请求上都会检查权限,即在每个查询之前。每个服务器的内存中只有一个权限副本,所有会话都检查相同的已加载权限集。对于不同的会话,该用户无法强制使用不同的权限。
在我之前开发的一个应用程序中,我们解决了与您描述的问题类似的问题。我们为每个应用程序创建了两个mysql用户:一个对一个数据库具有完全权限,另一个对该数据库具有只读权限。
应用程序将使用一组或另一组凭据登录,并且该选择将确定它拥有哪些特权。
3lxsmp7m3#
先撤消所有特权,然后授予所需的特权