这个目前应该是MySQL比较新的版本了,教程仅在Linux平台上验证通过,其他平台请自证。提供步骤和思路方便快速分析和定位问题。
一、数据库用户管理
-
创建新用户并指定密码
创建非root用户和设置密码# 用root用户登录分配jackmin用户的本地mysql账户 create user 'jackmin'@'localhost' identified with mysql_native_password by '5201314!'; flush privileges; # 刷新下,不然无法生效
-
重置用户的密码
# 用5201314!密码登录 mysql -u jackmin -p # 用root用户修改jackmin的密码 alter user 'jackmin'@'localhost' identified by '5209999!'; # 退出mysql后用旧密码登录失败,新jackmin密码5209999!登录成功 mysql -u jackmin -p use mysql; # 但提示Access denied需要配置权限,见3
-
删除该用户
drop user 'jackmin'@'localhost';
-
设置用户是否可以远程访问或指定ip访问
3.1. 用root用户查看用户和host关系
use mysql; # root用户查看jackmin用户和host关系 select user, host from user where user='jackmin'; +---------+-----------+ | user | host | +---------+-----------+ | jackmin | localhost | +---------+-----------+
3.2. 设置允许指定ip或允许远程访问(任意ip)
# 用指定ip访问 update user set host='xxx.xx.xx.x' where user='jackmin'; # 允许远程(任意ip)访问 update user set host='%' where user='jackmin';
二、用户权限分配
-
给用户分配权限(操作和资源)
1.1. 给用户仅分配 查询 操作权限,针对数据库test_db操作tbl_1表(有个数据库叫test_db由root创建,内含tbl_1和tbl_2表)
# 用root用户给jackmin分配权限 grant select on test_db.tbl_1 to 'jackmin'@'localhost'; # 如果jackmin用户可以给其他用户赋权(不超过自身拥有的权利:查询) grant select on test_db.tbl_1 to 'jackmin'@'localhost' with grant option; flush privileges; # 退出mysql尝试用jackmin登录访问test_db和tbl_1、tbl_2 # 查看权限 show grants for jackmin; use test_db; show tables; # 我们只能看到tbl_1; 而看不到 tbl_2 # 尝试查询 select * from tbl_1; # 可以 select * from tbl_2; # 不可以 # 尝试插入tbl_1 insert into tbl_1 value("2","titlename1", "username1");# INSERT command denied to user 'jackmin'@'localhost' for table 'tbl_1' # 除查询外无其他操作权限
1.2. 给用户分配所有权限,针对所有test_db数据库的所有表
# 用root用户给jackmin增加权限insert grant select, insert on test_db.tbl_1 to 'jackmin'@'localhost'; # 用root用户给jackmin增加test_db的所有表的所有权限 grant all privileges on test_db.* to 'jackmin'@'localhost'; flush privileges;
1.3. 撤销权限
# root用户撤销对某个资源的操作权限 revoke privileges on test_db.tbl_1 from 'jackmin'@'localhost'; # root用户撤销所有权限 revoke all privileges on *.* from 'jackmin'@'localhost'; # 查看用户权限或者用jackmin用户登录,权限撤销成功 show grants for jackmin;
1.4. 查看用户权限
show grants for jackmin;
三、配置用户允许远程连接
根据需求在完成理解前面步骤后,接下来需要配置允许远程连接(生产环境请通过ssh隧道方式,且mysql配置文件bind-address为特定ip或本机)
-
用户配置
首先配置用户支持远程登录,简单改user表里面的host为'%'或特定ip(生产上可通过ssh隧道,host为指定跳板机ip这样更安全,也不修改配置文件)update user set host='%' where user='jackmin';
-
mysql配置
修改mysql配置文件,注释掉bind-address或改为0.0.0.0,表示监听所有客户端连接
保存后重启mysqld服务
-
服务器配置
服务器防火墙和iptables规则允许3306端口的访问;通过查看
iptables -L
和sudo ufw allow 3306
-
云服务器安全组配置
主要是云服务器的安全组配置出入站规则,放行3306端口
最后,感谢您的阅读,由于时间仓促,文章内容难免有不妥之处,欢迎交流和指正~~
Mark一下 惟月慎行 再也不会迷路了^_^!