MySQL数据库密码破解

可以停止服务

5.6及之前版本

1.停服务

systemctl stop mariadb

2.启服务——mysql_safe

mysqld_safe --skip-grant-tables &
#跳过认证授权表启动MySQL服务(危险,任意地址无需用户密码验证都可以进入)
mysql
#进入数据库

3.修改密码

update mysql.user set password=password('新密码') where user='root' and host='localhost';

4.停止服务

ps -ef |grep mysqld
kill -9 [mysqld_safe的pid]
kill -9 [mysqld的pid]

5.启服务

systemctl start mariadb

5.7以及以后版本

1.mysql5.7以后的版本取消了skip-grant-tables,只能通过改配置文件实现

sed -i '/[mysqld]/a\skip-grant-tables' /etc/my.cnf
#在mysql的配置文件中的[mysqld]这一行后面追加一行skip-grant-tables

2.重启服务

systemctl restart mariadb
mysql

3.修改密码

update mysql.user set password=password('新密码') where user='root' and host='localhost';

4.改回配置文件

sed  -i 's#skip-grant-tables# #g' /etc/my.cnf
#在mysql的配置文件中的skip-grant-tables替换为空

5.重启服务

systemctl restart mariadb

不可以停止服务

1.拥有一个低权限账号A(对某个库db1拥有写权限的账号)
2.拥有操作系统root权限
3.系统root用户复制认证权限表mysql.user到A账号

cp -p mysql/user* DB1/

4.A账号登陆数据库修改db1下的user表中数据库root密码

mysql -utest -ptest123
show database;
use DB1;
show tables;
update DB1.user set password=password('Xin950512') where user='root';

5.系统root用户备份mysql.user表

tar -cf /tmp/mysql.user.tar /var/lib/mysql/mysql/user*

6.系统root用户拷贝db1.user表覆盖mysql.user表

cp -p DB1/user* mysql 

7.系统root用户向mysql发送SIGHUP信号重新加载认证授权表

ps -ef |grep mysql
kill -SIGHUP [mysqld的pid]

8.root用户测试新密码登陆

mysql -uroot -pXin950512

9.失败回滚事项——将备份的认证授权表还原,重新来过

有错请指出,不喜勿喷,不接受喷我小白,虽然这是事实,如果要喷请预约

你可能感兴趣的:(MySQL数据库密码破解)