mysql的user()、session_user()、system_user()、current_user() 查看当前用户

user()和system_user()相同
user(),system_user(),session_user()一般相同

mysql的user()、session_user()、system_user()、current_user() 有什么区别

在MySQL中,USER(), SESSION_USER(), SYSTEM_USER(), 和 CURRENT_USER() 这些函数通常用于获取当前MySQL会话的用户信息。尽管它们在某些情况下可能返回相同的结果,但它们之间确实存在一些细微的差别,尤其是在处理代理用户和权限时。

  1. USER() 和 SYSTEM_USER()

这两个函数是等价的,它们返回当前MySQL会话的MySQL用户名和主机名。这通常是你在登录时使用的用户名和来源主机。

例如:

SELECT USER();
-- 可能返回 'username@hostname'
  1. SESSION_USER()

这个函数也返回当前会话的用户名和主机名,与USER()SYSTEM_USER()是等价的。所以,在大多数情况下,这三个函数会返回相同的结果。

  1. CURRENT_USER()

这个函数在某些情况下与上述函数有所不同。特别是当MySQL会话使用代理用户进行连接时,CURRENT_USER()会返回代理用户的身份,而USER(), SESSION_USER(), 和 SYSTEM_USER() 会返回原始用户的身份。

代理用户是一个功能,允许一个用户(代理)以另一个用户的身份执行操作。这在某些应用场景中很有用,例如审计或权限管理。

为了更好地理解这些函数之间的区别,你可以考虑以下场景:

假设你有一个名为audit_user的用户,该用户被配置为代理,并允许以其他用户的身份执行操作。当audit_useranother_user的身份连接到MySQL并执行查询时:

  • USER(), SESSION_USER(), 和 SYSTEM_USER() 都会返回 audit_user@hostname
  • CURRENT_USER() 会返回 another_user@hostname

因此,当你需要确保获取的是当前实际执行操作的用户(而不是可能的代理用户)时,使用CURRENT_USER()是有意义的。而在其他情况下,这四个函数中的任何一个通常都可以满足需求。

测试 mysql的user()、session_user()、system_user()、current_user()

测试代码

select user(); select system_user(); select session_user(); select current_user();
SELECT user(); SELECT system_user(); SELECT session_user(); SELECT current_user();
本机
mysql> select user(); select system_user(); select session_user(); select current_user();
+------------------+
| user()           |
+------------------+
| remote@localhost |
+------------------+
1 row in set (0.00 sec)

+------------------+
| system_user()    |
+------------------+
| remote@localhost |
+------------------+
1 row in set (0.00 sec)

+------------------+
| session_user()   |
+------------------+
| remote@localhost |
+------------------+
1 row in set (0.00 sec)

+----------------+
| current_user() |
+----------------+
| remote@%       |
+----------------+
1 row in set (0.00 sec)
mysql> SELECT user(); SELECT system_user(); SELECT session_user(); SELECT current_user();
+------------------+
| user()           |
+------------------+
| remote@localhost |
+------------------+
1 row in set (0.00 sec)

+------------------+
| system_user()    |
+------------------+
| remote@localhost |
+------------------+
1 row in set (0.00 sec)

+------------------+
| session_user()   |
+------------------+
| remote@localhost |
+------------------+
1 row in set (0.00 sec)

+----------------+
| current_user() |
+----------------+
| remote@%       |
+----------------+
1 row in set (0.00 sec)

逐个输入:

mysql> SELECT USER();
+------------------+
| USER()           |
+------------------+
| remote@localhost |
+------------------+
1 row in set (0.00 sec)

mysql> SELECT SYSTEM_USER();
+------------------+
| SYSTEM_USER()    |
+------------------+
| remote@localhost |
+------------------+
1 row in set (0.00 sec)

mysql> SELECT SESSION_USER();
+------------------+
| SESSION_USER()   |
+------------------+
| remote@localhost |
+------------------+
1 row in set (0.00 sec)

mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| remote@%       |
+----------------+
1 row in set (0.01 sec)
其它机
mysql> SELECT user(); SELECT system_user(); SELECT session_user(); SELECT current_user();
+----------------+
| user()         |
+----------------+
| remote@1.0.0.1 |
+----------------+
1 row in set (0.00 sec)

+----------------+
| system_user()  |
+----------------+
| remote@1.0.0.1 |
+----------------+
1 row in set (0.00 sec)

+----------------+
| session_user() |
+----------------+
| remote@1.0.0.1 |
+----------------+
1 row in set (0.00 sec)

+----------------+
| current_user() |
+----------------+
| remote@%       |
+----------------+
1 row in set (0.00 sec)

逐个输入

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

mysql> select system_user();
+----------------+
| system_user()  |
+----------------+
| remote@1.0.0.1 |
+----------------+
1 row in set (0.00 sec)

mysql> select session_user();
+----------------+
| session_user() |
+----------------+
| remote@1.0.0.1 |
+----------------+
1 row in set (0.00 sec)

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

相关推荐

  1. 在Linux系统中,如何查看当前登录用户

    2024-03-14 15:46:01       36 阅读
  2. Ubuntu 修改当前用户名称

    2024-03-14 15:46:01       58 阅读
  3. linux查看当前连接IP

    2024-03-14 15:46:01       58 阅读
  4. [DM8] 查看当前执行查询并杀死

    2024-03-14 15:46:01       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 15:46:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 15:46:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 15:46:01       87 阅读
  4. Python语言-面向对象

    2024-03-14 15:46:01       96 阅读

热门阅读

  1. C#引用C++dll

    2024-03-14 15:46:01       37 阅读
  2. CDQ分治+树状数组,LOJ6270. 数据结构板子题

    2024-03-14 15:46:01       43 阅读
  3. SpringBoot线程池的使用和扩展

    2024-03-14 15:46:01       34 阅读
  4. 力扣80:删除排序数组中的重复项 II

    2024-03-14 15:46:01       41 阅读
  5. AI辅助研发:2024年科技与工业领域的新革命

    2024-03-14 15:46:01       44 阅读
  6. Redis的快速入门【全方位进攻】

    2024-03-14 15:46:01       44 阅读
  7. mac笔记本执行定时任务

    2024-03-14 15:46:01       53 阅读
  8. Rust 的 inline 内联编译策略

    2024-03-14 15:46:01       41 阅读
  9. Elastic script_score的使用

    2024-03-14 15:46:01       45 阅读