Чи є спосіб дізнатись своє поточне ім’я користувача в mysql?


90

Я хотів би знати, чи є спосіб для запиту mysql повернути ім’я користувача того, хто видає запит.

Чи можливо це?

Відповіді:


80

Спробуйте 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, він не запитував про відмінності цих двох тверджень. і немає нічого, щоб додати нового до існуючого відповіді, викликати його єдину відповідь, відповідаючи, це набуває впевненості у користувача, що це відповідь.
Прашантхх Кумарр,

2

Ви також можете використовувати: mysql> вибрати користувача, хоста з 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.

для напр .: SELECT CURRENT_USER();

Але CURRENT_USER()не завжди повертає зареєстрованого користувача. Тож, якщо ви хочете, щоб зареєстрований користувач увійшов, тоді використовуйте SESSION_USER()замість цього.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.