低版本的MySQL数据库在安装时会创建一个用户名和密码为空的账户,也就是匿名账户。即使升级到高版本,匿名账户仍然会存在。
MySQL匿名账户
1、检查是否存在匿名账户
sql
select user,host,authentication_string from mysql.user;
查询结果中,用户名和密码为空的,就是匿名账户。
扩展:MySQL5.7版本开始,将 mysql.user 表的 password 字段换成了 authentication_string,老版本查询用户信息要用 select user,password from mysql.user;
2、检查用户权限
sql
show grants for ''@'localhost';
查询结果中,匿名用户的权限是 USAGE,是服务器管理的权限,权限很高,有风险。
扩展:解释一下查询结果中的权限是什么意思
- GRANT:修改用户权限的命令。
- USAGE:给用户的权限。
- ON:权限对哪些
数据库.表
生效,这里的*.*
意思是对所有数据库、所有表生效。 - TO:权限给那个用户,格式
'用户名'@'登录主机'
3、创建匿名账户
除了系统自带的匿名账户,我们也可以自己创建匿名账户。
sql
create user ''@'localhost';
4、使用匿名账户登录
用户名和密码留空,指定登录主机,可以登录匿名账户。
bash
mysql -u -p -hlocalhost
这是一个风险点,基线加固或者漏扫的时候都会检查出来。
5、删除匿名账户
使用root或高权限用户删除。
sql
delete from mysql.user where user='';
删除后需要 flush privileges;
刷新权限,否则还是可以登录。