ROLES_GRAPHML() în MySQL

Returnează un document XML (GraphML) cu conturile, rolurile și legăturile dintre ele.

Sintaxă
ROLES_GRAPHML()

Ce face ROLES_GRAPHML()

ROLES_GRAPHML() descrie ca graf toate conturile și rolurile de pe server: fiecare cont este un nod (<node>), iar fiecare rol acordat este o muchie (<edge>). Documentul în format GraphML poate fi deschis în programe de vizualizare a grafurilor.

Pentru a vedea conținutul, ai nevoie de dreptul ROLE_ADMIN. Fără el, funcția returnează doar un element gol: <graphml />.

Ce returnează

Un text XML (utf8mb3).

Exemple

Exemplul 1: Conturile și rolurile, citite cu ExtractValue()

Creăm un rol și un utilizator, acordăm rolul, apoi numărăm muchiile și afișăm numele nodurilor. Pe serverul tău lista de conturi va fi alta.

CREATE ROLE 'rol_cititor';
CREATE USER 'ana'@'localhost';
GRANT 'rol_cititor' TO 'ana'@'localhost';

SELECT ExtractValue(ROLES_GRAPHML(), 'count(//edge)') AS roluri_acordate,
       ExtractValue(ROLES_GRAPHML(), '//node/data') AS conturi;

DROP USER 'ana'@'localhost';
DROP ROLE 'rol_cititor';

Rezultat

+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| roluri_acordate | conturi                                                                                                                                   |
+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| 1               | `mysql.infoschema`@`localhost` `mysql.session`@`localhost` `mysql.sys`@`localhost` `root`@`localhost` `rol_cititor`@`%` `ana`@`localhost` |
+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------+

Exemplul 2: Fără dreptul ROLE_ADMIN

SELECT ROLES_GRAPHML();

Rezultat în MySQL

+---------------------------------------------------+
| ROLES_GRAPHML()                                   |
+---------------------------------------------------+
| <?xml version="1.0" encoding="UTF-8"?><graphml /> |
+---------------------------------------------------+

Greșeli frecvente

  • Crezi că nu există roluri pentru că rezultatul este <graphml />. Contul tău nu are dreptul ROLE_ADMIN.

Comenzi înrudite

  • CURRENT_ROLE(): Returnează rolurile active în sesiunea curentă, separate prin virgulă, sau NONE.
  • ExtractValue(): Extrage textul dintr-un document XML, folosind o expresie XPath (de exemplu /catalog/produs/nume).
  • CURRENT_USER(): Returnează contul MySQL cu care serverul a autentificat conexiunea; de el depind drepturile.