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
表进行更改:UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
,然后刷新以应用特权:
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
#2 楼
建议使用RENAME USER
来复制用户权限,这是Stackoverflow的最佳答案。使用数据控制语言(声明为GRANT,REVOKE,RENAME等)不需要
FLUSH PRIVILEGES;
,并且在Galera或由于未复制MyISAM表,因此在mysql
数据库中具有MyISAM表的MySQL版本中的组复制。#3 楼
我也偶然发现了这一点,由于数据库特定的特权也不会被移动,因此提出的解决方案也无法正常工作。我做了什么: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年4月19日在17:09
#4 楼
要更改特权,请先撤消对用户的所有权限 revoke all privileges on *.* from 'username'@'localhost';
grant SELECT,INSERT,UPDATE,DELETE ON `db`.* TO 'username'@'%';
flush privileges;
评论
那正是我的问题,由于密码,我无法撤消该许可。请阅读我的问题。
– Fu86
13年2月28日在10:32
您可以通过更新将密码哈希设置为与旧密码相同。您不需要知道实际的密码即可。
– drogart
13年3月3日在7:18
#5 楼
如果您具有除简单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;
评论
一个小修复(mysql服务器版本:5.7.5-m15-MySQL社区服务器):来自phpmyadmin以及mysql命令提示符-更新mysql.user SET Host ='localhost'WHERE user.Host ='%'AND user。用户='XXXdbusr';
–杰迪(Jadeye)
15年7月21日在12:45
对于生产数据库,我会小心使用%,这可能会带来安全风险。如果您有多个Web服务器,则还可以使用通配符的主机,例如“ 192.168.0。%”或“%.example.com”。另一种选择是为每个主机多次添加同一用户,或为每个Web服务器创建一个单独命名的用户。
– Okdewit
17-2-28在11:22
如果像我一样尝试在本地测试机上允许root访问(在我的案例中为RasPi),则自MySQL 5.7起将无法使用。看到这个线程
–拉尔·平托
17-10-29在11:28
@RaulPinto:该线程似乎与phpMyAdmin有关,在这里并不完全相关,但是对于仅使用该线程的人来说要特别注意。
– nickgrim
17-10-30在12:16
最好使用有据可查的陈述RENAME USER
– Antonio Bardazzi
18年6月11日在13:54