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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 知识点 因为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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
96
分享
相关文章
mysql(三)用户权限管理
为什么要设置用户权限?MySQL设置用户管理权限的主要目的是为了确保数据库的安全性和数据的机密性。以下是一些原因。
417 1
mysql(三)用户权限管理
Java 最常见的面试题:怎么验证 mysql 的索引是否满足需求?
Java 最常见的面试题:怎么验证 mysql 的索引是否满足需求?
使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试
这篇文章是作者尚雷关于使用崖山YMP迁移Oracle/MySQL至YashanDB 23.2的验证测试分享。介绍了YMP的产品信息,包括架构、版本支持等,还详细阐述了外置库部署、YMP部署、访问YMP、数据源管理、任务管理(创建任务、迁移配置、离线迁移、校验初始化、一致性校验)及MySQL迁移的全过程。
vertx 的http服务表单提交与mysql验证
本文介绍了如何使用Vert.x处理HTTP服务中的表单提交,并通过集成MySQL数据库进行验证,包括项目依赖配置、表单HTML代码和完整的Vert.x服务代码。
53 2
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驱动包资源)
403 1
PolarDB产品使用问题之要验证MySQL迁移后的数据库数据与迁移前的数据一致性,该怎么办
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
119 0
PolarDB产品使用问题之要验证MySQL迁移后的数据库数据与迁移前的数据一致性,该怎么办
MySQL 数据控制语言(DCL):管理用户权限
MySQL 是一个强大的关系型数据库管理系统,提供了丰富的功能和选项来管理数据库和用户。数据库管理员(DBA)通常使用数据控制语言(Data Control Language,简称 DCL)来管理用户的权限和访问。 本文将详细介绍 MySQL DCL 的基本概念,包括如何创建用户、授权和撤销权限等,同时提供示例代码以帮助您更好地理解。
509 2