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.