Повторно назначить права доступа хоста пользователю MySQL - программирование
Подтвердить что ты не робот

Повторно назначить права доступа хоста пользователю MySQL

У меня есть несколько тысяч пользователей MySQL, настроенных для доступа к определенному хосту. Проблема в том, что теперь у меня будет две машины (в будущем), которые должны будут использовать одну и ту же учетную запись для доступа к каждой из своих баз данных.

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

'bugsy' @'internalfoo' имеет доступ к базе данных 'bugsy'.

Я хочу теперь разрешить доступ к ошибкам из любой точки внутренней сети

'bugsy' @'10.0.0.%' имеет доступ к базе данных "bugsy".

4b9b3361

Ответ 1

Для справки, решение:

UPDATE mysql.user SET host = '10.0.0.%' WHERE host = 'internalfoo' AND user != 'root';
UPDATE mysql.db SET host = '10.0.0.%' WHERE host = 'internalfoo' AND user != 'root';
FLUSH PRIVILEGES;

Ответ 2

Принятый ответ только переименовал пользователя, но привилегии остались.

Я бы рекомендовал использовать:

RENAME USER 'foo'@'1.2.3.4' TO 'foo'@'1.2.3.5';

Согласно Документация по MySQL:

ПОЛУЧИТЕЛЬ ПОЛЬЗОВАТЕЛЯ приводит к тому, что прежним пользователем привилегии принадлежат тем, которые принадлежат новому пользователю.

Ответ 3

Более общий ответ

UPDATE mysql.user SET host = {newhost} WHERE user = {youruser}

Ответ 4

Мне не приходилось это делать, поэтому возьмите это с солью и большой помощью "теста, теста, теста".

Что произойдет, если (в безопасной тестовой среде) вы непосредственно изменяете столбец Host в таблицах mysql.user и, возможно, mysql.db? (Например, с инструкцией update.) Я не думаю, что MySQL использует пользовательский хост как часть кодировки пароля (функция PASSWORD не предполагает, что он это делает), но вам придется попробовать его быть уверенным. Возможно, вам потребуется выпустить команду FLUSH PRIVILEGES (или остановить и перезапустить сервер).

Для некоторых систем хранения (например, MyISAM) вам также может потребоваться проверить/изменить файл .frm на любые виды, созданные пользователем. Файл .frm хранит определитель, включая узел определителя. (Мне приходилось делать это при перемещении баз данных между хостами, где была некорректная конфигурация, из-за которой записывался неправильный хост...)