Ich habe die folgenden Stipendien für einen Benutzer / eine Datenbank
mysql> SHOW GRANTS FOR 'username'@'localhost';
+---------------------------------------------------------------------------+
| Grants for username@localhost |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY PASSWORD 'xxx' |
| GRANT ALL PRIVILEGES ON `userdb`.* TO 'username'@'localhost' |
+---------------------------------------------------------------------------+
Um den externen Zugriff auf die Datenbank zu ermöglichen, muss localhost auf geändert werden %
. Eine Möglichkeit, dies zu tun, besteht darin, REVOKE
alle Berechtigungen erneut festzulegen. Das Problem ist, dass es ein Passwort gibt, das ich nicht kenne. Wenn ich die Erlaubnis widerrufe, kann ich es nicht zurücksetzen.
Gibt es eine Möglichkeit, den Hostnamen localhost
in %
(und wieder zurück) zu ändern, ohne die Berechtigung selbst zu widerrufen?
mysql
.user
SETHost
= 'localhost' WOuser
.Host
= '%' UNDuser
.User
= 'XXXdbusr';Beste Antwort auf Stackoverflow, der vorschlägt,
RENAME USER
welche Kopie die Benutzerberechtigungen verwenden.Die Verwendung der Data Control Language (Anweisungen wie GRANT, REVOKE, RENAME usw.) erfordert keine
FLUSH PRIVILEGES;
und ist in Architekturen wie Galera oder Group Replication erforderlich, in denen MyISAM-Tabellen nicht repliziert werden.quelle
Ich bin auch auf dieses Problem gestoßen, und die vorgeschlagene Lösung hat nicht funktioniert, da die datenbankspezifischen Berechtigungen nicht ebenfalls verschoben würden. Was ich getan habe:
quelle
Um Berechtigungen zu ändern, widerrufen Sie zunächst alle Berechtigungen für den Benutzer
quelle
Fehlen viele Tabellen, wenn Sie andere Berechtigungen als nur db haben (wie Tabellen oder Spalten usw.). Je nachdem, über welche Berechtigungen Ihr Benutzer verfügt, müssen Sie möglicherweise alle diese oder einige der folgenden Tabellen aktualisieren:
quelle