MYSQL-用户权限的验证过程(转)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 知识点 因为MySQL是使用User和Host两个字段来确定用户身份的,这样就带来一个问题,就是一个客户端到底属于哪个host。 如果一个客户端同时匹配几个Host,对用户的确定将按照下面的优先级来排 基本观点越精确的匹配越优先 Host列上,越是确定的Host越优先,[localhost, 192.168.1.1, wiki.yfang.cn] 优先于[192.168.%, %.yfang.cn],优先于[192.%, %.cn],优先于[%] User列上,明确的username优先于空username。
知识点
因为MySQL是使用User和Host两个字段来确定用户身份的,这样就带来一个问题,就是一个客户端到底属于哪个host。
    • 如果一个客户端同时匹配几个Host,对用户的确定将按照下面的优先级来排
      • 基本观点越精确的匹配越优先
      • Host列上,越是确定的Host越优先,[localhost, 192.168.1.1, wiki.yfang.cn] 优先于[192.168.%, %.yfang.cn],优先于[192.%, %.cn],优先于[%]
      • User列上,明确的username优先于空username。(空username匹配所有用户名,即匿名用户匹配所有用户)
      • Host列优先于User列考虑
      当你登录mysql服务器之后,你可以使用user()和current_user()来检查你登陆的用户。
      • user() 返回你连接server时候指定的用户和主机
      • current_user() 返回在mysql.user表中匹配到的用户和主机,这将确定你在数据库中的权限
      当你登录服务器并执行MySQL的命令时,系统将检查你当前的用户(current_user)是否有权限进行当前操作。
      • 首先检查user表中的全局权限,如果满足条件,则执行操作
      • 如果上面的失败,则检查mysql.db表中是否有满足条件的权限,如果满足,则执行操作
      • 如果上面的失败,则检查mysql.table_priv和mysql.columns_priv(如果是存储过程操作则检查mysql.procs_priv),如果满足,则执行操作
      • 如果以上检查均失败,则系统拒绝执行操作。
      测试过程
      创建3个用户名相同,HOST和权限都不同的USER
    • mysql> grant select on *.* to ''@'%' identified by '123';
      Query OK, 0 rows affected (0.00 sec)
      mysql> grant select,createon *.* to 'bruce'@'10.20.0.232' identified by '123';
      Query OK, 0 rows affected (0.01 sec)
      mysql> grant select,create,deleteon *.* to 'bruce'@'%' identified by'123';
      Query OK, 0rows affected (0.00 sec)

      从另外一个机器登陆过来

    • 复制代码
      [root@brucetest7 ~]# mysql -ubruce -p -h10.20.0.231
      Enter password: 
      Welcome to the MariaDB monitor.  Commands end with ; or \g.
      Your MySQL connection id is 5
      Server version: 5.5.20-log MySQL Community Server (GPL)
      This software comes with ABSOLUTELY NO WARRANTY. This is free software,
      and you are welcome tomodify and redistribute it under the GPL v2 license
      Type 'help;' or '\h' for help. Type'\c'to clear the current inputstatement.
      MySQL [(none)]> show grants;
      +-------------------------------------------------------------------------------------------------------------------------+
      | Grants for bruce@10.20.0.232                                                                                            |
      +-------------------------------------------------------------------------------------------------------------------------+
      | GRANT SELECT, CREATEON *.* TO 'bruce'@'10.20.0.232' IDENTIFIED BY PASSWORD'*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' |
      +-------------------------------------------------------------------------------------------------------------------------+
      1 row inset (0.00 sec)
      MySQL [(none)]> select user(), current_user();
      +-------------------+-------------------+
      | user()            | current_user()    |
      +-------------------+-------------------+
      | bruce@10.20.0.232 | bruce@10.20.0.232 |
      +-------------------+-------------------+
      1 row in set (0.03 sec)
      复制代码
      明确的user,host,进行精确匹配,找到用户为 'bruce' @'10.20.0.232'
      删除掉这个用户再登陆
    • 复制代码
      mysql> delete from mysql.userwhereuser='bruce'andhost='10.20.0.232';
      Query OK, 1row affected (0.00 sec)
      mysql> flush privileges;
      Query OK, 0 rows affected (0.00 sec)
      
      [root@brucetest7 ~]# mysql -ubruce -p -h10.20.0.231
      Enter password: 
      Welcome to the MariaDB monitor.  Commands end with ; or \g.
      Your MySQL connection id is 6
      Server version: 5.5.20-log MySQL Community Server (GPL)
      This software comes with ABSOLUTELY NO WARRANTY. This is free software,
      and you are welcome tomodify and redistribute it under the GPL v2 license
      Type 'help;' or '\h' for help. Type'\c'to clear the current inputstatement.
      
      MySQL [(none)]>show grants;
      +-----------------------------------------------------------------------------------------------------------------------+
      | Grants for bruce@%                                                                                                    |
      +-----------------------------------------------------------------------------------------------------------------------+
      | GRANT SELECT, DELETE, CREATEON*.* TO 'bruce'@'%' IDENTIFIED BYPASSWORD'*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' |
      +-----------------------------------------------------------------------------------------------------------------------+
      1 row inset (0.00 sec)
      MySQL [(none)]> select user(), current_user();
      +-------------------+----------------+
      | user()            | current_user() |
      +-------------------+----------------+
      | bruce@10.20.0.232 | bruce@%        |
      +-------------------+----------------+
      1 row in set (0.00 sec)
      复制代码

      此时匹配的用户是bruce@%
      然后把这个用户也删除,再登陆

    • 复制代码
      [root@brucetest7 ~]# mysql -ubruce -p -h10.20.0.231
      Enter password: 
      Welcome to the MariaDB monitor.  Commands end with ; or \g.
      Your MySQL connection id is 8
      Server version: 5.5.20-log MySQL Community Server (GPL)
      This software comes with ABSOLUTELY NO WARRANTY. This is free software,
      and you are welcome tomodify and redistribute it under the GPL v2 license
      Type 'help;' or '\h' for help. Type '\c'to clear the current inputstatement.
      MySQL [(none)]> show grants;
      +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
      | Grants for @%                                                                                                                                                                                       |
      +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
      | GRANT SELECT ON*.* TO''@'%' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257'                                                                                                    |
      | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE VIEW, SHOW VIEW, CREATEROUTINE, EVENT, TRIGGER ON `test`.* TO''@'%'    |
      | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATETEMPORARY TABLES, LOCK TABLES, CREATE VIEW, SHOW VIEW, CREATEROUTINE, EVENT, TRIGGER ON `test\_%`.* TO''@'%' |
      +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
      MySQL [(none)]> select user(), current_user();
      +-------------------+----------------+
      | user()            | current_user() |
      +-------------------+----------------+
      | bruce@10.20.0.232 | @%             |
      +-------------------+----------------+
      1 row in set (0.00 sec)
      复制代码
      此时匹配的是 '' @'%' 用户

    • 对于空用户,默认有对test或test开头的数据库有权限

http://www.cnblogs.com/zuoxingyu/p/4935428.html

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
mysql用户权限设置
mysql用户权限设置
130 1
|
4月前
|
存储 关系型数据库 MySQL
mysql(三)用户权限管理
为什么要设置用户权限?MySQL设置用户管理权限的主要目的是为了确保数据库的安全性和数据的机密性。以下是一些原因。
149 1
mysql(三)用户权限管理
|
11月前
|
SQL 关系型数据库 MySQL
Java 最常见的面试题:怎么验证 mysql 的索引是否满足需求?
Java 最常见的面试题:怎么验证 mysql 的索引是否满足需求?
|
20天前
|
关系型数据库 MySQL 数据库
MySQL用户权限管理你知道多少?
MySQL用户权限管理你知道多少?
44 0
|
4月前
|
分布式计算 关系型数据库 MySQL
Sqoop【部署 01】CentOS Linux release 7.5 安装配置 sqoop-1.4.7 解决警告并验证(附Sqoop1+Sqoop2最新版安装包+MySQL驱动包资源)
【2月更文挑战第8天】Sqoop CentOS Linux release 7.5 安装配置 sqoop-1.4.7 解决警告并验证(附Sqoop1+Sqoop2最新版安装包+MySQL驱动包资源)
186 1
|
2月前
|
存储 关系型数据库 MySQL
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之要验证MySQL迁移后的数据库数据与迁移前的数据一致性,该怎么办
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
PolarDB产品使用问题之要验证MySQL迁移后的数据库数据与迁移前的数据一致性,该怎么办
|
4月前
|
SQL 存储 关系型数据库
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!(下)
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!
666 2
|
4月前
|
SQL 关系型数据库 MySQL
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!(上)
必知的 MySQL 索引失效场景【包括实践验证】,别再踩坑了!
318 2
|
3月前
|
SQL 关系型数据库 MySQL
MySQL数据库——索引(5)-索引使用(上),验证索引效率、最左前缀法则、范围查询、索引失效情况、SQL提示
MySQL数据库——索引(5)-索引使用(上),验证索引效率、最左前缀法则、范围查询、索引失效情况、SQL提示
41 0

热门文章

最新文章