当前位置: 首页 > 面试题库 >

MySql:授予只读选项?

龚奇逸
2023-03-14
问题内容

我有一个用户,我想授予该用户对数据库模式的所有READ权限。

一种方法是这样的:

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特权。

请注意,取决于所讨论的用户的性质,所有这些信息中的任何一个或全部可能会提供比您打算公开的信息更多的信息。

如果这是您想要做的阅读,则可以将所有这些(或任何其他可用特权)组合在一个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创建新用户的可重用语句。

其中,如果您希望单个操作来设置并向用户授予有限的特权集,并可能删除任何未获利用的特权,则可以通过创建一个封装了您想做的所有事情的存储过程来完成。在该过程的主体内,您将GRANT使用动态SQL构建语句和/或直接操纵授权表本身。

在最近有关数据库管理员的问题中,发布者希望有一个无特权的用户修改其他用户的能力,这当然是通常无法完成的事情-
可以修改其他用户的用户在定义上几乎不是无特权的用户-但是-
在这种情况下,存储过程提供了一个很好的解决方案,因为它们在其DEFINER用户的安全上下文中运行,从而使EXECUTE对过程有特权的任何人都可以临时承担提升的特权,以允许他们执行特定的操作。程序完成。



 类似资料:
  • 我想从每个主机向用户授予select权限,但如果出现错误,则不允许创建用户 mysql 错误1410(42000):不允许使用GRANT创建用户 我不想创建新用户,因为我使用了命令create user 我试图创建一个新用户,但grant命令也失败了。

  • 在本主题中,作者将介绍如何跳过授权对话框,根据用户登录和密码获取访问令牌。 我可以访问endpoint并获取访问令牌,然后刷新令牌: 但是当我试图获取用户的电子邮件时,我得到了一个错误: 这种身份验证方法对Microsoft Graph API仍然有效吗?如果没有,是否有其他方法来获得用户授权,只使用登录和密码,没有任何用户交互,只获得他的登录和密码?

  • 本文向大家介绍oauth 授权码授予,包括了oauth 授权码授予的使用技巧和注意事项,需要的朋友参考一下 示例 第1步 第2步 资源

  • 大家好,我想给文件以读模式或写模式打开的权限。ext包含文件扩展名,file_name包含文件名。f_p是一个可验证的输入,其中I是作为“r”或“w”模式的输入。这里我在不同的位置使用相同的文件 但是在这段代码中,我得到了错误,因为找不到符号:方法setReadable(布尔)location:fos2是FileOutputStream类型 <% %>https://jsfiddle.net/wc

  • 我在*上运行命令< code >授予所有权限。*到由“root”标识的“root”@“%”; 并且它不断显示以下错误 11: 43:51向“root”标识的“root“@”%“授予所有权限。错误代码:1045。拒绝用户“root‘@”%的访问(使用密码:YES)0.00045秒 我还检查了Mysql上的User表,如下所示。 我不知道这是怎么回事?: 不重新安装MySQL怎么解决这个问题?(因为,

  • 对于授权码授予,密钥是否应该映射到每个单独的用户? 发送电子邮件时,发件人的电子邮件是什么? 谢谢 J Larry的其他信息: 这太棒了!。Docusign对库存流进行了积极监控!我正在使用JWT 我配置了一个用户。我假设电子邮件正文将类似于下面的一个。 我的问题是,如果使用密钥来识别应用程序,客户知道电子邮件是从应用程序发送的,但他如何知道使用应用程序的哪个员工发送电子邮件? 请参阅以下电子邮件