文章目录
- 基本概念
- 权限管理
- 用户管理
- 查看用户
- 创建用户
- 修改密码
- 删除用户
- 权限管理
- 查看权限
- 创建权限
- 修改权限
- 删除权限
基本概念
我们经常遇到用户权限的一些问题,如“你无权创建文件”等等。类似地,在数据库中每个用户都有一定的权限,例如用户A只能查看A数据库,用户B1只能查看B数据库的B1表等
- 在MySQL中,root账户为超级管理员账户,负责权限管理
- 用户权限管理需要在mysql数据库中进行相关操作
权限管理
用户管理
查看用户
show databases; -- 查看所有数据库
use mysql; -- 使用mysql数据库
show tables; -- 展示当前数据库下的表
desc user; -- 描述user表结构
select * from user \G; -- 查看user表的详细信息,并以列的形式展示
select user,host,authentication_string from user;
查看用户名、端口号和密码
select user(); -- 查看当前用户
创建用户
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; -- 查看数据库的所有权限
desc tables_priv; -- 查看当前用户的表权限
show grants; -- 查看当前账户的权限
show grants for <用户名>@<主机地址>;
-- 查看指定账户的权限,USAGE标识无权限,本地地址无需添加@字段
创建权限
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 <用户名>@<主机地址>;
-- 收回用户所有权限(权限修改后会叠加,因此赋予新权限时最好清空原有权限后再赋予)