MySQL 5.6不删空用户的影响

问题

MySQL5.6 新建本地可以登录的用户,但在本地始终登录不上,不存在的用户却能登录成功

mysql -uroot -p1234 -S /data/mysql/33562/mysql.sock -e "select version()"

mysql: [Warning] Using a password on the command line interface can be insecure.

+-----------+

| version() |

+-----------+

| 5.6.39 |

+-----------+

创建了admin@'%' 用户,但在本地无法登陆,但可以远程登陆

sselect user,host,password from mysql.user;

+--------+-----------+-------------------------------------------+

| user | host | password |

+--------+-----------+-------------------------------------------+

| root | localhost | *A4B6157319038724E3560894F7F932C8886EBFCF |

| root | slave58 | |

| root | 127.0.0.1 | |

| root | ::1 | |

| | localhost | |

| | slave58 | |

| admin | % | *4ACFE3202A5FF5CF467898FC58AAB1D615029441 |

| zabbix | 127.0.0.1 | *DEEF4D7D88CD046ECA02A80393B7780A63E7E789 |

| super | 127.0.0.1 | *F85A86E6F55A370C1A115F696A9AD71A7869DB81 |

| super | slave58 | *F85A86E6F55A370C1A115F696A9AD71A7869DB81 |

+--------+-----------+-------------------------------------------+

show grants for 'admin'@'%';

+---------------------------------------------------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY PASSWORD '*4ACFE3202A5FF5CF467898FC58AAB1D615029441' |

+---------------------------------------------------------------------------------------------------------------+

select password('admin');

+-------------------------------------------+

| password('admin') |

+-------------------------------------------+

| *4ACFE3202A5FF5CF467898FC58AAB1D615029441 |

+-------------------------------------------+

以ip地址无法登陆

mysql -uadmin -padmin -P33562 -h10.186.30.58

mysql: [Warning] Using a password on the command line interface can be insecure.

ERROR 1045 (28000): Access denied for user 'admin'@'slave58' (using password: YES)

以socket也无法登陆

mysql -uadmin -padmin -P33562 -S /data/mysql/33562/mysql.sock

或者

mysql -uadmin -padmin -P33562 -h127.0.0.1

mysql: [Warning] Using a password on the command line interface can be insecure.

ERROR 1045 (28000): Access denied for user 'admin'@'localhost' (using password: YES)

不存在的用户却可以登录成功

mysql -utest -S /data/mysql/33562/mysql.sock

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 15

Server version: 5.6.39 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

分析

1、本是以ip地址进行登录的,错误信息报的是Access denied for user 'admin'@'slave58',自动进行了DNS解析,解析成了主机名,skip-name-resolve 可以禁用DNS解析

2、mysql在验证权限的时候,先验证host,在验证user,最后验证password,即

host->user->password

3、以host或者socket登陆,进行了DNS解析,host;socket被解析成了slave58;localhost, 而mysql.user 中host 为localhost和slave58 对应空用户,就报了访问拒绝错误

测试

启动mysqld时没有加上--skip-name-resolve

以mysql不存在的用户进行登录

mysql -utest -P33562 -h`hostname`

或者

mysql -utest -S /data/mysql/33562/mysql.sock

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.6.39 MySQL Community Server (GPL)

.....

show grants;

+------------------------------------+

| Grants for @slave58 |

+------------------------------------+

| GRANT USAGE ON *.* TO ''@'slave58' |

+------------------------------------+

show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| test |

+--------------------+

create table test.test_t1(id int);

Query OK, 0 rows affected (0.05 sec)

drop table test.test_t1;

Query OK, 0 rows affected (0.05 sec)

drop database test;

Query OK, 8 rows affected (0.49 sec)

具有USAGE 的权限的用户 有test 库的所有权限和information_schema 中表的select权限。

不存在的用户还可以 drop datase test 这个“神操作”是因为 空用户具有test和test_*库的所有权限,而任何用户都能匹配空用户,mysql5.6初始化后默认就有这个,而mysql5.7默认没有,也没有空用户,空密码用户

select * from mysql.db;

以mysql.user中存在的用户登录如 “问题” 中所示,无法登录

在mysql.user 中存在的用户还不能登录,任意一个不存在的用户还可以登录成功 ,还可以drop database test,这有很大的安全隐患!开始怀疑,这mysql5.6是不是假的o_o

启动mysqld时加上--skip-name-resolve

ps -ef | grep -w 33562 | grep -v grep | awk '{print $2}' | xargs -l kill

su - mysql -c "/usr/local/mysql/5.6.39/bin/mysqld --no-defaults --basedir=/usr/local/mysql/5.6.39 --datadir=/data/mysql/33562 --pid-file=/data/mysql/33562/clone.pid --port=33562 --server-id=33562 --socket=/data/mysql/33562/mysql.sock --tmpdir=/data/mysql/33562 --skip-name-resolve &"

以mysql.user中不存在的用户进行登录

mysql -utest -P33562 -h`hostname`

ERROR 1045 (28000): Access denied for user 'test'@'10.186.30.58' (using password: NO)

mysql -utest -S /data/mysql/33562/mysql.sock

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 9

Server version: 5.6.39 MySQL Community Server (GPL)

以`hostname`登录,host 转化成ip地址,在mysql.user中没有匹配到;

以socket登录 host 被转化成localhost,在mysql.user中匹配到了''@'localost'空用户,登录成功。可见,任意用户都能匹配mysql.user的user为空' '的用户

以mysql.user中存在的用户可以登录成功

mysql -uadmin -padmin -P33562 -h10.186.30.58

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.6.39 MySQL Community Server (GPL)

结论

1、在没有以 skip-name-resolve 启动启动的情况下,以mysql -uuser -ppassword登录会进行DNS解析,在mysql.user中匹配到错误的 host,即时没有限制主机的用户 ‘user’@'%'也无法登录

2、即时一个并不存在的用户在以`hostname` 或者socket进行登录,若匹配了mysql.user中的host,该host对应的user和password为空,并不存在的用户也能登录成功

3、为了避免进行DNS解析,在my.cnf配置文件中添加skip-name-resolve

4、在刚初始化mysql5.6后,就应该删除mysql.user; mysql.db中空用户,空密码账户(包括root空秘密账户),减少安全隐患

DELETE FROM mysql.user WHERE PASSWORD=' ';

DELETE FROM mysql.db WHERE USER=' '; FLUSH PRIVILEGES;

5、可用mysql5.6 自带mysql_secure_installation 脚本删除空用户,空密码账户,删除test库

mysql 5.6 没死_MySQL 5.6不删空用户的影响相关推荐

  1. mysql pdo 插入没效果_MySQL分库分表后用PHP如何来完美操作

    当单表达到几千万时,查询一次要很久,如果有联合查询,有可能会死在那 分库分表主要就是解决这个问题,减小数据库的负担,缩短查询时间分库 1)按功能分 用户类库.商品类库.订单类库.日志类.统计类库... ...

  2. mysql set names没反应_MYSQL使用的时候遇到的一些问题

    1.  之前使用的时候遇到编码有问题.在MYSQL的命令行里输入了status结果显示如下: Server characterset:latin1 Db     characterset:utf8 C ...

  3. mysql安装教程 没配置_MySQL安装和配置详细教程

    前言 本教程是针对数据库小白安装Mysql 的step by step的步骤图.安装完成,可以通过Mysql Workbench来对Mysql 进行图形化界面的操作 1. 软件安装包下载 进入官方:h ...

  4. MySQL外键没作用_MySQL 外键索引不生效

    mysql> set default_storage_engine="InnoDB"->; Query OK,0 rows affected (0.00 sec) my ...

  5. mysql中输入没反应_mysql数据库插入无反应问题

    情景再现: 页面点击插入数据操作无反应 问题追溯: 查看日志,sql执行语句输出,sql语句无错,报异常Lock wait timeout exceeded; try restarting trans ...

  6. mysql怎么做排名并列_MySQL实现排名并查询指定用户排名功能,并列排名功能

    MySQL实现排名并查询指定用户排名功能,并列排名功能 表结构: CREATE TABLE test.testsort ( id int(11) NOT NULL AUTO_INCREMENT, ui ...

  7. mysql重装时没有权限_MySQL系列--1.安装卸载与用户权限管理

    MySQL安装 1.Ubuntu18下安装MySQL sudo apt-get install mysql-server MySQL的版本为5.7.25 2.登录MySQL 采用mysql-serve ...

  8. mysql查询不到邮件_mysql – sql查询通过电子邮件获取用户列表

    我的示例数据如下所示,我的问题是如何根据提供的输入电子邮件查找朋友的电子邮件 | users | | user_id | email | |---------|-------------------- ...

  9. mysql长时间后断开_mysql 长时间没连接了 就会自动断开服务

    这是因为mysql 长时间没连接了 就会自动断开服务. 解决办法 1.首先,下载必须的jar包 dbcp 包,目前版本是1.2.1:http://jakarta.apache.org/commons/ ...

最新文章

  1. js中变量和jsp中java代码中变量互相访问解决方案
  2. 推荐几个配色和图标网站
  3. 1074. 元素和为目标值的子矩阵数量
  4. 计算机教学怎么为护士服务卫校,【计算机教学论文】中专卫生学校计算机教学论文(共1480字)...
  5. Eclipse引用的jar有对应的工程,「Maven依存关系」中显示对应的工程
  6. 拓端tecdat|R语言Black Scholes和Cox-Ross-Rubinstein期权定价模型案例
  7. 手机 物理分辨率 逻辑分辨率
  8. Win10在使用setuna2时,启动截屏后屏幕会放大的问题
  9. java动态数组大总结
  10. AI+IoT行业“飞轮效应”凸显,全球云服务能力将发挥关键作用
  11. MSP430单片机,大学的回忆
  12. C++入门(4)讲几道例题
  13. Android Exif 解析
  14. 梦工厂将在红帽峰会畅谈云计算心得
  15. 为什么我们求职 找工作 一定要写好简历?
  16. 线性回归、逻辑回归学习笔记
  17. CF1635E Cars
  18. 联盟服务器维护,英雄联盟维护时间 lol官网服务器维护公告
  19. erp系统设计与开发:独自一人开发一整套erp系统是什么水平?
  20. 霍尔效应传感器的5个重要应用

热门文章

  1. 页面文字请使用css进行控制,css控制页面文字不能被选中user-select:none;
  2. 【rabbitmq安装教程】centos7下安装rabbitMQ
  3. springboot 接口文档 请求 enum_Spring Boot集成SpringFox 3:生成Swagger接口文档
  4. android studio开关控件,Android studio实现滑动开关
  5. java t9 字母组合_太赞了!美团T9终于整理出Java架构之完美设计实战开源文档
  6. oracle as sydba,Oracle数据库之SQL*Plus工具使用 sqlplus / as sysdba登录
  7. mysql c接口返回自增id_详解mysql插入数据后返回自增ID的七种方法
  8. python netsnmp_在Ubuntu18.04中关于Python使用netsnmp进行snmp编程
  9. 南工院C语言试卷答案,南工院11-12-1C期末B试卷 附答案.doc
  10. python中metaclass的理解