一文看尽MySQL用户权限管理,真香!

本文详细介绍了MySQL用户权限管理,包括创建用户、授权、回收权限和删除用户等操作。通过授权,可以限制用户访问特定库、表,执行特定操作,甚至设定登录IP。MySQL权限管理涉及user、db、tables_priv等系统表,执行权限检查顺序从user表开始,逐步到特定表的列权限。文章提供了一系列GRANT和REVOKE命令示例,帮助读者理解和实践MySQL权限管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、创建用户格式

二、授权格式及示例:

1. 授予管理员权限

2. 授予数据库、表权限

3. 授予列权限

三、修改用户配置:

1. 回收 mysql 权限

2. 删除 mysql 用户

3. 修改 mysql 用户密码

4. 忘记密码

5. 设置MySQL用户密码过期策略

6. mysql 用户 lock

7. 用户重命名


权限管理概念

======

MySQL用户权限管理主要有以下作用:

  1. 可以限制用户访问哪些库、哪些表
  1. 可以限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作
  1. 可以限制用户登录的IP或域名
  1. 可以限制用户自己的权限是否可以授权给别的用户

用户操作MySQL数据库的权限管理,主要分为两个阶段:

  • 有没有权限连接上来

  • 有没有权限执行本操作

1. MySQL连接权限


服务器如何判断用户有没有权连接上来?

依据:

  • 你从哪里来?host

  • 你是谁?user

  • 你的密码是多少?password

用户的这三个信息,存储在mysql库中的user表中。

2. 操作执行权限


mysql数据库(系统数据库)下的表:user、db、tables_priv、columns_priv、proce_priv、proxies_priv共同构成授权表;

  • 1)user表

user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。

  • 2)db表

db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。

  • 3)tables_priv表

tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。

  • 4)columns_priv表

columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。

  • 5)proce_priv

columns_priv表指定存储过程权限。这里代表允许使用某个存储过程的权限。

  • 6)proxies_priv

利用 MySQL proxies_priv(模拟角色)实现类似用户组管理。角色(Role)可以用来批量管理用户,同一个角色下的用户,拥有相同的权限。

注:MySQL5.7.X以后可以模拟角色(Role)的功能,通过mysql.proxies_priv模拟实现

3. MySQL执行权限检查顺序


mysql执行权限检查顺序

开始查询

  1. 校验user表,对于全局权限是ok → 直接执行

  2. 检验DB表,对于某个有特定的数据库有权限 → 执行

  3. 检验tables_priv,对于特定数据库下的某些表是有权限 → 执行

  4. 检验columns_priv,对于特定表中的某些列有权限 → 执行

权限分布

可能的设置的权限

表权限

'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'

列权限

'Select', 'Insert', 'Update', 'References'

过程权限

'Execute', 'Alter Routine', 'Grant'

用户登录,user表首先能限制用户登录,其次还保存了该用户的全局权限,如果该用户没有任何权限,那么将从db表中查找该用户是否有某个数据库的操作权限,如果都没有,将从table_priv表中查找该用户是否有某个表的操作权限,如果有,则该用户可以按照已有的权限来操作该表。

实际操作

=======

在我们安装完数据库后,只能在本地登录数据库,当进行远程登录时,会提示我们错误。

æä¹è§£å³mysqlä¸å许è¿ç¨è¿æ¥çé误

1130 - Host’xxx.xxx.xxx.xxx’ is not allowed to connect to this MySQL server

这时,我们就要进行相应的配置,给特定的用户赋予特定的操作权限。

MySQL中使用GRANT命令和REVOKE命令来管理用户的权限。

创建/授权用户:

========

有两种方式创建MySQL授权用户

方法一、通过insert语句直接操作MySQL系统权限表(此处不再赘述)

方法二、执行create user/grant命令(推荐)

注意:

  • 在试用grant命令创建用户时要注意了,在MySQL5.7.7版本前,如果被授权的用户不存在,那么grant语句会自动创建新的账户,除非设置参数sql_mode 包含 “NO_AUTO_CREATE_USER” 。

  • 但从5.7.7版本开始,默认的sql_mode就包含“NO_AUTO_CREATE_USER” (grant语句不再创建新的账户

  • 因此,如果你是用的MySQL版本较新,要注意语法了,需要先用create user创建用户,再用grant命令赋权限;

一、创建用户格式


创建用户命令一般格式:

create user [用户名]@[访问地址] identified by [密码]

举例1:创建zhangsan用户,只是创建用户并没有权限,'localhost’表示只能在本地登录,无法通过远程连接;密码是 password

CREATE USER ‘zhangsan’@‘localhost’ IDENTIFIED BY ‘password’;

举例2:创建lisi用户,只是创建用户并没有权限,密码为 password,%通配符表示任何主机都可以连接(可以远程连接),

CREATE USER ‘lisi’@‘%’ IDENTIFIED BY ‘password’;

举例3:(5.7.7版本前)的创建用户并赋予RELOAD,PROCESS权限 ,在所有的库和表上;*.*:代表所有的库表

GRANT RELOAD,PROCESS ON . TO ‘admin’@‘localhost’ identified by ‘123456’;

二、授权格式及示例:


grant [权限1,权限2,权限3] on . to user@‘host’ identified by ‘password’

常用权限:all privileges、create、drop、select、insert、delete、update

例如,给"zhangsan" 用户管理员权限,并且允许该用户继续给别的用户赋权限

grant all privileges on . to ‘zhangsan’@‘192.168.1.%’ with grant option;

  • all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。

  • on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user

  • to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:‘zhangsan’@‘192.168.1.%’,表示zhangsan这个用户只能在192.168.0.* IP段登录

  • with grant option:通过在grant语句的最后使用该子句,就允许被授权的用户把得到的权限继续授给其它用户

注:使用GRANT添加权限,权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个SELECT权限,后来又给用户添加了一个UPDATE权限,那么该用户就同时拥有了SELECT和UPDATE权限。

1. 授予管理员权限

举例4:把zhangsan 变成管理员用户,拥有root权限

mysql> GRANT ALL PRIVILEGES ON . TO ‘zhangsan’@‘localhost’ WITH GRANT OPTION;

#刷新权限命令

mysql> flush privileges;

2. 授予数据库、表权限

举例5:授予用户zhangsan可以对test数据库中的所有表进行查询

grant select on test.* to zhangsan;

举例6:授予lisi在test数据库中创建、修改、删除表的权限以及创建视图的权限

grant create、alter、drop、create view on test.* to lisi;

举例7:授予lisi可以对当前数据库中的所有表进行查询, * :表示当前数据库

grant select on * to lisi;

举例8:授予lisi可以创建、修改、删除数据库以及对所有数据库中的所有表进行create、alter和drop

grant create,alter,drop on . to lisi;

举例9:授予lisi可以创建新用户

grant create user on . to lisi;

3. 授予列权限

# 例10:给zhangsan用户赋权限,设置为在test库,shop表,上的id、name、price列只有select 权限

mysql> grant select(id,name,price) on test.temp to zhangsan@‘localhost’ WITH GRANT OPTION;

#刷新权限

mysql> flush privileges;

# 举例11:授予用户zhangsan可以对test.shop表的id和name列进行更新

grant update(id,name) on test.shop to zhangsan@‘localhost’;

# 举例12:查看自己的权限:

show grants;

三、修改用户配置:


1. 回收 mysql 权限

通过 revoke 命令收回用户权限,回收的时候看一下这个用户有哪些权限然后回收

show grants for admin@‘localhost’;

mysql> show grants \G

*************************** 1. row ***************************

Grants for admin@localhost: GRANT ALL PRIVILEGES ON . TO ‘admin’@‘localhost’ WITH GRANT OPTION

1 row in set (0.00 sec)

revoke :回收权限

mysql> revoke PROCESS ON . FROM admin@‘localhost’;

#刷新权限

mysql> flush privileges;

2. 删除 mysql 用户

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

麻烦帮忙转发一下这篇文章+关注我

就这一次!拼多多内部架构师培训Kafka源码笔记(现已绝版)

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

麻烦帮忙转发一下这篇文章+关注我

[外链图片转存中…(img-rkCW6PvP-1713564090355)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值