У меня несколько тысяч пользователей 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
файл хранит определитель, включая хост определителя. (Я иметь пришлось сделать это при перемещении баз данных между хостами, где произошла неправильная конфигурация, из-за которой был записан неправильный хост ...)