我有几千个 MySQL 用户,都设置为允许从特定主机进行访问。问题是,现在我将拥有两台机器(将来会有更多),它们需要使用同一个帐户来访问每个数据库。
我想要一种快速简便(尽可能自动化)的方法来运行和修改每个用户帐户的主机部分以适应内部网络通配符。例如:
'bugsy'@'internalfoo' 可以访问 'bugy' DB。
我现在想允许 bugsy 从内部网络的任何地方进行访问
'bugsy'@'10.0.0.%' 可以访问 'bugsy' 数据库。
我尝试作弊,使用 phpmyadmin,复制语法,对其他几千个用户重复上述操作,但 phpmyadmin 的做法似乎过于复杂。它会创建一个具有相同权限(不同主机访问权限)的新用户,然后删除旧用户。这需要我知道每个用户的密码,而这对我来说目前不是一个现实的选择。我只是想修改现有用户的主机访问权限。
如果有人有任何建议,我将非常感激!:) -Nick
答案1
也许是像下面这样?
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;
当然,您可能首先想在某种测试环境中对此进行测试。
答案2
(从 stackoverflow 复制我的答案;Nick,最好关闭那里的答案...)
我还没有这样做过,所以对此持保留态度,并多进行“测试、测试、测试”。
如果(在安全受控的测试环境中)您直接修改表Host
中的列,mysql.user
会发生什么情况mysql.db
?(例如,使用update
语句。)我不认为 MySQL 使用用户的主机作为密码编码的一部分(该PASSWORD
函数没有建议这样做),但您必须尝试一下才能确定。您可能需要发出FLUSH PRIVILEGES
命令(或者停止并重新启动服务器)。
对于某些存储引擎(例如 MyISAM),您可能还需要检查/修改.frm
用户创建的任何视图的文件。该.frm
文件存储定义者,包括定义者的主机。(我有必须这样做,在主机之间移动数据库时,如果出现配置错误,则会导致记录错误的主机......)