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 dinCURRENT_USER(), care poate fi altul (de exempluana@%). - 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).