it-swarm.com.de

Ändern der Host-Berechtigungen für MySQL-Benutzer

Ich habe die folgenden Zuschüsse für einen Benutzer/eine Datenbank

mysql> SHOW GRANTS FOR 'username'@'localhost';
+---------------------------------------------------------------------------+
| Grants for [email protected]                                             |
+---------------------------------------------------------------------------+
| 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 ich localhost in % Ändern. Eine Möglichkeit, dies zu tun, besteht darin, alle Berechtigungen REVOKE und erneut festzulegen. Das Problem ist, dass ein Kennwort festgelegt ist, das ich nicht kenne. Wenn ich die Berechtigung 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?

48
Fu86

Wenn Sie Zugriff auf die Datenbank mysql haben, können Sie die Grant-Tabellen direkt ändern:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';

... und eine analoge UPDATE- Anweisung, um sie zurück zu ändern.

Möglicherweise müssen Sie auch Änderungen an der Tabelle mysql.db Vornehmen:

UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';

und dann spülen, um die Berechtigungen anzuwenden:

FLUSH PRIVILEGES;
67
nickgrim

Beste Antwort auf Stackoverflow schlägt vor, RENAME USER Zu verwenden, um die Benutzerrechte zu kopieren.

Die Verwendung der Data Control Language (Anweisungen wie GRANT, REVOKE, RENAME usw.) erfordert nicht FLUSH PRIVILEGES; Und ist in Architekturen wie Galera oder Gruppenreplikation in MySQL-Versionen mit MyISAM-Tabellen in der Datenbank mysql erforderlich, da MyISAM-Tabellen werden nicht repliziert.

8

Ich bin auch auf diese gestoßen, und die vorgeschlagene Lösung hat nicht funktioniert, da die datenbankspezifischen Berechtigungen nicht ebenfalls verschoben wurden. Was ich getan habe:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;
2
Roman Haefeli

Um Berechtigungen zu ändern, widerrufen Sie zunächst alle Berechtigungen für den Benutzer

 revoke all privileges on *.* from 'username'@'localhost';

 grant SELECT,INSERT,UPDATE,DELETE ON `db`.* TO 'username'@'%';

 flush privileges;

Viele Tabellen fehlen, wenn Sie andere Berechtigungen als nur db haben (wie Tabellen oder Spalten usw.). Abhängig von den Berechtigungen Ihres Benutzers müssen Sie möglicherweise alle diese oder einige dieser Tabellen aktualisieren:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.tables_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.columns_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.procs_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.proxies_priv SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;
0
mikew