本文最后更新于 254 天前,其中的信息可能已经有所发展或是发生改变。
正文
在 MySQL 中,可以通过操作 mysql 数据库中的 user 表来开启和关闭远程访问权限。
如下所示:

MySQL 是通过用户名(user)和客户端ip(host)来唯一确定一个用户。host 字段指定了允许用户连接的主机,它与 user 字段一起组成一个用户账户的唯一标识(即 'user'@'host')。
也就是说,可以设置同一个用户名在不同的客户端登陆时的密码不同,登陆后的权限也不同。通过查看mysql.user的表结构也可以看出,host和user是作为联合主键存在的。
所以说,我们只要修改相应的 host 字段就可以开启和关闭远程访问权限。host字段的常见值如下:
localhost:- 表示用户只能从本地主机(即 MySQL 服务器所在的机器)连接。
- 例如:
'root'@'localhost'表示用户root只能从本地连接。
%:- 表示用户可以从任意主机连接。
- 例如:
'user'@'%'表示用户user可以从任何 IP 地址或主机名连接。
- 具体的 IP 地址或主机名:
- 表示用户只能从指定的 IP 地址或主机名连接。
- 例如:
'user'@'192.168.1.100'表示用户user只能从 IP 地址192.168.1.100连接。
127.0.0.1:- 表示用户只能从本地主机的环回接口(即
localhost的 IP 形式)连接。 - 例如:
'user'@'127.0.0.1'表示用户user只能从127.0.0.1连接。
- 表示用户只能从本地主机的环回接口(即
在修改 mysql.user 表后,我们运行 FLUSH PRIVILEGES; 命令就可以使更改生效。
更多关于 host 字段的知识如下:
补充资料
在 MySQL 中,mysql.user 表存储了用户账户和权限信息,其中 host 字段是一个非常重要的字段,它决定了用户可以从哪些主机连接到 MySQL 服务器。
mysql.user 表中的 host 字段
1. host 字段的作用
host字段指定了允许用户连接的主机。- 它与
user字段一起组成一个用户账户的唯一标识(即'user'@'host')。 - MySQL 通过
user和host字段的组合来判断用户是否有权限连接到服务器。
2. host 字段的常见值
localhost:- 表示用户只能从本地主机(即 MySQL 服务器所在的机器)连接。
- 例如:
'root'@'localhost'表示用户root只能从本地连接。
%:- 表示用户可以从任意主机连接。
- 例如:
'user'@'%'表示用户user可以从任何 IP 地址或主机名连接。
- 具体的 IP 地址或主机名:
- 表示用户只能从指定的 IP 地址或主机名连接。
- 例如:
'user'@'192.168.1.100'表示用户user只能从 IP 地址192.168.1.100连接。
127.0.0.1:- 表示用户只能从本地主机的环回接口(即
localhost的 IP 形式)连接。 - 例如:
'user'@'127.0.0.1'表示用户user只能从127.0.0.1连接。
- 表示用户只能从本地主机的环回接口(即
3. host 字段的匹配规则
- MySQL 在验证用户连接时,会按照以下顺序匹配
host字段:- 精确匹配(例如
'user'@'192.168.1.100')。 - 通配符匹配(例如
'user'@'%')。 - 如果找不到匹配的记录,连接会被拒绝。
- 精确匹配(例如
- 注意:
- 如果有多个匹配的记录,MySQL 会选择最具体的一个。
- 例如,
'user'@'192.168.1.100'比'user'@'%'更具体,因此会优先匹配。
4. 修改 host 字段
如果需要修改用户的 host 字段,可以使用以下 SQL 语句:
修改用户的 host 值
UPDATE mysql.user SET host = '新的host值' WHERE user = '用户名' AND host = '旧的host值'; FLUSH PRIVILEGES;
例如,将用户 user 的 host 从 localhost 改为 %:
UPDATE mysql.user SET host = '%' WHERE user = 'user' AND host = 'localhost'; FLUSH PRIVILEGES;
创建新用户时指定 host
CREATE USER '用户名'@'host值' IDENTIFIED BY '密码';
例如,创建一个用户 user,允许从任意主机连接:
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
5. 查看 mysql.user 表中的 host 字段
可以运行以下 SQL 语句查看 mysql.user 表中的 host 字段:
SELECT user, host FROM mysql.user;
输出示例:
+------------------+-----------+ | user | host | +------------------+-----------+ | root | localhost | | user | % | | testuser | 192.168.1.100 | +------------------+-----------+
6. 注意事项
- 安全性:
- 使用
%允许从任意主机连接时,可能会增加安全风险。建议仅在必要时使用,并确保设置强密码。
- 使用
- 权限刷新:
- 修改
mysql.user表后,必须运行FLUSH PRIVILEGES;以使更改生效。
- 修改
- 备份:
- 在修改
mysql.user表之前,建议备份数据,以防止误操作。
- 在修改
总结
mysql.user表中的host字段决定了用户可以从哪些主机连接到 MySQL 服务器。- 常见的
host值包括localhost、%、具体的 IP 地址或主机名。 - 可以通过
UPDATE语句修改host字段,或通过CREATE USER创建用户时指定host。 - 修改后需要运行
FLUSH PRIVILEGES;以使更改生效。
如果你有其他问题或需要进一步帮助,请告诉我!



