首页 > 数据库 > MySQL > 正文

MySQL验证用户权限的方法

2024-07-24 13:08:05
字体:
来源:转载
供稿:网友
这篇文章主要介绍了MySQL验证用户权限的方法,需要的朋友可以参考下
 

知识归纳

因为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
 

  1. mysql> grant select on *.* to ''@'%' identified by '123'
  2. Query OK, 0 rows affected (0.00 sec) 
  3. mysql> grant select,createon *.* to 'bruce'@'10.20.0.232' identified by '123'
  4. Query OK, 0 rows affected (0.01 sec) 
  5. mysql> grant select,create,deleteon *.* to 'bruce'@'%' identified by'123'
  6. Query OK, 0rows affected (0.00 sec) 
?
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表