问题;

为什么Openstack在创建数据库时要同时赋予用户在%和localhost登陆的权限而在MySQL中的%已经包含了localhost?

要回答这个问题我们可以先看看不这样做会怎样;

openstack-db --init --service keystone --pass keystone做了三件事情:

1、mysql> CREATE DATABASE keystone;

2、mysql> GRANT ALL ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';

3、mysql> GRANT ALL ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';

我们看看不做第三步会发生什么:

mysql> create database keystone;
Query OK, 1 row affected (0.01 sec)
mysql> GRANT ALL ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,password from mysql.user;
+----------+-----------+-------------------------------------------+
| user     | host      | password                                  |
+----------+-----------+-------------------------------------------+
| root     | localhost |                                           |
| root     | db1       |                                           |
| root     | 127.0.0.1 |                                           |
|          | localhost |                                           |
|          | db1       |                                           |
| keystone | %         | *936E8F7AB2E21B47F6C9A7E5D9FE14DBA2255E5A |
+----------+-----------+-------------------------------------------+
6 rows in set (0.00 sec)

模拟登陆:

[root@db1 ~]# mysql -u keystone -pkeystone
ERROR 1045 (28000): Access denied for user 'keystone'@'localhost' (using password: YES)

被拒绝登陆了

用空密码尝试登陆:

[root@db1 ~]# mysql -u keystone
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.1.52-log Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.00 sec)

登陆成功,不过不能显示keystone数据库

那么执行第三步会怎样呢?

mysql> GRANT ALL ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';
Query OK, 0 rows affected (0.01 sec)

再次模拟登陆:

[root@db1 ~]# mysql -u keystone -pkeystone
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.1.52-log Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| keystone           |
| test               |
+--------------------+
3 rows in set (0.01 sec)

登陆成功了

分析:

执行第三步前:

mysql> select user,host,password from mysql.user;
+----------+-----------+-------------------------------------------+
| user     | host      | password                                  |
+----------+-----------+-------------------------------------------+
| root     | localhost |                                           |
| root     | db1       |                                           |
| root     | 127.0.0.1 |                                           |
|          | localhost |                                           |
|          | db1       |                                           |
| keystone | %         | *936E8F7AB2E21B47F6C9A7E5D9FE14DBA2255E5A |
+----------+-----------+-------------------------------------------+
6 rows in set (0.00 sec)

mysql -u keystone -pkeystone使用的用户是keystone@localhost,此时的权限表里并没有明确匹配这一用户的授权,于是MySQL将优先查找host='localhost,'的权限,这里匹配到了''@'localhost'密码为空,而mysql -u keystone -pkeystone提交的密码是keystone,MySQL认为密码不匹配于是拒绝登陆.而mysql -u keystone使用空密码恰好能匹配上于是反而空密码能登陆,不过由于''@'localhost'不具有keystone数据库的访问权限,所以登陆后看不到keystone库。

为了安全考虑应该移除该权限,那么openstack初始化数据库时可以不用重复授权

转载于:https://blog.51cto.com/sanyu/1306441

Openstack数据库初始化时为何要重复授权相关推荐

  1. mysql 数据库初始化失败怎么办_mysql数据库失败的解决方法

    mysql数据库失败的解决方法 发布时间:2020-11-16 10:50:01 来源:亿速云 阅读:87 作者:小新 这篇文章将为大家详细讲解有关mysql数据库失败的解决方法,小编觉得挺实用的,因 ...

  2. 运行多次mybatis逆向工程时,xml重复生成多次数据库表配置的问题

    运行多次mybatis逆向工程时,xml重复生成多次数据库表配置的问题 1.第二次运行逆向工程的工具时发现mapper目录下的xml文件里出现重复的配置,如下图 2.原因 可能你的数据库表命名格式不是 ...

  3. SpringBoot系列之数据库初始化-jpa配置方式

    上一篇博文介绍如何使用spring.datasource来实现项目启动之后的数据库初始化,本文作为数据库初始化的第二篇,将主要介绍一下,如何使用spring.jpa的配置方式来实现相同的效果 I. 项 ...

  4. Oracle数据库用户管理之二---权限授权去权(用户和角色)

                                Oracle数据库用户管理之二---权限授权去权(用户和角色) 书接上回,https://blog.csdn.net/alwaysbefine/ ...

  5. Entity Framework数据库初始化四种策略

    策略一:数据库不存在时重新创建数据库 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testC ...

  6. Spring Boot和数据库初始化

    Spring Boot是一个很好的框架,可在开发Spring应用程序时为开发人员节省大量时间和精力. 它的主要功能之一是数据库初始化. 您可以使用spring boot来初始化您的sql数据库. 我们 ...

  7. javaScript一种优化模式-初始化时分支

    初始化时分支是一种优化模式.当知道某个条件在整个程序生命周期内都不会发生改变的时候,仅对该条件测试一次是很有意义的,浏览器嗅探(功能检测)就是一个典型的例子. 在发现XMLHttprequest可作为 ...

  8. 在数据库创建时创建OMF(Oracle Managed Files,Oracle管理的文件)

    CREATE DATABASE语句可以执行与OMF相关的行为. 1.在数据库创建时指定控制文件 在数据库创建时,控制文件使用初始化参数CONTROL_FILES指定的文件来创建. 如果参数CONTRO ...

  9. 达梦数据库初始化、创建用户和修改密码

    达梦数据库初始化.创建用户和修改密码 进入数据库目录 cd /opt/dmdbms/bin/bin 初始化数据文件路径.簇大小和页大小 ./dminit path=/mnt/data EXTENT_S ...

最新文章

  1. BZOJ4890 洛谷3761:[TJOI2017]城市——题解
  2. python3最新版本-mac下安装Python3.*(最新版本)
  3. (二)操作系统设计技术知识重点笔记
  4. matlab三相异步电动机仿真,MATLAB中的三相异步电动机仿真
  5. arthas 排查内存溢出_Java 应用线上问题排查思路、常用工具小结
  6. IDEA MySql之增删改查
  7. %@include%和jsp:include的区别
  8. 线性代数的本质(干货!)
  9. main方法_十个经典的 Java main 方法面试题
  10. java的compare to(),java – compare()和compareTo()之间有什么区别?
  11. 系统架构设计师-软件水平考试(高级)-理论-项目管理
  12. JSK-61 二进制加法【大数】
  13. C++获取当前时间及计算当前时间距某个时间点的时间段
  14. libgmailer更新了,俺的下载空间又可以使用了(使用G-Share)
  15. 第十届中软杯(A2行人追踪)!!!
  16. html+css入门(参考b站黑马
  17. 金蝶osf接口开发_GitHub - terminiter/osf-openstack-training
  18. 宽带和流量是分开的吗_带宽与宽带的区别。
  19. JS中获取当前日期(年-月-日)
  20. 数据库系统概论---第五章:数据库完整性(实体、参照物、用户定义完整性 + constrain + domain + assert +tigger)

热门文章

  1. 三大运营商抢夺物联网市场 中国联通物联网连接数突破5000万
  2. javascript数据类型和常用内置对象(重要!)
  3. 针对苹果最新审核要求 为应用兼容IPv6
  4. RPC简介,及与web service的对比
  5. Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等 (转载)
  6. Tomcat 6 部署工程总结,使用JNDI数据源配置
  7. mac os 快捷键
  8. android --相机使用详解概述
  9. 线性O(N)时间复杂度求素数 , 筛法
  10. 普华永道的2011年全球信息安全调查