Mysql账户管理

知识点

背景

1
2
3
4
# mysql中所有的数据用户数据、权限设置都存放在mysql数据库中,其中user表中存放了用户的信息
# user表中host标识登录方式:%表示任意一个IP都可登录,localhost表示只能本地登录,具体IP值表示允许特定主机登录
use mysql;
select user, host, authentication_string from user;

创建用户并授权

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 创建用户并授权时,必须登录数据中的root账户
# 数据库名.*:表示对该数据库下所有的数据表拥有这样的权限
# 多个用户权限之间用,隔开,如select, insert
grant 权限列表 on 数据库名.* to '用户名'@'主机名' identified by '密码';
# 例如给用户wuxiang添加本地登录的访问权限,使该账户只能拥有对数据库shuai中test表的读权限
grant select on shuai.test to "wuxiang"@"主机名" identified by "密码";
# 如果要给创建的用户赋予所有的权限,则使用:all privileges
grant all privileges on shuai.test to "wuxiang"@"主机名" identified by "密码";

# 向已创建的用户追加新的权限,修改完以后需要刷新以下权限
grant 新的权限 on 数据库.* to '用户名'@'主机名' with grant option;
# 刷新权限
flush privileges;

# 查看用户的权限信息
show grants for 'test'@'localhost';

# 取消用户的某个权限
revoke select on 数据库.* from 'test'@'localhost'

# 设置用户无访问对某个数据库中数据无访问权限
GRANT USAGE ON `majiang`.`t_users` TO `test`@`localhost` WITH GRANT OPTION

修改密码

1
2
3
4
5
6
7
8
9
10
# (方法使用8.0以前的版本)修改用户密码需要root用户登录,使用的表是mysql数据库中的user表
use mysql;
update user set authentication_string=password('新密码') where user='用户名' and host='用户host';
# 修改完密码后需要刷新权限
flush privileges;

# 8.0以后版本的mysql数据库修改
use mysql
alter user 'root'@'localhost' identified with mysql_native_password by 'qwer1234';
flush privileges

远程登录

1
2
3
4
5
6
7
8
# 修改配置文件:/etc/mysql/mysql.cnf.d/mysqld.cnf,注释配置文件中的bind-addr
# 修改远程用户的登录方式为%
update user set host = '%' where user = '用户名';
# 重启mysql服务
service mysql restart

# 然后远程登录
mysql -u用户名 -p密码 -hIP地址

删除用户

1
2
3
4
5
6
7
8
# 利用drop删除(推荐),需要登录数据库root账户
drop user '用户名'@'主机';

# 利用delete删除(推荐方法失败时使用)
delete from user where user="用户名";

# 删除完毕后需要刷新全新啊
flush privileges;

更多权限管理请查看:https://www.cnblogs.com/fslnet/p/3143344.html

便于记忆:脑图