Zmiana uprawnień hosta dla użytkowników MySQL


44

Mam następujące granty dla użytkownika / bazy danych

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'              |
+---------------------------------------------------------------------------+

Aby włączyć zewnętrzny dostęp do bazy danych, muszę zmienić localhost na %. Jednym ze sposobów, aby to zrobić, są REVOKEwszystkie uprawnienia i ustawić je ponownie. Problem polega na tym, że istnieje zestaw haseł, którego nie znam, więc jeśli cofnę pozwolenie, nie mogę go przywrócić.

Czy istnieje sposób na zmianę nazwy hosta localhostna %(iz powrotem) bez cofania samego pozwolenia?

Odpowiedzi:


59

Jeśli masz dostęp do mysqlbazy danych, możesz bezpośrednio zmienić tabele uprawnień:

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

... i analogiczne oświadczenie, UPDATEaby to zmienić.

Konieczne może być również wprowadzenie zmian w mysql.dbtabeli:

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

Mała poprawka (wersja serwera mysql: 5.7.5-m15 - MySQL Community Server): zarówno z phpmyadmin, jak i z wiersza polecenia mysql - UPDATE mysql. userSET Host= „localhost” GDZIE user. Host= „%” ORAZ user. User= „XXXdbusr”;
Jadeye

1
W przypadku produkcyjnej bazy danych uważam na%, może to stanowić zagrożenie bezpieczeństwa. Jeśli masz wiele serwerów WWW, możesz także używać hostów z symbolami wieloznacznymi, takich jak „192.168.0.%” Lub „% .example.com”. Inną opcją jest wielokrotne dodawanie tego samego użytkownika dla każdego hosta lub utworzenie osobnego użytkownika na serwer WWW.
Fx32

Jeśli, podobnie jak ja, próbowałbym zezwolić na dostęp do roota na lokalnej maszynie testowej (w moim przypadku RasPi), to nie zadziała od MySQL 5.7. Zobacz ten wątek
Raul Pinto

@RaulPinto: ten wątek wydaje się dotyczyć phpMyAdmina, co nie jest tu w pełni istotne, ale warto zauważyć, że osoby, które tylko tego używają.
nickgrim

Lepiej korzystać z dobrze udokumentowanego oświadczenia ZMIEŃ NAZWĘ
Antonio Bardazzi

6

Najlepsza odpowiedź na Stackoverflow sugerująca użycie, RENAME USERktóra kopiuje uprawnienia użytkownika.

Używanie języka kontroli danych (instrukcje GRANT, REVOKE, RENAME itd.) Nie wymaga FLUSH PRIVILEGES;i jest wymagane w architekturze takiej jak Galera lub replikacja grupy, w której tabele MyISAM nie są replikowane.


2

Natknąłem się również na to, a proponowane rozwiązanie nie zadziałało, ponieważ specyficzne dla bazy danych uprawnienia również nie zostałyby przeniesione. co ja zrobiłem:

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

I czy „to” zadziałało?
Pierre.Vriens 19.04.16

1

Aby zmienić uprawnienia, najpierw cofnij wszystkie uprawnienia dla użytkownika

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

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

 flush privileges;

To jest dokładnie mój problem, nie mogę odwołać pozwolenia z powodu hasła. Proszę przeczytać moje pytanie.
Fu86

Możesz ustawić skrót hasła tak, aby był taki sam jak stary poprzez aktualizację. Aby to zrobić, nie musisz znać faktycznego hasła.
drogart

0

Brakuje wielu tabel, jeśli masz uprawnienia inne niż tylko db (takie jak tabele lub kolumny itp.). W zależności od tego, co udziela użytkownik, może być konieczne zaktualizowanie wszystkich tych tabel lub niektórych:

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;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.