USER() în MySQL

Returnează utilizatorul și calculatorul de pe care s-a conectat clientul, ca text „nume@gazdă”.

Sintaxă
USER()
SESSION_USER()
SYSTEM_USER()

Ce face USER()

USER() arată numele de utilizator trimis de client la conectare și gazda de pe care vine conexiunea, de exemplu ana@localhost sau ana@192.168.1.20. SESSION_USER() și SYSTEM_USER() sunt sinonime: returnează exact același lucru.

Valoarea poate fi diferită de CURRENT_USER(), care arată contul MySQL folosit efectiv pentru drepturi. Toate trei pot fi folosite ca valoare implicită pentru o coloană VARCHAR sau TEXT, scrisă între paranteze: DEFAULT (USER()).

Funcția SYSTEM_USER() nu are legătură cu dreptul SYSTEM_USER, care marchează conturile de administrare.

Ce returnează

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

Exemple

Exemplul 1: Utilizatorul conexiunii

Exemplele de pe acest site rulează pe un server de test, conectat ca root de pe același calculator.

SELECT USER(), SESSION_USER(), SYSTEM_USER();

Rezultat

+----------------+----------------+----------------+
| USER()         | SESSION_USER() | SYSTEM_USER()  |
+----------------+----------------+----------------+
| root@localhost | root@localhost | root@localhost |
+----------------+----------------+----------------+

Exemplul 2: Cine a făcut modificarea: valoare implicită pentru o coloană

CREATE TABLE jurnal (
  actiune VARCHAR(50),
  autor VARCHAR(288) DEFAULT (USER())
);

INSERT INTO jurnal (actiune) VALUES ('ștergere produs 7');
SELECT * FROM jurnal;

Rezultat

+--------------------+----------------+
| actiune            | autor          |
+--------------------+----------------+
| ștergere produs 7  | root@localhost |
+--------------------+----------------+

Exemplul 3: Numele și gazda, separat

SELECT SUBSTRING_INDEX(USER(), '@', 1) AS nume,
       SUBSTRING_INDEX(USER(), '@', -1) AS gazda;

Rezultat

+------+-----------+
| nume | gazda     |
+------+-----------+
| root | localhost |
+------+-----------+

Greșeli frecvente

  • Folosești USER() ca să verifici drepturile. Drepturile vin din contul din CURRENT_USER(), care poate fi altul (de exemplu ana@%).
  • Scrii DEFAULT USER() fără paranteze în jur. Expresiile ca valoare implicită trebuie puse între paranteze: DEFAULT (USER()).

Comenzi înrudite

  • CURRENT_USER(): Returnează contul MySQL cu care serverul a autentificat conexiunea; de el depind drepturile.
  • CURRENT_ROLE(): Returnează rolurile active în sesiunea curentă, separate prin virgulă, sau NONE.
  • CONNECTION_ID(): Returnează numărul unic al conexiunii curente (ID-ul din SHOW PROCESSLIST).