更改 MySQL 用户的主机权限

更改 MySQL 用户的主机权限

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

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'              |
+---------------------------------------------------------------------------+

要启用对数据库的外部访问,我需要将 localhost 更改为%。执行此操作的一种方法是REVOKE所有权限并重新设置。问题是,设置了一个我不知道的密码,因此如果我撤销权限,我无法将其重新设置。

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

答案1

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

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';

...以及一个类似的UPDATE语句来将其改回来。

您可能还需要对mysql.db表格进行一些更改:

UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';

然后刷新以应用权限:

FLUSH PRIVILEGES;

答案2

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

RENAME USER 'username'@'oldhost' TO 'username'@'newhost';

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

答案3

最佳答案堆栈溢出建议使用RENAME USER复制用户权限。

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

答案4

要更改权限,首先撤销用户的所有权限

 revoke all privileges on *.* from 'username'@'localhost';

 grant SELECT,INSERT,UPDATE,DELETE ON `db`.* TO 'username'@'%';

 flush privileges;

相关内容