一、事件说明
网站崩溃无法登陆,一看错误是数据库root被拒绝(报错1045),之后按照网上的教程忙活半天,始终无法重设密码,就此卡住无进度。通过无密码登录的时候无意中查看了下mysql表的用户,发现已经无root用户,此时开始转变思路,创建用户,给与超级权限,重设密码。最终成功登入mysql,此时发现整个数据库表都是空的,什么内容都没有,还有多了一个readme表,事情进展到这一步,猛然意识到我这小破站数据库被黑了。
注:服务器是阿里ESC的,mysql是我自己建在服务器上的。
二、查找原因
1、数据库自建立起,一直使用root账户,并且密码过于简单(123456);
2、由于读取数据需要,数据库对外权限为%;
3、数据备份意识差,被勒索交钱归还数据。
三、处理情况
1、启动mysql的服务端
#cmd下
#停止mysql服务
net stop mysql
#启动服务端,以便客户端无密码登录
mysqld --console --skip-grant-tables --shared-memory;
2、无密码进入mysql,创建新账户,给与root级权限
#新建cmd,此窗口为mysql客户端
#1.进入mysql,输入密码的时候不需要内容,直接enter
mysql -u root -p
#2.打开mysql表及查看用户和权限
use mysql
SELECT user,host FROM mysql.user;
grant select,insert on *.* to test@'%' identified by 'test';
#3.刷新权限,创建个新用户,赋予新用户roo级权限
flush privileges;
create user 'root1'@'localhost' identified by 'mysql';
grant all on *.* to root1@'%';
flush privileges;
3、对外端口单独创建账户和权限,并且指定ip
#外网可访问mysql
create user '对外的用户名'@'localhost' identified by '密码';
grant all on *.* to root1@'%';
use mysql;
update user set host = 'ip地址' where user ='对外的用户名';
FLUSH PRIVILEGES;
#禁用或删除root用户
delete from user where user='root';
drop user 'root'@'localhost';
四、阿里云给的意见
①设置好阿里云ECS安全组,只允许指定的IP地址进行3389(远程桌面)、22(SSH)登陆,避免服务器管理端口被黑客扫描或爆破。
②在ECS安全组中,只放行必要的业务端口(比如80、443),其他无关端口不要放行。
③服务器密码设置复杂点,不要过于太简单。
④应用软件要经常更新到新版本,不要用老版本的软件。
⑤根据阿里云的云监控中心(登陆地址:https://yundun.console.aliyun.com/)提示,及时修补高危系统漏洞(注意:修补前,做好快照备份)。
⑥更多安全防护建议,请您查看文档 https://help.aliyun.com/knowledge_list/60787.html
五、其他mysql的命令
#密码置空
update mysql.user set authentication_string='' where user="root1";
#重设密码
set password for 'usexyrh'@'%'='xyrh123';
#
ALTER user 'root1'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xyrh123';
#退出
quit