CURRENT_USER() în MySQL

Returnează contul MySQL cu care serverul a autentificat conexiunea; de el depind drepturile.

Sintaxă
CURRENT_USER()
CURRENT_USER

Ce face CURRENT_USER()

CURRENT_USER() (se poate scrie și fără paranteze) arată contul din tabelele de drepturi care a fost folosit la autentificare, de exemplu ana@%. USER() arată ce a trimis clientul, de exemplu ana@192.168.1.20. Diferența apare când contul are în gazdă un model ca % sau când clientul a fost acceptat printr-un cont anonim.

În interiorul unei vederi sau al unei proceduri stocate definite cu SQL SECURITY DEFINER (implicit), CURRENT_USER() returnează contul celui care a creat obiectul. În triggere și evenimente este mereu creatorul; pentru utilizatorul care a pornit acțiunea folosește USER().

Ce returnează

Un text de forma nume@gazdă (setul de caractere utf8mb3).

Exemple

Exemplul 1: Contul și utilizatorul pe serverul de test

SELECT USER(), CURRENT_USER(), CURRENT_USER;

Rezultat

+----------------+----------------+----------------+
| USER()         | CURRENT_USER() | CURRENT_USER   |
+----------------+----------------+----------------+
| root@localhost | root@localhost | root@localhost |
+----------------+----------------+----------------+

Exemplul 2: Când cele două diferă

Utilizatoarea Ana se conectează de pe calculatorul 192.168.1.20, iar pe server există contul 'ana'@'%' (orice gazdă).

SELECT USER(), CURRENT_USER();

Rezultat în MySQL

+------------------+----------------+
| USER()           | CURRENT_USER() |
+------------------+----------------+
| ana@192.168.1.20 | ana@%          |
+------------------+----------------+

Exemplul 3: Folosit în comenzi de administrare

CURRENT_USER() poate înlocui numele contului în GRANT, SET PASSWORD, DROP USER și altele.

SHOW GRANTS FOR CURRENT_USER();

Rezultat în MySQL

+----------------------------------------------------------+
| Grants for ana@%                                         |
+----------------------------------------------------------+
| GRANT USAGE ON *.* TO `ana`@`%`                          |
| GRANT SELECT, INSERT, UPDATE ON `magazin`.* TO `ana`@`%` |
+----------------------------------------------------------+

Greșeli frecvente

  • Compari CURRENT_USER() cu USER() ca să verifici dacă cineva este „autentificat corect”. Diferența este normală pentru conturile cu % în gazdă.

Comenzi înrudite

  • USER(): Returnează utilizatorul și calculatorul de pe care s-a conectat clientul, ca text „nume@gazdă”.
  • CURRENT_ROLE(): Returnează rolurile active în sesiunea curentă, separate prin virgulă, sau NONE.
  • ROLES_GRAPHML(): Returnează un document XML (GraphML) cu conturile, rolurile și legăturile dintre ele.