知识归纳
因为MySQL是使用User和Host两个字段来确定用户身份的,这样就带来一个问题,就是一个客户端到底属于哪个host。
如果一个客户端同时匹配几个Host,对用户的确定将按照下面的优先级来排
当你登录mysql服务器之后,你可以使用user()和current_user()来检查你登陆的用户。
当你登录服务器并执行MySQL的命令时,系统将检查你当前的用户(current_user)是否有权限进行当前操作。
html" target="_blank">测试过程
创建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开头的数据库有权限。
以上就是MySQL验证用户权限的方法,希望对大家的学习有所启发。
X1.5.0新增 sp_auth_check($uid,$name=null,$relation='or') 功能: 用户权限验证 参数: $uid: 当前登录用户或者管理员的id $name:需要验证的规则列表,支持逗号分隔的权限规则或索引数组,默认为当前url $relation:如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有规则才能通过验证 返回: 类型
在 手摸手,带你用 vue 撸后台 系列二(登录权限篇) 这篇文章中其实已经详细介绍过了。 该项目中权限的实现方式是:通过获取当前用户的权限去比对路由表,生成当前用户具有的权限可访问的路由表,通过 router.addRoutes 动态挂载到 router 上。 但其实很多公司的业务逻辑可能不是这样的,举一个例子来说,很多公司的需求是每个页面的权限是动态配置的,不像本项目中是写死预设的。但其实原理
接口说明 验证权限 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /authcenter/api/verify/v1.0.0/checkPermissions 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN permissions strin
接口说明 验证权限 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /authcenter/api/verify/v1.0.0/checkP
在 MySQL 中,可以使用 REVOKE 语句删除某个用户的某些权限(此用户不会被删除),在一定程度上可以保证系统的安全性。例如,如果数据库管理员觉得某个用户不应该拥有 DELETE 权限,那么就可以删除 DELETE 权限。 使用 REVOKE 语句删除权限的语法格式有两种形式,如下所示: 1)第一种 删除用户某些特定的权限,语法格式如下: REVOKE priv_type [(column_
在 MySQL 中,可以通过查看 mysql.user 表中的数据记录来查看相应的用户权限,也可以使用 SHOW GRANTS 语句查询用户的权限。 mysql 数据库下的 user 表中存储着用户的基本权限,可以使用 SELECT 语句来查看。SELECT 语句的代码如下: SELECT * FROM mysql.user; 要执行该语句,必须拥有对 user 表的查询权限。 注意:新创建的用户