Du kommst hier nicht rein. Oder: Wie authentifiziere ich MySQL User über das Betriebssystem
Mach Du das mal….
Ab und zu wäre es schön, den Authentifizierungsprozess dem Betriebssystem zu überlassen. Anstatt das Password eines Users oder einer Applikation in der Datenbank zu speichern, reicht uns als Legitimation die Tatsache aus, dass der User oder die Applikationen den Verbindungsaufbau als bestimmter Betriebssystem-User durchführt. Dies kann bei MySQL durchaus realisiert werden. Voraussetzung hierfür ist, dass der OS-User und die Datenbank auf dem gleichen System (also localhost) arbeiten müssen. Dies ist aber z.B. bei LAMP-Architekturen (LAMP= Linux + Apache + MySQL + PHP) oftmals der Fall. In unserem einfachen Beispiel läuft eine MySQL DB unter dem OS-User „mysql":
bash> ps -ef | grep mysql | grep db01 mysql 12702 12510 2 15:54 pts/3 00:00:22 ./bin/mysqld --datadir=/mysql/db01 --user=mysql --server-id=1
Die Datenbank verfügt über einen Applikations-User namens ‚ordix', der sich von „localhost" mit seinem Passwort authentifizieren darf:
mysql> select user, host, plugin from user where user = 'ordix'; +-------+-----------+-----------------------+ | user | host | plugin | +-------+-----------+-----------------------+ | ordix | localhost | caching_sha2_password | +-------+-----------+-----------------------+ 1 row in set (0,00 sec)
Du kannst Dich gerne auf den Socket stellen
Unser Wunsch ist es jedoch, dass sich dieser User ab sofort über das OS authentifiziert. Dazu muss beim Start des Servers ein Authentifizierungs-Plugin geladen werden:
bash> ps -ef | grep mysql | grep db01 mysql 12702 12510 2 15:54 pts/3 00:00:22 ./bin/mysqld --datadir=/mysql/db01 --user=mysql --server-id=1 --plugin-load=auth_socket.so
Die Aktivierung des Plugins erfolgt dann per Kommando online:
mysql> INSTALL PLUGIN auth_socket SONAME 'auth_socket.so'; mysql> select plugin_name, plugin_status from information_schema.plugins where plugin_name like '%socket%'; +-------------+---------------+ plugin_name | plugin_status | +-------------+---------------+ | auth_socket | ACTIVE | +-------------+---------------+ 1 row in set (0,01 sec)
Im Anschluss an die Aktivierung kann nun der User ‚ordix'@‚localhost' auf die Betriebssystem-Authentifizierung umgestellt werden:
mysql> alter user 'ordix'@'localhost' identified with auth_socket; Query OK, 0 rows affected (0,00 sec)
Vertrauen ist gut, Kontrolle ist besser
Abschließend testen wir den Zugriff als Betriebssystem-User ‚ordix':
bash> su - ordix bash> id uid=1000(ordix) gid=1000(ordix) Gruppen=1000(ordix) … bash> mysql -uordix Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 14 Server version: 8.0.16 MySQL Community Server - GPL mysql> status mysql Ver 8.0.11 for el7 on x86_64 (MySQL Community Server - GPL) … Connection id: 14 Current database: Current user: ordix@localhost … Threads: 3 Questions: 80 Slow queries: 0 Opens: 212 Flush tables: 3 Open tables: 116 Queries per second avg: 0.055
Fazit
Die Authentifizierung über den OS-User ist bei MySQL kein Hexenwerk und in einigen Fällen sicherlich nützlich. Vielen sind jedoch die unterschiedlichen Authentifizierungs-Plugins nicht bekannt. Ein Blick in die MySQL Dokumentation kann hier zur Aufklärung beitragen: https://dev.mysql.com/doc/refman/8.0/en/authentication-plugins.html
Seminarempfehlungen
Wenn Sie Fragen zu MySQL im Allgemeinen oder zum Themenbereich Sicherheit im Speziellen haben, dann wenden Sie sich gerne an uns oder besuchen Sie einen unserer Kurse.
Zu unseren MySQL Seminaren Zu unseren IT-Security Seminaren
Principal Consultant bei ORDIX
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare