项目场景:
登录远程 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语句创建用户时会报错。