CURRENT_ROLE() în MySQL

Returnează rolurile active în sesiunea curentă, separate prin virgulă, sau NONE.

Sintaxă
CURRENT_ROLE()

Ce face CURRENT_ROLE()

Un rol este un set de drepturi cu nume, care se acordă utilizatorilor (GRANT 'rol' TO 'ana'@'%'). Un rol acordat nu este activ automat: se activează cu SET ROLE sau devine activ la conectare dacă a fost setat cu SET DEFAULT ROLE.

CURRENT_ROLE() arată rolurile active acum, în formatul `rol`@`gazdă`, separate prin virgulă. Dacă niciun rol nu este activ, returnează textul NONE.

Ce returnează

Un text cu rolurile active sau NONE.

Exemple

Exemplul 1: Roluri active înainte și după SET ROLE

Creăm două roluri, le acordăm contului curent, le activăm pe rând, apoi le ștergem.

CREATE ROLE 'rol_cititor', 'rol_editor';
GRANT 'rol_cititor', 'rol_editor' TO CURRENT_USER();

SELECT CURRENT_ROLE() AS la_inceput;

SET ROLE 'rol_cititor';
SELECT CURRENT_ROLE() AS dupa_set_role;

SET ROLE ALL;
SELECT CURRENT_ROLE() AS toate_rolurile;

DROP ROLE 'rol_cititor', 'rol_editor';

Rezultat

+------------+
| la_inceput |
+------------+
| NONE       |
+------------+
+-------------------+
| dupa_set_role     |
+-------------------+
| `rol_cititor`@`%` |
+-------------------+
+------------------------------------+
| toate_rolurile                     |
+------------------------------------+
| `rol_cititor`@`%`,`rol_editor`@`%` |
+------------------------------------+

Greșeli frecvente

  • Acorzi un rol și te aștepți ca drepturile să funcționeze imediat. Rolul trebuie activat cu SET ROLE sau setat ca implicit cu SET DEFAULT ROLE ALL TO 'ana'@'%'; altfel CURRENT_ROLE() rămâne NONE.

Comenzi înrudite

  • ROLES_GRAPHML(): Returnează un document XML (GraphML) cu conturile, rolurile și legăturile dintre ele.
  • CURRENT_USER(): Returnează contul MySQL cu care serverul a autentificat conexiunea; de el depind drepturile.
  • USER(): Returnează utilizatorul și calculatorul de pe care s-a conectat clientul, ca text „nume@gazdă”.