有没有办法知道您当前在mysql中的用户名?


88

我想知道是否有一种方法可以使mysql查询返回发出查询的用户的用户名。

这可能吗?

Answers:


77

尝试该CURRENT_USER()功能。这将返回MySQL用来验证客户端连接的用户名。此用户名确定您的特权。

这可能与客户端发送给MySQL的用户名有所不同(例如,即使您发送了用户名,MySQL可能仍使用匿名帐户对客户端进行身份验证)。如果您想要用户名,客户端在连接时发送给MySQL,请改用该USER()函数。

该值指示您在连接到服务器时指定的用户名,以及从中连接的客户端主机。该值可以不同于CURRENT_USER()的值。

http://dev.mysql.com/doc/refman/5.0/zh-CN/information-functions.html#function_current-user


谢谢您的回答,如果我正确阅读此书,那么使用CURRENT_USER()而不是USER()的好处是CURRENT_USER()仅返回经过身份验证的用户?
user1090729

基本上,客户端可以指定用于身份验证的用户-但该特定用户可能没有表的授予权限。但是,由于表上的匿名权限,访问权限仍可能被授予。此函数以用于对用户(可能是匿名用户)而非客户端指定的用户进行身份验证的授予权限返回用户。那里的文档中有一个很好的例子。
scotru

1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_USER()' at line 1
用户

15
您还记得查询中的SELECT吗,即:SELECT CURRENT_USER(); 发表您的查询。
scotru 2015年

1
我想这是测试和CURRENT_USER()不为题正确“有没有办法知道*你*在MySQL当前用户名?”。答案是“ USER()”,它“返回当前的MySQL用户”(dev.mysql.com/doc/refman/5.7/en/…)。您应该更新答案以使其更完整,因为它太短了。
詹姆斯·威尔金斯


18

使用此查询:

SELECT USER();

要么

SELECT CURRENT_USER;


3

打印正在使用数据库的当前用户

select user();

要么

select current_user();

3
我不太喜欢您的答案,不仅它不会在以前的答案中添加任何新内容,而且您的答案缺少最重要的部分:这两个功能之间的区别。
乔纳森·父母莱维克斯

2
在存储的程序或视图中,除非使用SQL SECURITY INVOKER特性定义,否则CURRENT_USER()返回定义对象的用户的帐户(由其DEFINER值给出)。在后一种情况下,CURRENT_USER()返回对象的调用者。触发器和事件没有定义SQL SECURITY特征的选项,因此对于这些对象,CURRENT_USER()返回定义该对象的用户的帐户。要返回调用者,请使用USER()或SESSION_USER()。 dev.mysql.com/doc/refman/5.5/en/string-functions.html
Jonathan ParentLévesque'16

没有人有时间阅读这些功能的所有历史记录,也没有人问过您对这些功能的解释,主要问题是如何在mysql中查找用户名,他没有询问这两个语句的区别。并且没有什么可向现有应答器添加新内容的,而导致其成为唯一的答案,通过回答它可以使用户确信这就是答案。
Prashanthhh Kumarr

2

您还可以使用:mysql> select user,host from mysql.user;

+---------------+-------------------------------+
| user          | host                          |
+---------------+-------------------------------+
| fkernel       | %                             |
| nagios        | %                             |
| readonly      | %                             |
| replicant     | %                             |
| reporting     | %                             |
| reporting_ro  | %                             |
| nagios        | xx.xx.xx.xx                 |
| haproxy_root  | xx.xx.xx.xx
| root          | 127.0.0.1                     |
| nagios        | localhost                     |
| root          | localhost                     |
+---------------+-------------------------------+

1

您可以在MySQL中使用CURRENT_USER()函数找到当前用户名。

例如: SELECT CURRENT_USER();

但是CURRENT_USER()不会总是返回已登录的用户。因此,如果您想拥有已登录的用户,请SESSION_USER()改用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.