Есть ли способ узнать ваше текущее имя пользователя в mysql?


89

Я хотел бы знать, есть ли способ для запроса mysql вернуть имя пользователя, отправившего запрос.

Это возможно?

Ответы:


79

Попробуйте CURRENT_USER()функцию. Это возвращает имя пользователя, которое MySQL использовал для аутентификации вашего клиентского соединения. Именно это имя пользователя определяет ваши привилегии.

Это может отличаться от имени пользователя, которое было отправлено MySQL клиентом (например, MySQL может использовать анонимную учетную запись для аутентификации вашего клиента, даже если вы отправили имя пользователя). Если вам нужно имя пользователя, которое клиент отправил в MySQL при подключении, используйте USER()вместо этого функцию.

Значение указывает имя пользователя, которое вы указали при подключении к серверу, и клиентский хост, с которого вы подключились. Значение может отличаться от CURRENT_USER ().

http://dev.mysql.com/doc/refman/5.0/en/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

1
Я пробовал это для проверки и CURRENT_USER()не ответил на вопрос «Есть ли способ узнать * ваше * текущее имя пользователя в mysql?». Ответ был «USER ()», который «возвращает текущего пользователя MySQL» ( dev.mysql.com/doc/refman/5.7/en/… ). Вам следует обновить свой ответ, чтобы он был более полным, он слишком короткий.
Джеймс Уилкинс,

87

Попробуйте запустить либо

SELECT USER();

или

SELECT CURRENT_USER();

Иногда это может быть иначе, USER () вернет, какой логин вы пытались аутентифицировать, а CURRENT_USER () вернет, как вам фактически разрешили аутентифицироваться.




3

для печати текущего пользователя, который использует базу данных

select user();

или

select current_user();

3
Мне не очень нравится ваш ответ, он не только не добавляет ничего нового к тому, на что был дан ответ, но в вашем ответе отсутствует самая важная часть: разница между этими двумя функциями.
Джонатан Родитель Левеск,

2
В сохраненной программе или представлении CURRENT_USER () возвращает учетную запись для пользователя, который определил объект (как задано его значением DEFINER), если он не определен с помощью характеристики SQL SECURITY INVOKER. В последнем случае CURRENT_USER () возвращает вызывающего объекта. У триггеров и событий нет опции для определения характеристики SQL SECURITY, поэтому для этих объектов CURRENT_USER () возвращает учетную запись пользователя, который определил объект. Чтобы вернуть вызывающего, используйте USER () или SESSION_USER (). dev.mysql.com/doc/refman/5.5/en/string-functions.html
Джонатан Родитель Левеск,

ни у кого нет времени читать всю историю этих функций, и никто не спрашивал вашего объяснения об этих функциях, главный вопрос заключался в том, как найти имя пользователя в 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

Вы можете найти текущее имя пользователя с помощью функции CURRENT_USER () в MySQL.

для Ex: SELECT CURRENT_USER();

Но CURRENT_USER()не всегда вернет авторизованного пользователя. Поэтому, если вы хотите, чтобы пользователь вошел в систему, используйте SESSION_USER()вместо этого.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.