项目场景:

登录远程 MYSQL 数据库


问题描述

登录mysql时,发现用户名输入弱命令 ‘r’ 甚至不输入就可以登录,并且查看表;

原因分析:

由于mysql用户信息存在"" 空串导致不输入账号密码也可以登录

排查过程:

登录mysql, 获得关于用户表的更多信息,可以使用下面的命令预览其列。

DESC user;

例如,要显示用户和其他信息 如账户锁定,密码到期状态,你使用以下查询:

SELECT 
    user, 
    host, 
    account_locked, 
    password_expired
FROM
    user;

或者简单查询mysql中存在哪些用户:

>mysql -u root -p
Enter password: 你的密码
mysql> use mysql;
Database changed
mysql> SELECT user FROM user;

然后执行
SELECT count(*) FROM user where user=‘’;
如果不等于0,则是存在user=''的情况


解决方案:

delete from user where user='' ;

拓展:
mysql删除用户的方法:

1、drop删除drop user XXX;

删除已存在的用户,默认删除的是’XXX’@'%‘这个用户,如果还有其他的用户如’XXX’@‘localhost’等,不会一起被删除。如果要删除’XXX’@‘localhost’,使用drop删除时需要加上host即drop
user ‘XXX’@‘localhost’。

2、delete删除delete from user where user=‘XXX’ and host=‘localhost’;

其中XXX为用户名,localhost为主机名。

区别

drop不仅会将user表中的数据删除,还会删除其他权限表的内容。而delete只删除user表中的内容,所以使用delete删除用户后需要执行FLUSH
PRIVILEGES;刷新权限,否则下次使用create语句创建用户时会报错。

更多推荐