首先还是附上openstack文档,以此作为例子讲解为什么赋权了%而却一直报权限错误!
mysql -u root -pyunjisuan
CREATE
DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
正确理解,这里对用了%则代表了所有的host都能远程访问该mysql。但是查询mysql官方文档有说明,%并不包括localhost。这样呢,因此上述,对localhost和%都进行了赋权。
接下来看下hosts文件:
vim /etc/hosts
配置好keystone.conf文件:
查看keystone日志:
tailf /var/log/keystone/keystone.log
执行同步数据库命令:
su -s /bin/sh -c "keystone-manage db_sync" keystone
日志出现了让人头大的权限错误:
这个错误估计困扰过很多安装openstack的人,至少我从openstack e版到现在juno版本,都经常会报这种无厘头错误,
显然这个一看就是权限错误,一般我会采用直接将keystone。conf的connection
= mysql://keystone:KEYSTONE_DBPASS@controller/keystone配置为
connection = mysql://keystone:KEYSTONE_DBPASS@192.168.38.100/keystone即可解决。但是实际上我们授权了%应该是所有host都应该能访问才对。那么问题出在哪里呢?
通过查询了mysql官网资料说的是配置%那么其他所有host访问都有权限,可以上述报错不就是告诉我,没有权限么。
此处多说一句,此处配置%远程其他host有权限访问,那么在mysql的配置文件中 /etc/my.cnf,也需要做一些配置,将bind_address=0.0.0.0或者直接屏蔽掉此项,更多请自行查找资料。
继续回来将如何解决上述报错问题,回过去看看/etc/hosts文件:
明明配置了controller节点了的,尝试将该项移个位置,奇迹出现:
再上述127.0.0.1 localhost后面增加controller。至于放在127.0.0.1 localhost这一行数据代表什么意思,自己百度问去。只说一句是controller是localhost的别名alias。
继续执行命令:su -s /bin/sh -c "keystone-manage db_sync” keystone
查看日志:
发现成功。其实这里的controller是localhost的别名,因为之前对localhost授权了,所以controller也即授权了。但是第一种/etc/hosts写法仅仅就是的DNS功能,所以报权限错误。
坑:此问题,困扰了好几年,最近安装juno版本时候有报错,发誓一定要解决,花了两天各种google、baidu终于解决。(原谅我小小的完美偏执综合征,不解决心理就不爽,就算能规避也还是不爽,不过最后还是解决了,给自己赞一个。)
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn