更改MySQL用户的主机权限


43

我为用户/数据库提供以下赠款

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%(然后再次更改)?

Answers:


58

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

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

...和类似的UPDATE陈述将其改回。

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

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

一个小修复(mysql服务器版本:5.7.5-m15-MySQL社区服务器):来自phpmyadmin以及mysql命令提示符-UPDATE mysqluserSET Host='本地主机'WHERE userHost='%'AND userUser='XXXdbusr';
Jadeye

1
对于生产数据库,我会小心使用%,这可能会带来安全风险。如果您有多个Web服务器,则还可以使用通配符的主机,例如“ 192.168.0。%”或“%.example.com”。另一种选择是为每个主机多次添加同一用户,或为每个Web服务器创建一个单独命名的用户。
Fx32

如果像我一样尝试在本地测试机上允许root访问(在我的案例中为RasPi),则自MySQL 5.7起将无法使用。看到这个话题
Raul Pinto

@RaulPinto:该线程似乎与phpMyAdmin有关,在这里并不完全相关,但是对于仅使用该线程的人来说要特别注意。
nickgrim

最好使用记录明确的声明RENAME USER
Antonio Bardazzi


2

我也偶然发现了这一点,由于数据库特定的特权也不会被移动,因此提出的解决方案也行不通。我做了什么:

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

并且“它”起作用了吗?
Pierre.Vriens '16

1

要更改权限,请先撤消对用户的所有权限

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

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

 flush privileges;

那正是我的问题,由于密码的原因,我无法撤消该许可。请阅读我的问题。
2013年

您可以通过更新将密码哈希设置为与旧密码相同。您不需要知道实际的密码即可。
drogart

0

如果您拥有除简单db以外的特权(例如表或列等),则会丢失许多表。根据您的用户授予的权限,您可能需要更新所有这些表或某些表:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.tables_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.columns_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.procs_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.proxies_priv SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.