[OpenStack]Mysql中空用户名的问题

今天在部署openstack(nova,keystone,glance,cinder)的时候遇到了一个奇怪的问题。问题表现为一下特征:

          成功建立了nova,keystone,glance,cinder数据库,但是数据库中没有表


后来查到问题的关键在于用nova,keystone,glance,cinder用户登录mysql的时候报错

         Access denied for user 'xxx'@'$hostname'


最后定位在mysql 5.0.95 版本在执行默认安装后,会创建两个空用户

用root用户登录后

mysql -uroot -p

执行

select user,host from mysql.user

[OpenStack]Mysql中空用户名的问题_第1张图片

这两个用户名为空的用户为导致在登陆时,以任意用户名和空密码都可以在localhost和$hostname 登陆mysql

mysql -utesttttt -p
[OpenStack]Mysql中空用户名的问题_第2张图片


Mysql登陆验证机制:

Mysql在做登陆验证的时候,首先会匹配host,在相同host的情况下,再匹配用户名,如果该host中存在空用户,则会匹配空用户。

不同host会优先匹配更精确的host。

所以在用nova,keystone,glance,cinder用户登录mysql时,使用的密码为xxx.conf 里面配置的密码,与空密码不匹配,因此不能正常登陆。


解决办法:

删除mysql.user表的空用户


后续:

在mysql 5.5.44版本中mysql.user表不存在空用户的问题。

[OpenStack]Mysql中空用户名的问题_第3张图片










你可能感兴趣的:([OpenStack]Mysql中空用户名的问题)