2 Minuten Lesezeit (457 Worte)

Kurz und gut - Episode #06 Nützliche Nutzerverwaltung: MySQL User Attribute

Ich werde in Seminaren, Workshops oder in Kundenprojekten in Sachen MySQL immer mal wieder mit Dingen konfrontiert, auf die ich ad hoc keine Antwort habe, bzw. mit denen ich noch keine Erfahrung gesammelt habe. 

Das Problem

Eigentlich handelt es sich bei der heutigen Frage um kein echtes Problem. Einem Schulungsteilnehmer ist die Spalte „user_attributes“ in der Systemtabelle „mysql.user“ aufgefallen und er hat gefragt, wozu man diese in der Praxis nutzen kann. 

Die Lösung

Die Spalte (übrigens von Datentyp „JSON“) kann verwendet werden, um Benutzerkonten näher zu kategorisieren und/oder zu beschreiben. So können weitere zusätzliche Informationen zu den Usern zentral gespeichert und natürlich auch genutzt werden.

In unserem kleinen Beispiel wollen wir zu den User-Accounts zwei zusätzliche Informationen hinterlegen:

  1. Abteilung in welcher der User arbeitet
  2. Bedeutung/Wichtigkeit des Users in der Organisation und der DB, um z. B. im Fall von Performance-Problemen bestimmte User-Accounts zu deaktivieren.
mysql> create user 'otto' identified by 'geheim' 
attribute'{"Department": "IT", "Priority": "A"}';
Query OK, 0 rows affected (0.01 sec)

mysql> create user 'lisa' identified by 'geheim' 
attribute'{"Department": "Controlling", "Priority": "A"}';
Query OK, 0 rows affected (0.01 sec)

mysql> create user 'maria' identified by 'geheim' 
attribute'{"Department": "HR", "Priority": "B"}';
Query OK, 0 rows affected (0.01 sec)

mysql> create user 'max' identified by 'geheim' 
attribute'{"Department": "IT", "Priority": "C"}';
Query OK, 0 rows affected (0.01 sec)
 

Natürlich können diese Daten auch gezielt ausgelesen werden: 

mysql> select user, user_attributes->>'$.metadata.Department' from user where user = 'lisa';
+------+-------------------------------------------+
| user | user_attributes->>'$.metadata.Department' |
+------+-------------------------------------------+
| lisa | Controlling                               |
+------+-------------------------------------------+
 

Nehmen wir mal den Fall an, dass wir die User einer bestimmten Abteilung (IT) für einige Zeit sperren wollen. Die möglichen Kommandos dafür wären die folgenden: 

mysql> update user set account_locked='Y' where user_attributes->>'$.metadata.Department' = 'IT';
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye
bash-4.4# mysql -uotto -pgeheim
ERROR 3118 (HY000): Access denied for user 'otto'@'localhost'. Account is locked.
 

Seit MySQL 8.0.22 gibt es zusätzlich im „information_schema“ eine Sicht „user_attributes“ mit den entsprechenden Informationen: 

mysql> select * from information_schema.user_attributes where attribute->>'$.Department' = 'IT';
+------+------+---------------------------------------+
| USER | HOST | ATTRIBUTE                             |
+------+------+---------------------------------------+
| max  | %    | {"Priority": "C", "Department": "IT"} |
| otto | %    | {"Priority": "A", "Department": "IT"} |
+------+------+---------------------------------------+
2 rows in set (0.00 sec)
 

Fazit

Die Spalte „user_attributes“ gibt es seit MySQL 8. Sie ist eine nützliche Erweiterung im Umfeld der Account-Verwaltung und bietet die Möglichkeit, Nutzer besser zu kategorisieren. Sicherlich gibt es da draußen viele Anwendungsfälle, wo diese JSON-Informationen nützlich sein können. Nutzen Sie bereits dieses Feature? Wenn ja, wofür? Schreiben Sie uns gerne, welches Problem Sie damit gelöst haben oder stellen Sie eine andere Frage, die wir hier diskutieren sollen. 

Principal Consultant bei ORDIX

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Montag, 27. Mai 2024

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.

Weitere Artikel in der Kategorie