一、MySQL-5.7 修改密码和连接权限设置
修改密码语法
注意:root@localhost 和 root@192.168.56.% 是两个不同的用户。在修改密码时,两个用户的密码是各自分别保存,如果两个用户密码设置不一样则登陆时注意登陆密码
GRANT ALL PRIVILEGES ON *.* TO 'user'@'host' IDENTIFIED BY 'passwd';
语法参数说明:
命令部分 | 作用 |
---|---|
GRANT ALL PRIVILEGES |
授予所有权限,授予用户 所有权限(包括 SELECT、INSERT、UPDATE、DELETE、CREATE、DROP 等,ALL PRIVILEGES 是 MySQL 中权限的最高级别,允许用户操作所有数据库和表。) |
ON *.* |
作用于所有数据库和表,第1个 * 表示所有数据库。第2个 * 表示所有表。 |
TO 'root'@'192.168.56.%' |
允许192.168.56.0/24网段内所有IP 连接 |
IDENTIFIED BY 'Engin2019123456' |
设置密码 |
操作步骤
步骤 1:创建用户并设置密码
如果用户 'root'@'192.168.56.%'
不存在,需先创建用户:
CREATE USER 'root'@'192.168.56.%' IDENTIFIED BY 'password';
步骤 2:授予权限
授予该用户所有权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.56.%';
步骤 3:刷新权限
确保权限立即生效:
FLUSH PRIVILEGES;
完整sql实现方法
-- 创建用户并设置密码
CREATE USER 'root'@'192.168.56.%' IDENTIFIED BY 'passworld';
-- 授予所有权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.56.%';
-- 刷新权限
FLUSH PRIVILEGES;
验证用户是否存在
查看 MySQL 数据库root用户和允许连接的主机(host)信息的语法:
SELECT User, Host FROM mysql.user WHERE User = 'root';
查看 MySQL 数据库中所有用户的用户名和允许连接的主机(host)信息的语法
SELECT user, host FROM mysql.user;
mysql> SELECT user, host FROM mysql.user;
+---------------+--------------+
| user | host |
+---------------+--------------+
| root | 192.168.56.% |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+--------------+
4 rows in set (0.03 sec)
- 参数说明:
User | Host | 说明 |
---|---|---|
root |
192.168.56.% |
允许从 192.168.56.0/24 网段内的任意 IP 地址连接 MySQL,用户名为 root 。% 表示通配符,匹配同一网段的所有 IP。 |
mysql.session |
localhost |
MySQL 内置的只读用户,用于维护会话相关的系统功能,通常不需要手动操作。 |
mysql.sys |
localhost |
MySQL 内置用户,用于访问 sys 数据库(系统监控和诊断工具),通常不需要手动操作。 |
root |
localhost |
本地管理员账户,仅允许从本机(localhost )连接 MySQL,用户名为 root 。这是最常见的管理员账户。 |
关键概念说明
user
和host
的组合
MySQL 中,用户账户由user
和host
共同唯一标识。例如:root@localhost
和root@192.168.56.%
是两个不同的用户。在修改密码时,两个用户的密码各自分别保存,如果两个用户密码设置不一样则登陆时注意登陆密码host
字段支持通配符(如%
表示任意主机,localhost
表示本机)。
root@192.168.56.%
的用途- 允许从
192.168.56.0/24
网段内的任意 IP 连接 MySQL(例如192.168.56.1
、192.168.56.100
等)。 - 通常用于远程管理 MySQL 数据库(需确保防火墙开放对应端口)。
- 允许从
localhost
的特殊性localhost
表示本地连接(通过 Unix 套接字或本地 TCP/IP 连接)。- 与 IP 地址
127.0.0.1
不同,localhost
优先使用 Unix 套接字文件(而非 TCP/IP 协议)。
内置用户(
mysql.session
和mysql.sys
)mysql.session
:用于系统内部维护会话状态,权限受限,通常不可删除。mysql.sys
:用于访问sys
数据库(包含性能视图和监控工具),权限受限。
二、 常见操作建议
1. 查看用户权限
如果需要查看某个用户的权限,可以执行:
SHOW GRANTS FOR 'root'@'localhost';
2. 修改用户权限
如果需要限制 root@192.168.56.%
的权限,可以使用 REVOKE
或 GRANT
命令。例如:
REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'192.168.56.%';
3. 删除用户
如果不再需要某个用户,可以删除:
DROP USER 'root'@'192.168.56.%';
4. 刷新权限
修改用户或权限后,需执行以下命令使更改生效:
FLUSH PRIVILEGES;
三、 安全提示:
- 最小化权限:避免为
root
用户分配不必要的权限(尤其是远程访问)。 - 限制
host
范围:如果不需要远程连接,建议删除root@192.168.56.%
或将其host
限制为具体 IP。 - 禁用匿名用户:确保没有
''@'%'
或''@'localhost'
的匿名账户(可通过SELECT User, Host FROM mysql.user WHERE User = '';
检查)。
常见问题排查
1. 如果用户已存在
- 删除旧用户(谨慎操作):
DROP USER 'root'@'192.168.56.%';
- 重新执行上述创建和授权步骤。
2. 如果报错 ERROR 1396 (HY000)
- 确保 MySQL 版本支持
CREATE USER
(MySQL 5.7+)。 - 如果使用旧版本(如 MySQL 5.6),改用以下语法:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.56.%' IDENTIFIED BY 'passwd';
3. 如果登录失败
- 检查密码是否正确(注意大小写和特殊字符)。
- 确保客户端连接使用的主机名匹配
192.168.56.%
(例如192.168.56.1
)。