lukasb314
Anmeldungsdatum: 26. Oktober 2016
Beiträge: 92
|
Hallo! Habe eine frische Installation von MySQL. Nun versuche ich vergeblich, den Root-Zugang mittels Passwort zu beschränken.
Was habe ich bisher versucht? 1. Über mysqladmin -u root password xyz123
2. Über mysqladmin -u root -p password xyz123
3. Über mysql_secure_installation Die o.g. Methoden verliefen unscheinbar und ohne Fehler. Dennoch ist es mir einfach mittels mysql oder mysql -u root mich als root anzumelden. Wo liegt der Fehler? Schönen Dank.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11258
Wohnort: München
|
Wenn jemand root-Rechte erlangt hat, kann er auf der Maschine machen, was immer er will... - die primären Sicherheitsmaßnahmen sollten also darauf abzielen, dass das nicht ungewollt passiert. Die lokale Anmeldung passiert standardmäßig über einen Unix-Socket und das auth_socket Plugin (das für root kein Passwort nutzt) - wie man das ändern kann steht z.B. hier: https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/ Du musst aber aufpassen, wenn du Pakete installierst, die die MySQL-Datenbank manipulieren (z.B. UDFs, die in C/C++ implementiert wurden) - einige Postinst-Skripte gehen davon aus, dass root über den Unix-Socket Zugriff ohne Passwort hat und schlagen fehl, wenn man das ändert.
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Guck dir die User in der MySQL mal an:
select user, host, password from mysql.user; Grundsätzlich ist es kein Problem das root-Passwort auch für den Socket zu aktivieren. Du musst nur gucken, dass du für Tools wie mysqlhotcopy oder ähnliches entsprechende User hast – das ist aber nur nötig, wenn du beisielsweise Backups automatisch machst. Normalerweise sollten keine Programme oder Dienste mit dem Root-Nutzer auf die DB zugreifen können und sollen.
|
lukasb314
(Themenstarter)
Anmeldungsdatum: 26. Oktober 2016
Beiträge: 92
|
Ich glaub wir müssen bei mir weiter hinten anfangen ☺ Der Ubuntu-User "root" hat ja mit dem MySQL-User "root" nichts gemein, oder? Warum ist es mir als Ubuntu-root nun möglich, mich über bei MySQL ohne Passwort als root anzumelden? Und umgekehrt - warum ist es mir als Ubuntu-Standard-Benutzer nicht möglich, mich bei MySQL als root anzumelden. (In diesem Fall kommt eine Passwortabfrage, wobei ich das Passwort scheinbar nicht habe).
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
lukasb314 schrieb: Der Ubuntu-User "root" hat ja mit dem MySQL-User "root" nichts gemein, oder?
Korrekt.
Warum ist es mir als Ubuntu-root nun möglich, mich über bei MySQL ohne Passwort als root anzumelden?
Vermutlich ist kein Passwort gesetzt. Das wüssten wir genau, wenn du uns mal das Ergebnis der von mir geschriebenen Abfrage posten würdest.
Und umgekehrt - warum ist es mir als Ubuntu-Standard-Benutzer nicht möglich, mich bei MySQL als root anzumelden. (In diesem Fall kommt eine Passwortabfrage, wobei ich das Passwort scheinbar nicht habe).
Wenn kein Root-Passwort für MySQL gesetzt ist, prüft MySQL, ob der Unix-User gleich dem MySQL-User ist, und verweigert ggf. die Verbindung.
|
lukasb314
(Themenstarter)
Anmeldungsdatum: 26. Oktober 2016
Beiträge: 92
|
misterunknown schrieb: lukasb314 schrieb: Und umgekehrt - warum ist es mir als Ubuntu-Standard-Benutzer nicht möglich, mich bei MySQL als root anzumelden. (In diesem Fall kommt eine Passwortabfrage, wobei ich das Passwort scheinbar nicht habe).
Wenn kein Root-Passwort für MySQL gesetzt ist, prüft MySQL, ob der Unix-User gleich dem MySQL-User ist, und verweigert ggf. die Verbindung.
Das klingt plausibel - danach schaut's auch aus. misterunknown schrieb: lukasb314 schrieb: Warum ist es mir als Ubuntu-root nun möglich, mich über bei MySQL ohne Passwort als root anzumelden?
Vermutlich ist kein Passwort gesetzt. Das wüssten wir genau, wenn du uns mal das Ergebnis der von mir geschriebenen Abfrage posten würdest.
Sorry, anbei die Abfrage: mysql> select user, host, password from mysql.user;
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
mysql> select user, host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| owncloud | localhost |
| root | localhost |
+------------------+-----------+
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
lukasb314 schrieb: Sorry, anbei die Abfrage:
mysql> select user, host, password from mysql.user;
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
Das ist ein sehr schlechtes Zeichen. Was sagt denn
mysql> explain mysql.user;
Wenn die Passwort-Spalte in der User-Tabelle nicht existiert, ist irgendetwas extrem schiefgegangen.
|
Hoerbert
Anmeldungsdatum: 3. Oktober 2007
Beiträge: 375
|
misterunknown schrieb: lukasb314 schrieb: Sorry, anbei die Abfrage:
mysql> select user, host, password from mysql.user;
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
Das ist ein sehr schlechtes Zeichen. [...]
Nein, ist es nicht. Ab MySQL 5.7 (welches in Unbuntu 18.04 standardmäßig verwendet wird) gibt es die Spalte nicht mehr. Die heißt jetzt authentication_string . Außerdem ist tatsächlich auch wichtig, welches Authentifizierungs-Plugin für den root-Benutzer verwendet wird. Das ist in Ubuntu 18.04 standardmäßig auth_socket , was genau zu dem hier beschriebenen Effekt passt: Ubuntu-root kann sich ohne Passwort als MySQL-root anmelden, jeder andere Ubuntu-Benutzer kann sich gar nicht als MySQL-root anmelden, außer er verwendet sudo für den mysql -Programmaufruf. Deshalb:
| select user, host, plugin, authentication_string from mysql.user;
|
Weiteres findest du auch im MySQL-Wiki-Artikel, vor allem im Abschnitt Besonderheiten-beim-root-Passwort. Gruß Torben
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Hoerbert schrieb: Nein, ist es nicht. Ab MySQL 5.7 (welches in Unbuntu 18.04 standardmäßig verwendet wird) gibt es die Spalte nicht mehr. Die heißt jetzt authentication_string .
In der Tat. Das hab ich unter Debian mit MySQL 5.6 nicht gesehen, und auch meine MariaDB-Instanzen (Versionen 10.1 und 10.2) nutzen nach wie vor die password-Spalte.
|
lukasb314
(Themenstarter)
Anmeldungsdatum: 26. Oktober 2016
Beiträge: 92
|
Ah, ich danke euch vielmals! Alles klar soweit. Hier der Vollständigkeit halber noch: mysql> select user, host, plugin, authentication_string from mysql.user;
+------------------+-----------+-----------------------+-------------------------------------------+
| user | host | plugin | authentication_string |
+------------------+-----------+-----------------------+-------------------------------------------+
| root | localhost | auth_socket | |
| mysql.session | localhost | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | mysql_native_password | *50C5A6257BCCDEDDAA0B86E359C2A28D4BDE1D4C |
| owncloud | localhost | mysql_native_password | *5AACFA4D99801E5AB8017CEF1D7888C95C17585F |
+------------------+-----------+-----------------------+-------------------------------------------+
|
Hoerbert
Anmeldungsdatum: 3. Oktober 2007
Beiträge: 375
|
OK, dann ist das Verhalten so wie du es erlebst tatsächlich so gewollt. Wenn du das ändern möchtest: Siehe Wiki-Artikel 😉 Gruß Torben
|
Krischu
Anmeldungsdatum: 5. März 2015
Beiträge: 146
|
|