首先感谢在本次故障中阿铭对我的无私帮助,万分感谢!阿铭linux论坛:http://www.apelearn.com/study_v2/
问题描述:
公司安全部门扫描到数据库空密码漏洞,用户名密码随便输入,或者压根不输都能进入数据库。
处理步骤:
①:查看发现my.cf中开启了 --skip-grant-table #怀疑是之前的管理员忘记了root密码才这样弄的。
②:使用如下命令更改数据库密码并写入。如果你知道root密码可以省掉,因为我没有root密码所以就更改了一下。
UPDATE user SET Password = password('') where user = 'root';
FLUSH privileges;
③:停止数据库,将 --skip-grant-table 注释掉,并启动数据库。
④:使用如下命令登陆数据库,但是报错。
mysql -uroot -p123456
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
⑤:使用mysql -uroot可以进入数据库,但是只能看到test这个数据,下图是我在加 --skip-grant-table 下查到的所有数据看。
+-----------------------+
| Database |
+-----------------------+
| information_schema |
| activemq |
| bjsdzx_real |
| emcc |
| estonerhr_cms |
| estonerhr_oa |
| logistic |
| logistic_shortmessage |
| mysql |
| performance_schema |
| test |
+-----------------------+
注:在加 --skip-grant-table 时使用命令 select host, user, password from mysql.user; 得到如下信息。
+-----------------------+--------+-------------------------------------------+
| host | user | password |
+-----------------------+--------+-------------------------------------------+
| % | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost.localdomain | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 127.0.0.1 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| ::1 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost | | |
| localhost.localdomain | | |
| % | server | *866D5A029D62EC05ACC4584CE50F1CD2F50E0E82 |
+-----------------------+--------+-------------------------------------------+
7 rows in set (0.00 sec)
解决步骤:铭哥给我的答案是,在mysql.user表里两个空用户,删除之后改密码然后授权就可以了。
①在开启 --skip-grant-table 参数的情况下启动数据库并使用如下命令删除mysql.user表里的空用户。
mysql> delete from mysql.user where user='';
Query OK, 2 rows affected (0.00 sec)
②使用如下命令查询mysql.user里面的内容,发现空用户已经被删除了。
mysql> select host, user, password from user\G;
+-----------------------+--------+-------------------------------------------+
| host | user | password |
+-----------------------+--------+-------------------------------------------+
| % | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost.localdomain | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 127.0.0.1 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| ::1 | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| % | server | *866D5A029D62EC05ACC4584CE50F1CD2F50E0E82 |
+-----------------------+--------+-------------------------------------------+
5 rows in set (0.00 sec)
③使用如下命令更改root密码为123456
mysql> UPDATE mysql.user SET Password = password('') where user = 'root';
④使用如下命令授权root用户权限
mysql> grant all on *.* to 'root'@'%' identified by '';
⑤使用如下命令将内存信息写入文件
mysql> flush privileges;
⑥退出登录,注释掉my.cf文件里的--skip-grant-table
⑦重启mysql服务。
验证:
①使用如下命令进入mysql
mysql>mysql -uroot -p 123456;
②使用如下命令查询所有数据库,发现都能看得见了
mysql> show databases;
+-----------------------+
| Database |
+-----------------------+
| information_schema |
| activemq |
| bjsdzx_real |
| emcc |
| estonerhr_cms |
| estonerhr_oa |
| logistic |
| logistic_shortmessage |
| mysql |
| performance_schema |
| test |
+-----------------------+
11 rows in set (0.00 sec)
=============================至此结束,故障处理完毕===================