MySQL8创建用户及设置权限秘籍

一、背景

就在昨天,突然意识到自己写的开源项目代码中使用的是超级管理员root。ip地址、用户名、密码都在里面,这秒秒钟被人删库不是正常的嘛?虽然自己的库里没啥值钱的东西,但重新导入也是很烦人的。
在这里插入图片描述
自己也刚入职场将近1年,CRUD倒是写得挺多的,但是数据库其他的基本没咋接触过,只能自己摸索,在公司,给用户设置添加权限这些工作都是运维大佬安排的,我这小弟也没机会接触啊。

既然今天遇到了这个问题,就来跟我一起学一把,涨涨小知识~
在这里插入图片描述

库存预警项目Gitee传送门
库存预警项目文章传送门

二、创建用户

在你安装好数据库后,最先登录的账号就是root用户了,老大哥了,啥权限都有。

在公司开发中,不可能每个开发人员使用的都是超级账号,这要不爽,删库跑路也太容易了吧,进局子的机会也变多了不是,咱还是老老实实在外面呼吸新鲜空气。

咱们先来创建一个普通developer账号,争取早日让老板多换几辆豪车~

#创建mindwarning用户
CREATE user 'mindwarning'@'%' IDENTIFIED BY 'mindwarning';

注:如果以前创建过相同的user,需要先(1)删除它,再执行(2)刷新操作;
可能出现的错误代码:

SQL错误(1396):Operation CREATE USER failed for 'mindwarning'@'%'

(1)删除用户

DROP USER mindwarning;

(2)刷新权限

FLUSH PRIVILEGES;

通用语句:

CREATE user 'username'@'host' IDENTIFIED BY 'password';

username:创建账号的用户名;
host:允许访问的客户端(ip或者主机地址),%表示允许任意远程主机登陆;
password:该用户名的登录密码。

咱来创建一个牛批的账号:

create user niupi;

该牛批的账号,没有密码、不限IP地址,你说牛不牛~

三、修改用户密码

话说,既然我的ip地址及账号密码都让别人知道了,我也没慌,改个密码人家不就删不了库了,就是部署的线上项目得重新改下密码然后再重新部署一下而已嘛!我保证下次不会再犯错了,希望各位引以为戒。

通用语句:

set password for 'username'@'host' = ‘newPassword’;

如果修改的用户为当前登录mysql数据库的用户可以使用以下语句直接修改:

set password = 'newPassword';

改完密码后,浑身一身轻松啊!上次还遇到由于mysql8的密码机制不同于mysql5导致改不了密码,捣鼓了半天还没解决,这次倒是畅通无阻。
如果你也改不了用户的密码,可以移步到阿里云MySQL安装的文章中,里面有相应的解决方法。

四、删除用户

超级管理员最爽的就是可以随意删除别的账户,这是上班体验不到的快乐,哈哈!

通用语句:

drop user 'username'@'host';

注意:mysql库中的user表的User和Host字段具有唯一性,所以drop删除时,需要带上两个字段一起索引。
在这里插入图片描述

五、权限管理

曾经有一份真诚的爱情摆在我的面前,但是我没有珍惜。等到了失去的时候才后悔莫及,尘世间最痛苦的事莫过于此。如果上天可以给我一个机会再来一次的话,我会对你说三个字“我爱你”。如果非要把这份爱加上一个期限,我希望是一万年!
在这里插入图片描述
诶,你说如果我可以给我的QQ账号刷一万年的黄钻,偷菜会不会更快啊?

1、权限分类

数据权限

增删改查(select、update、delete、insert)

结构权限

创建、删除表(create、drop)

管理权限

创建用户、授予权限、撤销授权(create user、grant、revoke):通常只给管理员此权限

2、授予权限

#权限分配
GRANT SELECT,UPDATE,DELETE,INSERT,CREATE ON mindwarning.* TO 'mindwarning'@'%';

Look~我给mindwarning用户授予了SELECT,UPDATE,DELETE,INSERT,CREATE权限。

通用语句:

grant 权限列表 on 数据库.表名 to 用户 [with grant option]

权限列表:授权的权限,使用“,”分隔;all privileges表示全部权限
数据库.表名:整个数据库(.)、某个数据库(数据库名.*)、某个表(数据库名.表名)

一般的,老板可以命令主管做什么事,而主管也可以命令手下员工干什么活。那在数据库中怎么实现呢?

像上面的权限分配语句,‘mindwarning’@’%'账号此时被授予了某些权限,但是当它想给另一个账号授予某些权限的时候,就无能为力了。

一方面是它没有grant权限,另一方面即使它被授予了grant权限,由于root没有将权限传递给mindwarning(也就是mindwarning不是主管,就不能命令手下员工)。

那怎么才能传递权限呢?

with grant option

当root用户给某个账号授予权限的时候,可以在账号后面添加with grant option,这样就能传递权限了。

GRANT all privileges ON mindwarning.* TO 'user007'@'%' with grant option;

现在user007拥有了全部权限,且能够使用权限,代替root用户去授予其他账号权限,这应该很好理解的。

3、查看权限

SHOW GRANTS FOR 'mindwarning'@'%';

在这里插入图片描述

4、回收权限

revoke all privileges ON mindwarning.* TO 'user007'@'%';

因为’user007’@’%'有with grant option传递权限的能力,所以还需要执行一步才能完成权限的回收;

revoke grant option from 'user007'@'%';

通用语句:

revoke 权限列表/all privileges on 数据库/*.表名/* from 用户;

像我们删除用户后,需要执行刷新语句才能成功。现在执行权限回收则立马有效果,不需要刷新,被执行的用户就能感受到权限被回收的快感,哈哈!这不比贵妃娘娘失宠来的快得多?

5、刷新权限

刷新,将当前对用户的权限操作,进行一个刷新,将操作的具体内容同步到对应的表中。

#(1)
flush privileges;
#(2)
mysqladmin reload;
#(3)
mysqladmin flush-privileges;

注:
第(1)种需要以管理员身份登录才能执行;
如果我们用上面不是管理员的mindwarning账号执行flush privileges;就会出现一下错误:

/* SQL错误(1227):Access denied; you need (at least one of) the RELOAD privilege(s) for this operation */

第(2)、(3)种则需要在操作系统环境下(cmd)运行,在操作工具上运行是会报错的:

/* SQL错误(1064):You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysqladmin reload' at line 1 */
/* SQL错误(1064):You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysqladmin flush-privileges' at line 1 */

在操作系统环境下就不会报错!
在这里插入图片描述
注:能力有限,还请谅解,争取早日能够写出有质量的文章!

我是皮蛋布丁,一位爱吃皮蛋的热爱运动的废铁程序猿。

在这里插入图片描述

感谢各位大佬光临寒舍~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值