玖叶教程网

前端编程开发入门

MySQL 学习之撤消部分数据库对象权限

私信我或关注微信号:猿来如此呀,回复:学习,获取免费学习资源包。

这是一个由3部分组成的博客系列:

  • 第1部分:SYSTEM_USER动态权限
  • 第2部分:撤销部分数据库对象权限
  • 第3部分:如何为应用创建多个帐户?

您是否遇到过想要授予用户权限,让其访问除少数数据库以外的所有数据库的情况?如果有过这种情况,本文将会引起您的兴趣。从MySQL 8.0.16开始,您可以部分撤消用户的数据库权限,即使他们被授予全局权限。

在我们深入讨论细节之前,您可能想知道MySQL的权限机制是如何工作的。https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html

这是创建多个帐户的系列中的第二篇博客文章。在之前的博客文章中,我们了解了SYSTEM_USER动态权限。在接下来的博客文章中,我们将结合在一起创建多个用户的应用程序。

让我们通过一个示例更好地理解部分撤销。

您有一个管理员'foo_admin'来协助开发团队,因此他需要具有几乎所有数据库的读取权限。您在所有数据库中都有一个敏感的数据库“payroll”。您不想给'foo_admin'这个数据库的读取权限。如何实现这一目标呢?

您可以通过在每个数据库上单独授予一个数据库级别的SELECT来实现此目的。使用MySQL 8.0.16可以更有效地实现相同的效果。让我们看看如何执行此操作。

首先,创建用户。



这称为 部分撤销,因为它撤消了特定数据库的全局SELECT权限。系统变量'partial_revokes'必须为ON才能创建部分撤销。

检查用户现在拥有的权限。



验证'foo_admin'是否能够从除受限数据库之外的数据库中读取数据。



尽管具有全局SELECT权限,但由于在该数据库上为该用户创建的部分撤销,'foo_admin'无法在'payroll'数据库中进行查询。

现在,假设您添加了一个新数据库'payment'。用户'foo_admin'可以在此数据库中进行查询,因为它具有全局SELECT权限,并且为另一个数据库添加了部分撤销。

您可以通过与“payroll”数据库的相同方式限制对“payments”数据库的访问。让我们看看如何在以下示例中执行此操作。

创建数据库。



验证'foo_admin'是否能够从除两个受限数据库之外的数据库中读取。




如果通过角色授予部分撤销,则在角色激活后它们将生效。我留下这些场景供您试试。

部分撤销聚合

到现在为止还不错。你了解部分撤销是如何工作的。众所周知,如果前者被授予“GRANT OPTION”权限,则用户可以将权限授予其他用户。我们可以将授予用户称为Grantor。被授予权权限的用户称为Grantee。

如果Grantor试图向Grantee授予某些特权,并且其中一个或两者都有部分撤销或DB级别的授权,该怎么办?看看这样的场景很有意思。

让我们从以下例中更好地理解。在这里,我演示了Grantor为Grantee执行的GRANT和REVOKE语句的结果。他们俩都可能已经获得了一些授予或部分撤销。为简单起见,我只展示了表达意图的SQL语句的相关部分。

当Grantor和Grantee都具有全局权限时,在数据库上创建部分撤销。



通过DB级别权限清除部分撤销。



Grantor向没有权限的Grantee授予全局权限。Grantor的部分撤销也会转移给Grantee。



Grantor具有部分撤销,Grantee享有全局权限。

  • Grantor无法撤销Grantee对前者部分撤销的数据库的权限。



  • Grantor撤销Grantee对前者具有全局访问权限的数据库的权限。



  • Grantor通过向后者授予全局权限来清除Grantee的部分撤销。



在Grantor和Grantee汇总全局,数据库级别权限和部分撤销。



部分撤消角色的聚合

可以授予用户多个角色。每个角色可以有自己的一组权限以及定义的部分撤销。当激活授予用户的角色时,聚合过程的结果变得更加有趣。

让我们看看一个例子。

有四个角色,每个角色都有一组权限和部分撤销。所有这四个角色都授予给开始没有任何权限的授予者。当Grantor激活所有角色时,他获得聚合权限(所有全局权限)和部分撤销(在这种情况下无)。Grantor现在通过授予他全局权限来清除Grantee的部分撤销。



希望您现在能够对数据库对象的部分撤销有一个相当好的想法。您可能会兴奋地试用您的场景。不过,您可能需要注意以下几点。

部分撤销功能通过系统变量“partial-revokes”控制,默认为OFF。您需要更改启用系统变量的值才能使用此功能。

只要数据库上至少存在一个部分撤销,就不能关闭系统变量'partial-revokes'。

部分撤销不支持带有通配符的授权,因此它不会特别处理字符'_'和'%'。

来源网络,侵权删除

私信我或关注微信号:猿来如此呀,回复:学习,获取免费学习资源包。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言