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

Nic*_*ngs 56 mysql permissions

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

我想快速简单(尽可能自动化)的方式来运行并修改每个用户帐户的主机部分以适应内部网络通配符.例如:

'bugsy'@'internalfoo'可以访问'bugsy'DB.

我想现在允许从内部网络上的任何地方进行bugsy访问

'bugsy'@'10.0.0.%'可以访问'bugsy'DB.

Nic*_*ngs 114

作为参考,解决方案是:

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;
Run Code Online (Sandbox Code Playgroud)

  • 这不能正确地重新分配所有权限,下面的@pedrocheckos答案正确执行了所需的操作. (7认同)

Ped*_*dro 88

接受的答案仅重命名为用户,但特权被遗忘.

我建议使用:

RENAME USER 'foo'@'1.2.3.4' TO 'foo'@'1.2.3.5';
Run Code Online (Sandbox Code Playgroud)

根据MySQL文档:

RENAME USER使旧用户拥有的权限成为新用户持有的权限.

  • 我得到`ERROR 1396(HY000):操作RENAME USER失败了'foo'@'%' (5认同)
  • `foo` 是一个示例 - 将 `foo` 替换为数据库中的实际用户名 (2认同)
  • 这应该是公认的答案,因为仅更新“主机名”列不会维护特权 (2认同)

e18*_*18r 5

更一般的答案是

UPDATE mysql.user SET host = {newhost} WHERE user = {youruser}
Run Code Online (Sandbox Code Playgroud)