文章目录

  • 基本概念
  • 权限管理
  • 用户管理
  • 查看用户
  • 创建用户
  • 修改密码
  • 删除用户
  • 权限管理
  • 查看权限
  • 创建权限
  • 修改权限
  • 删除权限


基本概念


我们经常遇到用户权限的一些问题,如“你无权创建文件”等等。类似地,在数据库中每个用户都有一定的权限,例如用户A只能查看A数据库,用户B1只能查看B数据库的B1表等用户赋权 mysql root权限_用户权限


  • 在MySQL中,root账户为超级管理员账户,负责权限管理
  • 用户权限管理需要在mysql数据库中进行相关操作

权限管理

用户管理

查看用户

show databases; -- 查看所有数据库
use mysql; -- 使用mysql数据库
show tables; -- 展示当前数据库下的表

用户赋权 mysql root权限_用户权限_02

desc user; -- 描述user表结构

用户赋权 mysql root权限_mysql_03

select * from user \G; -- 查看user表的详细信息,并以列的形式展示

用户赋权 mysql root权限_用户赋权 mysql root权限_04


用户赋权 mysql root权限_用户赋权 mysql root权限_05

select user,host,authentication_string from user;
查看用户名、端口号和密码

用户赋权 mysql root权限_用户权限_06

select user(); -- 查看当前用户

用户赋权 mysql root权限_用户赋权 mysql root权限_07

创建用户

create user <用户名>@ip地址 identified by '<密码>'; -- 创建用户,%表示所有端口

修改密码

  • 8.0之前版本
update user set authentication_string = password('<密码>') 
where user = '<用户名>';
flush privileges; 
-- 权限刷新,密码修改后没有马上执行就刷新下
  • 8.0版本及之后
update user set authentication_string='' where user='<用户名>'; -- 清空已有密码
ALTER USER <用户名>@<主机地址> IDENTIFIED BY '<密码>'; -- 创建新的密码,推荐 
set password for <用户名>@<主机地址> = '<密码>' -- 另一种创建密码的方式

注(参考资源):
MySQL8.0后请使用alter修改用户密码,
因为在MySQL8.0以后的加密方式为caching_sha2_password,
如果使用update修改密码会给user表中root用户的authentication_string字段下设置newpassowrd值,
当再使用alter user ‘root’@‘localhost’ identified by 'newpassword’修改密码时会一直报错,必须清空后再修改,
因为authentication_string字段下只能是MySQL加密后的43位字符串密码,
其他的会报格式错误,
所以在MySQL8.0以后能修改密码的方法只能是:ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘你的密码’;


删除用户

drop user <用户名>@<主机地址>; -- 删除用户

权限管理

查看权限

use mysql; -- 使用mysql数据库
desc user; -- 查看数据库的所有权限

用户赋权 mysql root权限_mysql_08

desc tables_priv; -- 查看当前用户的表权限

用户赋权 mysql root权限_用户赋权 mysql root权限_09

show grants; -- 查看当前账户的权限

用户赋权 mysql root权限_数据库_10

show grants for <用户名>@<主机地址>; 
-- 查看指定账户的权限,USAGE标识无权限,本地地址无需添加@字段

用户赋权 mysql root权限_用户赋权 mysql root权限_11

创建权限

grant <权限> on <数据库>.<数据表> to <用户名>@<主机地址>;
grant all on *.* to <用户名>@<主机地址>; -- 授予用户所有数据库的所有权限
grant select(last_name) on sakila.actor to <test>@192.168.0.1;
-- 只能查看sakila数据库中actor表的last_name字段

修改权限

修改用户的相关权限一般都是全部删除之后再重新授予

删除权限

revoke all on *.* from <用户名>@<主机地址>; 
-- 收回用户所有权限(权限修改后会叠加,因此赋予新权限时最好清空原有权限后再赋予)