Mysql在进行登陆时,会去匹配mysql库中的user表,并赋予相应的权限,但是怎么知道我们当时的登陆的用户名及相应的权限呢?

在Mysql中,有两个函数,一个是user(),一个是current_user();

我们来运行一下看一下他们有什么区别:

mysql> select user();
+----------------------+ | user() | +----------------------+ | test@192.168.203.132 | +----------------------+ 1 row in set (0.00 sec) mysql> select current_user(); +------------------+ | current_user() | +------------------+ | test@192.168.%.% | +------------------+ 1 row in set (0.00 sec)

user()是用来显示当前登陆的用户名与它对应的host,帮助文档是这样描述的:

Returns the current MySQL user name and host name as a string in the
utf8 character set.

currrent_user()是用来显示当前登陆用户对应在user表中的哪一个,帮助文档是这样描述的:

Returns the user name and host name combination for the MySQL account
that the server used to authenticate the current client. This account
determines your access privileges. The return value is a string in the
utf8 character set.

所以假如我们想知道当前登陆的用户具有什么权限的话,

第一步是找出当前登陆用户是用user表中的哪一个,用current_user()

mysql> select current_user();
+------------------+ | current_user() | +------------------+ | test@192.168.%.% | +------------------+ 1 row in set (0.00 sec)

第二步用show grants命令,如下:

mysql> show grants for 'test'@'192.168.%.%'; +--------------------------------------------------------------------------------------------------------------------------------+ | Grants for test@192.168.%.% | +--------------------------------------------------------------------------------------------------------------------------------+ | GRANT SELECT, INSERT, UPDATE ON *.* TO 'test'@'192.168.%.%' IDENTIFIED BY PASSWORD '*032197AE5731D4664921A6CCAC7CFCE6A0698693' | +--------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)

好了,那另一个问题是,如果有如下的用户名,host及权限,我在登陆时到底会是匹配到哪一个呢?

mysql> grant select on *.* to test@192.168.203.132 identified by '000000'; Query OK, 0 rows affected (0.00 sec) mysql> grant select,update on *.* to 'test'@'192.168.203.%' identified by '000000'; Query OK, 0 rows affected (0.01 sec) mysql> grant select,update,insert on *.* to 'test'@'192.168.%.%' identified by '000000'; Query OK, 0 rows affected (0.01 sec) mysql> grant select,update,insert,delete on *.* to 'test'@'192.%.%.%' identified by '000000'; Query OK, 0 rows affected (0.00 sec) mysql> grant update,insert,delete on *.* to 'test'@'%' identified by '000000'; Query OK, 0 rows affected (0.00 sec) mysql> select user,host from user order by user,host; +-------------+-----------------+ | user | host | +-------------+-----------------+ | root | localhost | | test | % | | test | 192.%.%.% | | test | 192.168.%.% | | test | 192.168.203.% | | test | 192.168.203.132 | +-------------+-----------------+

如果我用如下命令进行登陆,会匹配到user表中的哪一个?

1
[root@host2 ~]# mysql -h192.168.203.132 -utest -p

  

我们可以用上面提到的select current_user()可以清楚地查找出来

mysql> select current_user();
+----------------------+ | user() | +----------------------+ | test@192.168.203.132 | +----------------------+ 1 row in set (0.00 sec)

我们删除对应的帐户:

delete from user where user='test' and host='192.168.203.132';

再次登陆:

[root@host2 ~]# mysql -h192.168.203.132 -utest -p

此时:

mysql> select current_user();
+------------------+ | current_user() | +------------------+ | test@192.168.203.% | +------------------+ 1 row in set (0.00 sec)

继续删除

mysql> delete from user where user='test' and host='192.168.203.%';

再登陆:

mysql> select current_user();
+------------------+ | current_user() | +------------------+ | test@192.168.%.% | +------------------+ 1 row in set (0.00 sec)

以上每一次执行后用user()都可以得到相同的结果:

mysql> select user();
+----------------------+ | user() | +----------------------+ | test@192.168.203.132 | +----------------------+ 1 row in set (0.00 sec)

所以结论是:mysql在登陆时会用最精确匹配user表中的帐户,host来作为当前的用户。

转载于:https://www.cnblogs.com/crxis/p/10444398.html

mysql当前用户user()与current_user()相关推荐

  1. mysql root用户可以同时几个人连接_重学MySQL系列(四):10分钟快速掌握MySQL用户与权限管理

    在这篇文章中,我们来聊聊怎么管理MySQL的用户及如何为不同用户分配不同的管理权限,其实,在日常使用MySQL的过程中,这部分的工作是由DBA(数据管理员)来完成的. 而我们作为一般的开发人员,只要拿 ...

  2. centos 7 mysql 创建用户_【CentOS 7MySQL常用操作4】,MySQL创建用户以及授权#180116

    hellopasswd MySQL创建用户以及授权 grant all on . to 'user1' identified by 'passwd'; grant SELECT,UPDATE,INSE ...

  3. mysql pma用户_MYSQL用户权限管理学习笔记

    MYSQL用户管理 1.权限表 MYSQL是一个多用户的数据库,MYSQL的用户可以分为两大类: (1)       超级管理员用户(root),拥有全部权限 (2)       普通用户,由root ...

  4. mysql 查询用户最后登陆时间_弄懂mysql:mysql的通信协议

    我准备从mysql的实现出发,将mysql好好理解一下,从他的逻辑结构一层一层出发,感受一下,所以再学第一层之前,要先对mysql整体的逻辑结构有一个初步认识 mysql逻辑架构 整体来说,MySql ...

  5. linux ftp 团队认证,linux下ftp和ftps以及ftp基于mysql虚拟用户认证服务器的搭建

    linux下ftp和ftps以及ftp基于mysql虚拟用户认证服务器的搭建 1.FTP协议:有命令和数据连接两种 命令连接,控制连接:21/tcp 数据连接: 主动模式,运行在20/tcp端口 和 ...

  6. MySQL的用户和权限介绍

    一.关于MySQL权限的几点常识: 1.MySQL的权限系统主要用来验证用户的操作权限. 2.在MySQL内部,权限信息存放在MySQL数据库的granttable里.当mysql启动后,grantt ...

  7. [MySQL]增加用户 授权 远程登录

    mysql创建用户和授权 1.创建用户: (注意:下面的指令,请在root用户下输入) CREATE USER "用户名" IDENTIFIED BY "密码" ...

  8. php mysql用户登录_php mysql实现用户登录功能的代码示例

    接着上次的php mysql添加用户的功能代码,今天来学习下php实现用户登录与注销的功能,通过跟踪session会话来保存用户的登陆状态. 1,登录页面 login.php 用户登录_www.# 用 ...

  9. php mysql 修改密码_设置及修改MySQL root用户密码

    设置及修改MySQL root用户密码 MySQL数据库用户安全策略介绍 安装mysql数据库后,默认的管理员root密码是空,这很不安全,因此需要设置一个密码 为root设置密码 删除无用的MySQ ...

最新文章

  1. Python与redis集群进行交互操作
  2. controller调用controller的方法_SpringCloud Alibaba微服务实战三 - 服务调用
  3. 软件项目经理需具备什么样的技术水平?
  4. 数据库对象管理 (表)
  5. sqlite 的几点见解
  6. python连接access数据库odbc_对Python通过pypyodbc访问Access数据库的方法详解
  7. 通域消化内镜Android患者版,市中心医院消化内科Ⅰ病区开创超声内镜治疗新领域...
  8. iPhone 15有望配备潜望式摄像头 供应商已宣布投资建厂
  9. 企业数据可视化大屏的三大优势
  10. Sql Server函数全解一字符串函数
  11. iOS开发之iOS11、iPhone X、Xcode9 适配指南
  12. pytorch中的反卷积的output_padding参数
  13. Google GPS在Android上的一些应用
  14. 共享OrCAD9.2pSpice9.2+multisim下载地址
  15. 手机号码检测开通微信查询方法
  16. 微信分享第三方网页链接自定义标题、描述、图片
  17. 碎石生产线在丽江市的生产厂家在哪里
  18. 抖音直播伴侣显示服务器问题,抖音直播伴侣窗口怎么设置?调整窗口的方法了解一下...
  19. 哥德巴赫猜想python版
  20. 程振波 算法设计与分析_算法设计与分析

热门文章

  1. Ubuntu安装webmin
  2. 第四十章:基于SpringBoot Quartz完成定时任务分布式多节点负载持久化
  3. linux 网络管理   防火墙 iptables
  4. MDEV Primer
  5. libvirt-adabddad
  6. Laravel 5.0 的新特性
  7. 跨域请求之JSONP
  8. .Net Core中利用TPL(任务并行库)构建Pipeline处理Dataflow
  9. Spring《二》 Bean的生命周期
  10. android loadlibrary 更改libPath 路径,指定路径加载.so