将主机访问权限重新分配给MySQL用户

我有几千个MySQL用户都设置为允许从特定的主机访问。 问题是,现在我将有两台机器(将来更多),这将需要使用相同的帐户来访问他们的每个数据库。

我想快速简单地(尽可能自动化)运行并修改每个用户帐户的主机部分,以适应内部networking通配符。 例如:

'bugsy'@'internalfoo'可以访问'bugy'数据库。

我想现在允许从内部networking上的任何地方访问bugsy

'bugsy'@'10.0.0.%'可以访问'bugsy'数据库。

我试图欺骗和使用phpmyadmin的一个,复制语法,漂洗其他几千用户重复,但phpmyadmin的做法似乎过于复杂。 它创build一个具有相同权限(不同主机访问)的新用户,然后删除旧用户。 这将要求我知道每个用户的密码是什么,这对我来说现在不是一个现实的select。 我只想修改现有的用户主机访问权限。

如果有人有任何提示,我会非常感激! – 尼克

也许像下面这样的东西?

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; 

当然,你可能会首先在某种testing环境中testing这个。

(从stackoverflow复制我的答案;尼克,可能最好closures那里…)

我没有必要这样做,所以拿一点盐和一个“testing,testing,testing”的帮助。

如果(在安全的受控testing环境中)直接修改mysql.usermysql.db表中的Host列,会发生什么? (例如,用update语句。)我不认为MySQL使用用户的主机作为密码编码的一部分( PASSWORD函数不build议这样做),但你必须尝试确保它。 您可能需要发出FLUSH PRIVILEGES命令(或停止并重新启动服务器)。

对于某些存储引擎(例如MyISAM),您可能还需要检查/修改.frm文件,用户创build的任何视图。 .frm文件存储定义者,包括定义者的主机。 (我必须这样做,当主机之间移动数据库时,错误的configuration导致错误的主机被logging…)