更改 MySQL 用户的主机权限

Fu8*_*u86 69 mysql permissions database-administration

我对用户/数据库有以下授权

mysql> SHOW GRANTS FOR 'username'@'localhost';
+---------------------------------------------------------------------------+
| Grants for username@localhost                                             |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY PASSWORD 'xxx' |
| GRANT ALL PRIVILEGES ON `userdb`.* TO 'username'@'localhost'              |
+---------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

要启用对数据库的外部访问,我需要将 localhost 更改为%. 一种方法是REVOKE所有权限并重新设置。问题是,有一个我不知道的密码集,所以如果我撤销该权限,我就无法将其设置回来。

有没有办法在不撤销权限本身的情况下将主机名更改localhost%(并再次返回)?

nic*_*rim 101

如果您可以访问mysql数据库,则可以直接更改授权表:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
Run Code Online (Sandbox Code Playgroud)

...以及一个类似的UPDATE-statement 将其改回。

此外,您可能还需要对mysql.db表进行更改:

UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
Run Code Online (Sandbox Code Playgroud)

然后刷新以应用特权:

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)


Cra*_*bit 25

MySQL 8+ / MariaDB 10+ 上的最佳选择是:

RENAME USER 'username'@'oldhost' TO 'username'@'newhost';
Run Code Online (Sandbox Code Playgroud)

请参阅https://dev.mysql.com/doc/refman/8.0/en/rename-user.html


Ant*_*zzi 12

Stackoverflow上的最佳答案建议使用RENAME USER哪个副本用户权限。

使用数据控制语言(如 GRANT、REVOKE、RENAME 等语句)不需要FLUSH PRIVILEGES;并且在像 Galera 或 Group Replication 的 MySQL 版本中的架构中是必需的,mysql因为 MyISAM 表没有被复制。