将主机访问权限重新分配给MySQL用户
我有几千个MySQL用户都设置为允许从特定的主机访问。 问题是,现在我将有两台机器(将来更多),这将需要使用相同的帐户来访问他们的每个数据库。
我想要一个快速简单(尽可能自动化)的方式来运行并修改每个用户帐户的主机部分,以适应内部networking通配符。 例如:
'bugsy'@'internalfoo'可以访问'bugsy'数据库。
我想现在允许从内部networking上的任何地方访问bugsy
'bugsy'@'10.0.0.%'可以访问'bugsy'数据库。
作为参考,解决scheme是:
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;
被接受的答案只改名了用户,但是权限被留下了。
我build议使用:
RENAME USER 'foo'@'1.2.3.4' TO 'foo'@'1.2.3.5';
根据MySQL文档 :
RENAME USER会使旧用户拥有的权限成为新用户拥有的权限。
更一般的答案是
UPDATE mysql.user SET host = {newhost} WHERE user = {youruser}
我没有必要这样做,所以拿一点盐和一个“testing,testing,testing”的帮助。
如果(在安全的受控testing环境中)直接修改mysql.user
和mysql.db
表中的Host
列,会发生什么? (例如,用update
语句。)我不认为MySQL使用用户的主机作为密码编码的一部分( PASSWORD
函数不build议这样做),但你必须尝试确保它。 您可能需要发出FLUSH PRIVILEGES
命令(或停止并重新启动服务器)。
对于某些存储引擎(例如MyISAM),您可能还需要检查/修改.frm
文件,用户创build的任何视图。 .frm
文件存储定义者,包括定义者的主机。 (我必须这样做,当主机之间移动数据库时,错误的configuration导致错误的主机被logging…)