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会话的用户信息。尽管它们在某些情况下可能返回相同的结果,但它们之间确实存在一些细微的差别,尤其是在处理代理用户和权限时。
- USER() 和 SYSTEM_USER():
这两个函数是等价的,它们返回当前MySQL会话的MySQL用户名和主机名。这通常是你在登录时使用的用户名和来源主机。
例如:
SELECT USER();
-- 可能返回 'username@hostname'
- SESSION_USER():
这个函数也返回当前会话的用户名和主机名,与USER()
和SYSTEM_USER()
是等价的。所以,在大多数情况下,这三个函数会返回相同的结果。
- CURRENT_USER():
这个函数在某些情况下与上述函数有所不同。特别是当MySQL会话使用代理用户进行连接时,CURRENT_USER()
会返回代理用户的身份,而USER()
, SESSION_USER()
, 和 SYSTEM_USER()
会返回原始用户的身份。
代理用户是一个功能,允许一个用户(代理)以另一个用户的身份执行操作。这在某些应用场景中很有用,例如审计或权限管理。
为了更好地理解这些函数之间的区别,你可以考虑以下场景:
假设你有一个名为audit_user
的用户,该用户被配置为代理,并允许以其他用户的身份执行操作。当audit_user
以another_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)