MySQL 8.0.22: "Veränderung ist das, was die Leute am meisten fürchten."¹
Am 19. Oktober 2020 wurde das MySQL Realase 8.0.22. veröffentlicht. Neben diversen Problembehebungen (Bug Fixes) haben es auch einige Neuerungen in das Relase geschaffft (vergl. https://mysqlrelease.com/2020/10/announcing-mysql-server-8-0-22-5-7-32-and-5-6-50/). Wir wollen uns an dieser Stelle mit der Funktion des "Read Only Schema" beschäftigen.
"ALTER", die Zeit für Veränderungen ist vorbei.
mysql> set global read_only=true; Query OK, 0 rows affected (0.00 sec)
mysql> show global variables like 'read_only'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | ON | +---------------+-------+ 1 row in set (0.02 sec)
Diese Einstellung wird beispielsweise gerne auf Replikaten (Slave-Datenbanken) genutzt, um die Replikation vor logischen Inkonsistenzen (durch schreibende Zugriffe) zu schützen. Mit dem aktuellen Release können nun auch Schreibrechte auf Schema-Ebene (Datenbank-Ebene) einfach beschränkt werden.
Dazu wurde das ALTER SCHEMA Statement um eine weitere Klausel ergänzt.
# als User 'root'@'localhost' mysql> create database ORDIX; Query OK, 1 row affected (0.00 sec) mysql> create user 'ordix'@'localhost' identified by 'geheim'; Query OK, 0 rows affected (0.02 sec) mysql> grant all on ORDIX.* to 'ordix'@'localhost'; Query OK, 0 rows affected, 1 warning (0.01 sec) # als User 'ordix'@'localhost' bash> mysql -uordix -pgeheim -DORDIX --execute="create table ORDIX.test ( id int primary key auto_increment, wert varchar(200) )"; bash> mysql -uordix -pgeheim -DORDIX --execute="insert into ORDIX.test values (null, 'Wert 1')"; bash> mysql -uordix -pgeheim -DORDIX --execute="select * from ORDIX.test"; +----+--------+ | id | wert | +----+--------+ | 1 | Wert 1 | +----+--------+ Query OK, 1 row affected (0.01 sec) # als User 'root'@'localhost' mysql> alter schema ORDIX read only = 1; Query OK, 1 row affected (0.01 sec) # als User 'ordix'@'localhost' mysql -uordix -pgeheim -DORDIX --execute="insert into ORDIX.test values (null, 'Wert 2')"; ERROR 3989 (HY000) at line 1: Schema 'ORDIX' is in read only mode.
Immer schön den Überblick behalten
mysql> select * from SCHEMATA_EXTENSIONS; +--------------+--------------------+-------------+ | CATALOG_NAME | SCHEMA_NAME | OPTIONS | +--------------+--------------------+-------------+ | def | mysql | | | def | information_schema | | | def | performance_schema | | | def | sys | | | def | ORDIX | READ ONLY=1 | +--------------+--------------------+-------------+ 5 rows in set (0.01 sec)
Fazit: Vertrauen ist gut, Kontrolle ist besser
Ein kleines aber sehr nützliches Feature, was in einigen Betriebsfällen für mehr Sicherheit und/oder Betriebsstabilität führen kann. Besonders erfreulich ist die Tatsache, dass der Schutz der Schemata für alle User (auch mit dem SUPER-Privileg; z.B.: 'root'@'localhost') gilt. Bei der globalen Einstellung "read_only=1" sind exakt diese User von dieser Einschränkung ausgenommen. Und Manchmal sind es exakt diese Accounts, die den größten Schaden verursachen ;-)
Sie haben Fragen rund um den Betrieb von MySQL? Sprechen Sie mit uns oder besuchen Sie unseren Kurs.
¹ Fjodor Michailowitsch Dostojewski (1821 - 1881)
Principal Consultant bei ORDIX
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare