Gibt es eine Möglichkeit, Ihren aktuellen Benutzernamen in MySQL zu kennen?

88

Ich möchte wissen, ob es für eine MySQL-Abfrage eine Möglichkeit gibt, den Benutzernamen des Benutzers zurückzugeben, der die Abfrage ausgibt.

Ist das möglich?

user1090729
quelle

Antworten:

77

Probieren Sie die CURRENT_USER()Funktion aus. Dies gibt den Benutzernamen zurück, mit dem MySQL Ihre Clientverbindung authentifiziert hat. Dieser Benutzername bestimmt Ihre Berechtigungen.

Dies kann sich von dem Benutzernamen unterscheiden, der vom Client an MySQL gesendet wurde (z. B. verwendet MySQL möglicherweise ein anonymes Konto, um Ihren Client zu authentifizieren, obwohl Sie einen Benutzernamen gesendet haben). Wenn Sie den Benutzernamen möchten, den der Client beim Verbinden an MySQL gesendet hat, verwenden Sie USER()stattdessen die Funktion.

Der Wert gibt den Benutzernamen an, den Sie beim Herstellen einer Verbindung zum Server angegeben haben, und den Client-Host, von dem aus Sie eine Verbindung hergestellt haben. Der Wert kann sich von dem von CURRENT_USER () unterscheiden.

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

scotru
quelle
Vielen Dank für Ihre Antwort. Wenn ich dies richtig lese, besteht der Vorteil der Verwendung von CURRENT_USER () anstelle von USER () darin, dass CURRENT_USER () nur authentifizierte Benutzer zurückgibt.
user1090729
Grundsätzlich kann der Client einen Benutzer angeben, der für die Authentifizierung verwendet werden soll. Dieser bestimmte Benutzer verfügt jedoch möglicherweise nicht über Berechtigungsrechte für eine Tabelle. Aufgrund anonymer Rechte auf dem Tisch kann der Zugriff dennoch gewährt werden. Diese Funktion gibt dem Benutzer die Berechtigungsrechte zurück, die zur Authentifizierung des Benutzers verwendet wurden (möglicherweise anonym), und nicht den vom Client angegebenen Benutzer. Es gibt ein gutes Beispiel in den Dokumenten dort.
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
Benutzer
14
Haben Sie sich an das SELECT in Ihrer Abfrage erinnert, dh: SELECT CURRENT_USER (); Stellen Sie Ihre Anfrage.
Scotru
Ich habe dies zum Testen versucht und CURRENT_USER()war bei der Frage "Gibt es eine Möglichkeit, * Ihren * aktuellen Benutzernamen in MySQL zu kennen?" Nicht korrekt . Die Antwort war "USER ()", was "Gibt den aktuellen MySQL-Benutzer zurück" ( dev.mysql.com/doc/refman/5.7/en/… ). Sie sollten Ihre Antwort aktualisieren, um vollständiger zu sein. Sie ist viel zu kurz.
James Wilkins
84

Versuchen Sie entweder zu laufen

SELECT USER();

oder

SELECT CURRENT_USER();

Es kann manchmal anders sein, USER () gibt zurück, mit welchem ​​Login Sie sich authentifizieren wollten, und CURRENT_USER () gibt zurück, wie Sie sich tatsächlich authentifizieren durften.

Petr Mensik
quelle
18

Verwenden Sie diese Abfrage:

SELECT USER();

Oder

SELECT CURRENT_USER;
Mihai
quelle
3

um den aktuellen Benutzer zu drucken, der die Datenbank verwendet

select user();

oder

select current_user();
Prashanthhh Kumarr
quelle
3
Ich mag Ihre Antwort nicht sehr, sie fügt nicht nur nichts Neues zu dem hinzu, was zuvor beantwortet wurde, sondern Ihre Antwort übersieht den wichtigsten Teil: den Unterschied zwischen diesen beiden Funktionen.
Jonathan Parent Lévesque
2
Innerhalb eines gespeicherten Programms oder einer gespeicherten Ansicht gibt CURRENT_USER () das Konto für den Benutzer zurück, der das Objekt definiert hat (wie durch seinen DEFINER-Wert angegeben), sofern es nicht mit der Eigenschaft SQL SECURITY INVOKER definiert ist. Im letzteren Fall gibt CURRENT_USER () den Aufrufer des Objekts zurück. Trigger und Ereignisse haben keine Option zum Definieren des SQL SECURITY-Merkmals. Daher gibt CURRENT_USER () für diese Objekte das Konto für den Benutzer zurück, der das Objekt definiert hat. Verwenden Sie USER () oder SESSION_USER (), um den Aufrufer zurückzugeben. dev.mysql.com/doc/refman/5.5/en/string-functions.html
Jonathan Parent Lévesque
Niemand hat Zeit, den gesamten Verlauf dieser Funktionen zu lesen, und niemand hat Sie nach Ihrer Erklärung zu diesen Funktionen gefragt. Die Hauptfrage war, wie man einen Benutzernamen in MySQL findet. Er hat nicht nach den Unterschieden dieser beiden Aussagen gefragt. und es gibt nichts, was der vorhandenen Antwort neu hinzugefügt werden könnte, da dies die einzige Antwort ist, indem die Antwort darauf dem Benutzer das Vertrauen gewinnt, dass dies die Antwort ist.
Prashanthhh Kumarr
2

Sie können auch Folgendes verwenden: mysql> Benutzer auswählen, Host von 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
quelle
1

Den aktuellen Benutzernamen finden Sie mit der Funktion CURRENT_USER () in MySQL.

zum Beispiel: SELECT CURRENT_USER();

Aber CURRENT_USER()nicht immer Rückkehr der angemeldete Benutzer. Wenn Sie also den angemeldeten Benutzer haben möchten, verwenden Sie SESSION_USER()stattdessen.

heisenbug47
quelle