Ändern der Hostberechtigungen für MySQL-Benutzer

43

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, REVOKEalle 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 localhostin %(und wieder zurück) zu ändern, ohne die Berechtigung selbst zu widerrufen?

Fu86
quelle

Antworten:

58

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

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

... und eine analoge UPDATE-Anweisung, um es wieder zu ändern.

Möglicherweise müssen Sie auch Änderungen an der mysql.dbTabelle vornehmen :

UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
nickgrim
quelle
Ein kleines Update (mysql Server Version: 5.7.5-m15 - MySQL Community Server): sowohl von phpmyadmin als auch von der mysql-Eingabeaufforderung - UPDATE mysql. userSET Host= 'localhost' WO user. Host= '%' UND user. User= 'XXXdbusr';
Jadeye
1
Bei einer Produktionsdatenbank wäre ich mit% vorsichtig, da dies ein Sicherheitsrisiko darstellen kann. Wenn Sie über mehrere Webserver verfügen, können Sie auch Hosts mit Platzhalterzeichen wie "192.168.0.%" Oder "% .example.com" verwenden. Eine andere Möglichkeit besteht darin, denselben Benutzer mehrmals für jeden Host hinzuzufügen oder einen separat benannten Benutzer pro Webserver zu erstellen.
Fx32
Wenn Sie wie ich versucht haben, den Root-Zugriff auf einem lokalen Testcomputer (in meinem Fall RasPi) zuzulassen, funktioniert dies seit MySQL 5.7 nicht mehr. Siehe diesen Thread
Raul Pinto
@ RaulPinto: In diesem Thread geht es anscheinend um phpMyAdmin, was hier nicht unbedingt relevant ist, aber gut zu beachten für Leute, die nur das verwenden.
Nickgrim
Verwenden Sie besser die gut dokumentierte Aussage RENAME USER
Antonio Bardazzi
6

Beste Antwort auf Stackoverflow, der vorschlägt, RENAME USERwelche 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.

Antonio Bardazzi
quelle
2

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:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;
Roman Haefeli
quelle
Und hat "es" funktioniert?
Pierre.Vriens
1

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;
Abhishek Anand Amralkar
quelle
Genau das ist mein Problem, ich kann die Erlaubnis wegen des Passworts nicht widerrufen. Bitte lies meine Frage.
Fu86
Sie können den Passwort-Hash über ein Update so einstellen, dass er mit dem alten identisch ist. Sie müssen das tatsächliche Passwort nicht kennen, um dies zu tun.
Drogart
0

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:

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;
Mikew
quelle