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

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

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

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

'bugsy' @ 'internalfoo' имеет доступ к 'bugy' БД.

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

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

Я пытался обмануть и использовать phpmyadmin для одного, скопировать синтаксис, повторить промывку для нескольких тысяч других пользователей, но способ phpmyadmin сделать это кажется слишком сложным. Он создает нового пользователя с такими же разрешениями (другой доступ к хосту), а затем удаляет старого. Для этого мне потребуется знать пароль каждого пользователя, что в настоящее время для меня нереально. Я просто хотел бы изменить доступ к хосту существующих пользователей.

Если у кого-то есть какие-то советы, буду очень признателен! :) -Ник

Возможно, что-то вроде следующего?

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

Конечно, вы, вероятно, сначала захотите протестировать это в какой-то тестовой среде.

(Копирую мой ответ из stackoverflow; Ник, наверное, лучше закрыть там тот ...)

Мне не приходилось этого делать, так что отнеситесь к этому с недоверием и большой порцией «тест, тест, тест».

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

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