和Linux 系统一样,也有着自己独有的用户管理系统,MySQL所有的用户信息都被保存在mysql数据库中的user表中。
目录
1、用户信息
2、用户管理
(1) 创建用户
(2) 删除用户
(3) 修改用户密码
3、用户权限管理
(1) 赋予权限(grant)
(2) 回收权限(revoke)
1、用户信息
要管理用户,那就需要先了解 user 表的一些字段所代表的含义,实际上我们在管理用户权限的时候,本质就是在维护 user 表。下面列举出一些常见字段
host:表示该用户可以从哪个主机登录。
- localhost :表示只能从本机登录。该用户无法远程登录。
- % :表示可以从任意主机登录
user:表示用户名。
authentication_string:表示用户登录的密码。(经过加密了)
*_priv:以 priv 结尾的字段,均代表用户所具备的权限。Y表示具备该权限,N表示不具备该权限,图中的select_priv 表示用户是否具备查询权限。
2、用户管理
(1) 创建用户
Mysql 即便是创建了普通用户,也不能访问大部分数据,因此需要给新创建的普通用户赋权,即便身处皇家,也不代表能行使皇家权利。
语法格式:
create user '用户名'@'登陆主机/ip' identified by '密码'
示例:
-- 仅允许本机登录
create user 'gzx'@'localhost' identified by '12345678';
-- 允许来自任意IP的主机登录
create user 'gzx'@'%' identified by '12345678';
注意:如果出现 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements,可以参考:修改密码策略
(2) 删除用户
语法:
-- 用户名对应user表中的字段user,主机名对应字段host
drop user '用户名'@'主机名'
示例:
drop user 'gzx'@'%';
(3) 修改用户密码
修改密码本质修改的是user表中的密码字段,注意不同Mysql版本修改的字段不一样,5.6 版本设置的是password字段, 5.7版本设置的是authentication_string字段。
当前用户只能修改自己的密码,只有root用户才能修改指定用户的密码
语法:
-- 当前用户修改自己的密码
set password=password('新的密码');
-- root用户修改指定用户的密码
set password for '用户名'@'主机名'=password('新的密码');
示例:
set password for 'gzx'@'%'=password('gzx123');
3、用户权限管理
刚创建的用户没有任何权限。需要给用户授权。
(1) 赋予权限(grant)
语法:
grant 权限列表 on 库.对象名 to '用户名'@'主机名' [identified by '密码']
- 权限列表:可以给某个用户赋予指定权限或者全部权限
- all [ privileges ]:表示所有权限
- select:表示查询权限
- insert:表示插入权限
示例:
-- 仅赋予用户gzx 所有数据库和表的查询权限(赋予某一项指定权限)
grant select on *.* to 'gzx'@'%';
-- 赋予用户gzx 数据库mysql下所有表的查询权限(赋予某一个数据库的指定权限)
grant select on mysql.* to 'gzx'@'%';
-- 权限全开放(赋予所有数据库和表的全部权限)
grant all on *.* to 'gzx'@'%';
注意:每次修改权限以后,都要输入 flush privileges; 来刷新权限
(2) 回收权限(revoke)
语法:
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';
示例:
-- 回收gzx对mysql数据库的所有权限
revoke all on mysql.* from 'gzx'@'%';
-- 回收gzx对所有数据库的全部权限
revoke all on *.* from 'gzx'@'%';