Mysql空用户导致数据库登陆故障处理 (原创帖,转载请注明出处)

首先感谢在本次故障中阿铭对我的无私帮助,万分感谢!阿铭linux论坛:http://www.apelearn.com/study_v2/
 
问题描述:
司安全部门扫描到数据库空密码漏洞,用户名密码随便输入,或者压根不输都能进入数据库。
 
处理步骤:
 
①:查看发现my.cf中开启了 --skip-grant-table    #怀疑是之前的管理员忘记了root密码才这样弄的。
 
②:使用如下命令更改数据库密码并写入。如果你知道root密码可以省掉,因为我没有root密码所以就更改了一下。
      
1  UPDATE user SET Password = password('123456') where user = 'root'; 
2  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('123456') where user = 'root';  
④使用如下命令授权root用户权限
 mysql> grant all on *.* to 'root'@'%' identified by '123456';
⑤使用如下命令将内存信息写入文件
    
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)
   
=============================至此结束,故障处理完毕===================
 
 
 
 
阅读(117)评论(0) 编辑 |删除 |推送 |置顶
posted @ 2016-11-07 14:24  一王小可一  阅读(1209)  评论(0编辑  收藏  举报