Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Das Gewähren von Rechten an zusätzlicher MySQL-Datenbank verursacht Probleme

MySQL identifiziert einen Benutzer SOWOHL anhand des Benutzernamens als auch des Hosts. Wenn MySQL die Authentifizierung bei der Anmeldung durchführt, sucht MySQL zuerst nach einem Hostnamen, der genau übereinstimmt. Wenn es keine exakte Übereinstimmung findet, sucht es nach einem Host, der einen Platzhalter „%“ enthält.

Als Sie GRANT ... TO [email protected] , MySQL hat einen neuen Benutzer erstellt (ohne Passwort, weil es kein IDENTIFIED BY gab in der Erklärung angegeben.

Was passierte dann, als Sie versuchten, sich als myuser anzumelden? vom localhost versuchte mysqld, einen Eintrag zu finden, der zu 'myuser'@'localhost' passte in der mysql.user-Tabelle und es hat es gefunden. Und die Sitzung hat die diesem Benutzer zugewiesenen Berechtigungen erhalten.

(Um etwas genauer zu sein, mysqld schaut nicht wirklich auf den Inhalt der mysql.user-Tabelle, sondern auf die In-Memory-Struktur, die aus der Tabelle gefüllt wurde, als sie erstellt wurde. Ein Neuaufbau der Speicherstruktur wird durch eine GRANT-, eine REVOKE- oder eine FLUSH PRIVILEGES-Anweisung ausgelöst.)

Was ist passiert, BEVOR Sie diesen neuen Benutzer hinzugefügt haben? mysqld hat nach einer genauen Übereinstimmung von Benutzer und Hostname gesucht und keine gefunden. Aber es hat einen Eintrag mit dem Platzhalter „%“ gefunden, also stimmte es damit überein, sodass die Sitzung alle Privilegien erhielt, die dem Benutzer „myuser“@„%“ gewährt wurden.

Die beiden Benutzer 'u'@'%' und 'u'@'localhost' getrennt und voneinander verschieden sind. Privilegien müssen jedem Benutzer einzeln gewährt werden. Alle Privilegien, die 'u'@'%' gewährt wurden gilt NUR für diesen Benutzer und NICHT für 'u'@'localhost' .