最近把项目部署到云服务器上,为了方便访问,关闭了服务器防火墙,开启了数据库远程访问权限,但是第二天再去远程访问数据库,发现连接不上数据库,登录服务器查看,也登录不上数据库,一直提示密码错误,于是猜测数据库收到了攻击,准备跳过密码进入数据库查看一下。
先关闭mariadb
systemctl stop mariadb
好像关不掉,只能杀进程了,
查看mariadb进程
ps -ef | grep mariadb
PID(process ID):是程序被操作系统加载到内存成为进程后动态分配的资源。
PPID(parent process ID):PPID是程序的父进程号。
关闭mariadb进程
kill -9 5154
确认关闭
跳过密码进入
mysqld_safe --skip-grant-tables &
在这里直接回车,然后就可以跳过命令直接进入数据库了
mysql -u root
进入数据库之后,选择mysql库
USE mysql
修改user表中的密码(修改为root)
UPDATE user SET password=password('root') WHERE user='root';
如果是mysql 8.0的是不支持这种方法设置密码的,可以尝试如下方法;
flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
或者直接:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
flush privileges;
exit; #退出
或者:
show databases;
use mysql;
update user set authentication_string=PASSWORD("你的密码") where user='root';
update user set plugin="mysql_native_password";
flush privileges;
exit;
执行结束之后,查询user表:
SELECT password,user,host FROM user WHERE user='root';
发现表中的密码是经过加密的,用户进行登录验证的时候应该会用同样的加密算法进行加密然后跟数据库中密码比对,这就意味着普通改表语句是没法正常修改密码的,比如如下语句:
UPDATE user SET password='root' WHERE user='root';
执行完以上错误语句之后,再查询数据库,发现表中的密码并不是加密之后的,而直接显示修改后的密码,这样就会造成登录时输入密码无法匹配。
修改完密码之后,进入一个库中的表查看发现:
果然如此