Назад | Перейти на главную страницу

Изменение разрешений хоста для пользователей MySQL

У меня есть следующие гранты для пользователя / базы данных

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

Чтобы включить внешний доступ к базе данных, мне нужно изменить localhost на %. Один из способов сделать это REVOKE все разрешения и установите заново. Проблема в том, что установлен пароль, которого я не знаю, поэтому, если я аннулирую разрешение, я не могу его вернуть.

Есть ли способ изменить имя хоста localhost к % (и обратно) без отзыва самого разрешения?

Если у вас есть доступ к mysql базу данных, вы можете изменить таблицы грантов напрямую:

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

... и аналогичный UPDATE-заговор поменять обратно.

Также вам может потребоваться внести изменения в mysql.db таблица также:

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

а затем сбросить, чтобы применить привилегии:

FLUSH PRIVILEGES;

Лучший ответ на Переполнение стека предлагая использовать RENAME USER которые копируют права пользователя.

Использование языка управления данными (такие операторы, как GRANT, REVOKE, RENAME и т. Д.) Не требует FLUSH PRIVILEGES; и требуется в такой архитектуре, как Galera или Group Replication в версиях MySQL, имеющих таблицы MyISAM в mysql базы данных, поскольку таблицы MyISAM не реплицируются.

Я тоже наткнулся на это, и предложенное решение не сработало, поскольку привилегии, специфичные для базы данных, также не были перемещены. что я сделал:

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

Чтобы изменить привилегии, сначала отзовите все разрешения для пользователя

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

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

 flush privileges;

Отсутствует много таблиц, если у вас есть привилегии, отличные от простого db (например, таблицы или столбцы и т. Д.). В зависимости от того, какие гранты есть у вашего пользователя, вам может потребоваться обновить все эти таблицы или некоторые:

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;