Czy istnieje sposób, aby poznać swoją aktualną nazwę użytkownika w mysql?

89

Chciałbym wiedzieć, czy istnieje sposób, aby zapytanie mysql zwróciło nazwę użytkownika, który wysyła zapytanie.

czy to możliwe?

user1090729
źródło

Odpowiedzi:

78

Wypróbuj CURRENT_USER()funkcję. Zwraca nazwę użytkownika, której MySQL użył do uwierzytelnienia połączenia klienta. To ta nazwa użytkownika określa Twoje uprawnienia.

Może się ona różnić od nazwy użytkownika wysłanej do MySQL przez klienta (na przykład MySQL może używać anonimowego konta do uwierzytelniania klienta, nawet jeśli wysłałeś nazwę użytkownika). Jeśli chcesz nazwę użytkownika, którą klient wysłał do MySQL podczas łączenia, użyj tej USER()funkcji.

Wartość wskazuje nazwę użytkownika określoną podczas łączenia się z serwerem oraz hosta klienta, z którego nawiązano połączenie. Wartość może różnić się od wartości CURRENT_USER ().

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

scotru
źródło
Dziękuję za odpowiedź, jeśli czytam to poprawnie, zaletą używania CURRENT_USER () zamiast USER () jest to, że CURRENT_USER () zwróci tylko uwierzytelnionych użytkowników?
user1090729
Zasadniczo klient może określić użytkownika, który ma być używany do uwierzytelniania - ale ten konkretny użytkownik może nie mieć nadanych praw do tabeli. Jednak dostęp może być nadal udzielany ze względu na anonimowe prawa na stole. Ta funkcja zwraca użytkownika z prawami nadania, które zostały użyte do uwierzytelnienia użytkownika (może anonimowego), a nie użytkownika określonego przez klienta. W tamtejszych dokumentach jest dobry przykład.
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
Użytkownik
15
Czy pamiętałeś SELECT w swoim zapytaniu, tj .: SELECT CURRENT_USER (); Opublikuj zapytanie.
scotru
1
Próbowałem to przetestować, ale CURRENT_USER()pytanie „Czy istnieje sposób na poznanie * Twojej * aktualnej nazwy użytkownika w mysql?” Nie jest poprawne . Odpowiedzią było „USER ()”, co oznacza „Zwraca aktualnego użytkownika MySQL” ( dev.mysql.com/doc/refman/5.7/en/… ). Powinieneś zaktualizować swoją odpowiedź, aby była bardziej kompletna, jest o wiele za krótka.
James Wilkins
87

Spróbuj też biec

SELECT USER();

lub

SELECT CURRENT_USER();

Czasami może być inaczej, USER () zwróci dane logowania, które próbujesz uwierzytelnić, a CURRENT_USER () zwróci informacje o tym, jak faktycznie pozwolono ci na uwierzytelnienie.

Petr Mensik
źródło
18

Użyj tego zapytania:

SELECT USER();

Lub

SELECT CURRENT_USER;
Mihai
źródło
3

wydrukować bieżącego użytkownika, który korzysta z bazy danych

select user();

lub

select current_user();
Prashanthhh Kumarr
źródło
3
Nie podoba mi się twoja odpowiedź, nie tylko nie dodaje ona niczego nowego do tego, na co wcześniej udzielono odpowiedzi, ale twoja odpowiedź pomija najważniejszą część: różnicę między tymi dwiema funkcjami.
Jonathan Parent Lévesque
2
W przechowywanym programie lub widoku CURRENT_USER () zwraca konto użytkownika, który zdefiniował obiekt (zgodnie z jego wartością DEFINER), chyba że zostało zdefiniowane z charakterystyką SQL SECURITY INVOKER. W drugim przypadku CURRENT_USER () zwraca wywołującego obiekt. Wyzwalacze i zdarzenia nie mają możliwości definiowania charakterystyki SQL SECURITY, więc dla tych obiektów CURRENT_USER () zwraca konto użytkownika, który zdefiniował obiekt. Aby zwrócić wywołującego, użyj USER () lub SESSION_USER (). dev.mysql.com/doc/refman/5.5/en/string-functions.html
Jonathan Parent Lévesque
nikt nie ma czasu na przeczytanie całej historii tych funkcji i nikt nie zapytał Cię o wyjaśnienie tych funkcji, główne pytanie brzmiało: jak znaleźć nazwę użytkownika w mysql, nie zapytał, czym różnią się te dwa stwierdzenia. i nie ma nic nowego do dodania do istniejącej odpowiedzi, ponieważ jest to jedyna odpowiedź, odpowiadając na nią zyskuje pewność użytkownika, że ​​to jest odpowiedź.
Prashanthhh Kumarr
2

Możesz także użyć: 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                     |
+---------------+-------------------------------+
Ashish Karpe
źródło
1

Możesz znaleźć aktualną nazwę użytkownika za pomocą funkcji CURRENT_USER () w MySQL.

dla Ex: SELECT CURRENT_USER();

Ale CURRENT_USER()nie zawsze zwraca zalogowanego użytkownika. Więc jeśli chcesz mieć zalogowanego użytkownika, użyj SESSION_USER()zamiast tego.

heisenbug47
źródło