5.权限处理

在上一节中,我们已经给大家介绍了如何在MySQL中管理用户,在添加用户之后,我们的用户只有登陆系统的权限,但是没有其他权限,那么如何让用户具备相应的操作权限呢?这一节我们就来和大家介绍下这些内容。

权限操作

MySQL中提供了一系列的和权限相关的操作语句,我们将它们分为查看权限语句和设置权限语句,下边我们就分别来学习下这些语句。需要提前和大家说明的是,为了方便我们的操作,在开始学习权限相关的语句前,我们需要先添加一个测试用户scott。

查看权限

和之前学习的内容相似,在这条语句中IP地址相关的内容并不是必须的,是可以省略的,接下来我们以root身份登录到MySQL中,然后查看下测试用户scott的权限:

在结果列表中,大家可以看到这个用户具备的是一个USAGE的权限,它的意思是可以让用户可以登录到系统中,但是没有其他任何操作权限,这点和我们之前添加用户之后进行的测试结果是一致的。

设置权限

在掌握了如何查看用户权限之后,我们需要了解应该如何赋予用户权限和收回用户权限,如下所示是授予用户权限的方法:

需要和大家说明的是*表示任意的数据库或者数据表,也就是说在执行这个命令的时候,我们可以采用如下几种方式:

数据库名.*表示授予用户的权限,可以操作这个指定的数据库中的内容

*.*表示授予用户的权限可以针对任意数据库中的任意内容执行相关的操作

接下来,我们将创建用户、查看数据库的权限授予scott用户,这两个权限分别是show databases、create user,执行情况如下:

大家可以看到,我们在给scott用户授权之后,重新查看了这个用户的权限,关于创建用户和查看数据库的权限这个用户已经具备了,这里我们让scott用户来查看下系统中的数据信息:

事实上在授予用户权限的时候,有一些比较特别的写法,这些可以简化一些操作,如下所示:

# 授予普通DBA权限

GRANT ALL PRIVILEGES ON 数据库 TO 用户名@'IP'

# 授权高级DBA权限

GRANT ALL ON 数据库 TO 用户名@'IP';

接下来,我们来学习下如何撤销用户的权限,如下所示就是撤销权限的方法:

这里我们让root用户撤销scott用户查看数据库的权限,执行情况如下:

这样用户就不再具有查看数据库的权限了,大家感兴趣的话,可以在执行这个命令之后,以scott用户身份登录,然后执行查看数据库的命令是会出现错误的。

到这里为止,关于数据库用户权限的设置和查看,我们已经给大家介绍完了,下边给大家介绍权限操作的最后一个命令:

这个命令是用来作为刷新权限使用的,如果在设置用户权限之后,无法生效的话,可以执行这个命令来刷新用户的权限。

最后,关于用户权限方面的操作,我们来思考一个比较有趣的问题,我们都知道root用户是MySQL中的超级管理员用户,它可以执行任意操作,那么是否可以以root用户身份登录到MySQL数据库,然后撤销它本身的权限呢?对此,我们来撤销root用户查看数据库的权限,执行情况如下:

这个命令执行是成功的,那么如果我们让root用户执行show databases命令的话,那么是否会出现没有对应权限的提示呢?

结果是否定的,这大概就是超级管理员和一般用户之间的区别吧。

权限分析

刚才我们学习了如何设置、查看用户的权限,那么在MySQL中的用户权限到底是如何控制的呢?这里我们就来简单的分析一下。事实上,MySQL中的权限集中在user、db、tables_priv、columns_priv这四张表中(它们都在mysql库中)了,在用户进行相关操作的时候,系统会按照一定的顺序判断在这四张表中用户是否具有对用的权限,如果具备的话,就可以执行相应的操作,否则提示失败信息,这个过程我们可以用如下一张图来表示:

那么我们通过命令设置的用户权限在哪张表中呢?因为我们添加的用户都在mysql库中的user表下,所以我们在上边演示的时候赋予用户的创建用户的权限也在这张表中。

最后,我整理了一些MySQL权限方面常用的一些权限,给大家以表格的形式呈现出来:

PS: 关于MySQL中用户权限操作的内容到这里就介绍完了,下一次我们将为大家介绍MySQL中库操作的相关内容。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181126G0C3MB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券