我对用户/数据库有以下资助
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
为%
(并再次更改)?
如果您有权访问
mysql
数据库,则可以直接更改授权表:UPDATE
...以及将其改回的类似语句。此外,您可能还需要对
mysql.db
表进行更改:然后刷新以应用权限:
Stackoverflow上的最佳答案建议使用
RENAME USER
用户权限的副本。使用数据控制语言(如 GRANT、REVOKE、RENAME 等语句)不需要
FLUSH PRIVILEGES;
并且在像 Galera 或 Group Replication 这样的架构中是必需的,mysql
因为 MyISAM 表不被复制。MySQL 8 / MariaDB 10 的最佳选择是:
请参阅https://dev.mysql.com/doc/refman/8.0/en/rename-user.html
我也偶然发现了这个,建议的解决方案没有用,因为数据库特定的权限也不会移动。我做了什么:
要更改权限,首先要撤销用户的所有权限
如果您拥有除简单 db 以外的特权(如表或列等),则会遗漏很多表。根据您的用户拥有的授权,您可能需要更新所有这些表或一些: