一,破解线下数据库服务器的密码
具体操作如下:
-
修改主配置文件并重启数据库服务
-
无密码登录 并修改登录密码 断开连接
-
去掉对主配置文件的修改并重启数据库服务
-
使用破解后的密码登录
1 修改主配置文件并重启数据库服务
[root@host50 ~]# vim /etc/my.cnf
[mysqld]
skip-grant-tables # 手动添加,作用连接服务不需要输入用户名和密码
[root@host50 ~]# systemctl restart mysqld # 重启数据库服务
2 无密码登陆,并修改登陆密码
[root@host50 ~]# mysql # 无密码直接登陆
mysql>use mysql; # 先进入mysql库中;主机,用户名和密码信息存放在mysql库中的user表中。
mysql> select host,user,authentication_string from mysql.user # 查看数据
库管理员root本机登录密码(密码是加密后保存的)
# 主机名 #用户名 #密码(加密的密码)
+-----------+-----------+-------------------------------------------+
| host | user | authentication_string |
+-----------+-----------+-------------------------------------------+
| localhost | root | *F19C699342FA5C91EBCF8E0182FB71470EB2AF30 |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
# Mysql服务使用自带的password()命令加密密码
# 修改管理员 root 本机登陆密码为 123qqq...A
mysql> update mysql.user set authentication_string=password("123qqq...A")
where user="root" and host="localhost"; # password("123qqq...A") 为密码加密
4 确保修改密码生效
mysql> flush privileges;
5 断开连接
mysql> exit; # 退出数据库
6 在主配置文件 my.cnf 中删除或注释掉开始添加的行
[root@host50 ~]# vim /etc/my.cnf
[mysqld]
#skip-grant-tables # 该行注释或删除
7 重启服务
[root@host50 ~]# systemctl restart mysqld
8 使用破解后的密码登陆
[root@host50 ~]# mysql -uroot -p123qqq...A
mysql>
二 线上破解密码
这种方法,不需要重启数据库服务,工作中线上服务器是不能重启的
在host50
主机上做实验,步骤如下:
-
拷贝另一台管理员
root
用户能正常登陆的数据库服务的mysql
库,覆盖本机的mysql
库。 -
查看
mysqld
服务父进程的pid
-
重新加载数据库目录下的文件
-
使用破解后的密码登陆
# 拷贝 host51 主机上的 mysql 库,覆盖本机的 mysql 库。(文件覆盖即把 host51 主机上的密码覆盖到本机,其他数据不会改变)
[root@host50 ~]# scp -r 192.168.4.51:/var/lib/mysql/mysql /var/lib/mysql/
# 用 pstree 命令查看 mysqld 服务的父进程的PID号,没有pstree命令的,安装 psmisc 软件
[root@host50 ~]# pstree -p | grep mysqld | head -1 # 查看mysqld服务的父进程
|-mysqld(1130)-+-{mysqld}(1318)
# 查看信号列表,此命令可以查看进程中的信号选项以及代码
[root@host50 ~]# kill -l #(小写L)
# 服务运行状态下 重新加载数据库目录下的文件
[root@host50 ~]# kill -SIGHUP 1130 # SIGHUP 信号可以重新加载mysqld服务的父进程,让 mysqld 服务识别数据库目录下的文件 ,1130 是父进程的 pid 号
# 登陆本机的数据库的密码,和 host51 主机上的 root 密码一样
[root@host50 ~]# mysql -uroot -pNSD2022…a
MysqL>
三 修改 root 管理员的密码
为了数据库管理员 root 用户的密码的安全,可以定期修改密码
注意:修改密码,必须要知道旧密码,才能设置新密码且要符合密码策略的要求。
方法一:登录后修改,数据库管理员连接服务后,修改自己的登录密码
[root@host50 ~]# mysql -uroot -pNSD2022…a # 登录
Mysql> alter user root@”localhost” identified by “123qqq…A”; # 修改密码
MySQL> exit;
方法二:登录前修改,登录数据库连接服务前修改密码
以下两种方式修改密码
# 命令:mysqladmin -uroot -p旧密码 password "新密码"
[root@host50 ~]# mysqladmin -uroot -p123qqq…A password "NSD2022…a" # 登录数据库前修改密码
# 隐藏旧密码和新密码,根据提示输入密码
# 命令: mysqladmin -uroot -p password
[root@host50 ~]# mysqladmin -uroot -p password
Enter password: 输入旧密码 NSD2022…a
New password: 输入新密码 123qqq…A
四,依据日志中的原始密码修改
初始密码是刚安装mysql服务时自动生成的,刚配置启动mysql服务时,可以根据原始密码进行修改密码,当修改过密码后,还会自动生成一个初始密码,忘记密码的情况下,也可以根据这个初始密码,进行修改密码
1,查看连接服务初始密码
说明:初始密码是随即生成的,每台机器都不一样
[root@host50 ~]# grep password /var/log/mysqld.log
2022-10-28T02:16:33.724854Z 1 [Note] A temporary password is generated for root@localhost: AelBFZ-eo2Qf
2,使用初始密码连接服务
说明:初始密码里会有一些特殊符号,有些符号在命令行下是有特殊功能的,为了使其成为普通字母,要用单引号将密码引起来
# 使用初始密码登录
[root@host50 ~]# mysql -uroot -p'AelBFZ-eo2Qf'
3,修改登陆密码
说明:强制修改登陆密码且密码要符合复杂度要求
# 修改密码为 123qqq...A
mysql> alter user root@"localhost" identified by "新密码";
mysql> exit; 断开连接
# 使用修改后的密码登录
[root@host50 ~]# mysql -uroot -p'123qqq...A'
mysql> show databases; # 查看已有的库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)