MySQL 用户管理详解:创建、权限设置、远程访问与安全优化(码农资讯网)

阅读:8 2025-03-07

1. MySQL 用户管理基础

在 MySQL 中,所有的用户信息存储在 mysql.user 表中。可以使用以下命令查询现有的用户:

SELECT User, Host FROM mysql.user;

查询结果示例

+------------+-----------+| User       | Host      |
+------------+-----------+| root       | localhost |
| dev_user   | %         |
| admin      | 192.168.1.10 |
| test_user  | 127.0.0.1 |
+------------+-----------+
  • User:MySQL 用户名

  • Host:该用户允许访问 MySQL 服务器的来源

    • localhost:仅允许本机访问

    • %:允许从 任意 IP 远程访问

    • 192.168.1.10:仅允许从该 IP 访问


2. 创建 MySQL 用户

2.1 创建本地用户(仅限本机访问)

CREATE USER 'local_user'@'localhost' IDENTIFIED BY 'password123';
  • local_user:新用户名称

  • localhost:该用户只能从 本机 访问 MySQL

  • password123:用户的登录密码

2.2 创建远程访问用户

CREATE USER 'remote_user'@'%' IDENTIFIED BY 'password456';
  • remote_user:新用户名称

  • %:允许从 任何 IP 地址 访问(远程连接)

  • password456:用户的密码

安全建议:远程用户的 Host 最好指定为具体的 IP,而不是 %,这样可以提高安全性。例如:

CREATE USER 'secure_user'@'192.168.1.100' IDENTIFIED BY 'securePass';

3. 授权 MySQL 用户权限

用户创建后,默认没有任何权限,需要手动赋予权限。

3.1 赋予用户所有权限

GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%';
  • *.*:表示该用户可以访问所有数据库和所有表

  • ALL PRIVILEGES:授予所有权限

3.2 仅授予某个数据库的权限

GRANT ALL PRIVILEGES ON my_database.* TO 'dev_user'@'localhost';
  • my_database.*:只允许访问 my_database 这个数据库

3.3 赋予常见权限

GRANT SELECT, INSERT, UPDATE, DELETE ON my_database.* TO 'test_user'@'%';
  • SELECT:允许查询数据

  • INSERT:允许插入数据

  • UPDATE:允许修改数据

  • DELETE:允许删除数据

3.4 刷新权限

FLUSH PRIVILEGES;
  • 让权限变更立即生效


4. 修改 MySQL 用户密码

4.1 修改用户密码(推荐方法)

ALTER USER 'dev_user'@'localhost' IDENTIFIED BY 'new_password';

4.2 旧版本 MySQL 修改密码方法

SET PASSWORD FOR 'dev_user'@'localhost' = PASSWORD('new_password');

4.3 忘记 root 密码的解决方法

如果 root 用户密码丢失,可以通过 跳过权限验证 方式重置:

sudo systemctl stop mysql
sudo mysqld_safe --skip-grant-tables &

然后执行:

UPDATE mysql.user SET authentication_string=PASSWORD('new_root_password') WHERE User='root';
FLUSH PRIVILEGES;

重启 MySQL:

sudo systemctl restart mysql

5. 允许 MySQL 远程访问

如果需要远程访问 MySQL,除了创建远程用户,还需要修改 MySQL 配置文件

5.1 修改 mysqld.cnf 配置

编辑 MySQL 配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

找到:

bind-address = 127.0.0.1

修改为:

bind-address = 0.0.0.0

然后 重启 MySQL

sudo systemctl restart mysql

5.2 开放 3306 端口

Ubuntu/Debian(UFW 防火墙)

sudo ufw allow 3306/tcp
sudo ufw reload

CentOS(firewalld 防火墙)

sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload

5.3 远程连接 MySQL

在另一台电脑上,使用以下命令连接 MySQL:

mysql -u remote_user -p -h 服务器IP -P 3306

例如:

mysql -u remote_user -p -h 192.168.1.100 -P 3306

6. 删除 MySQL 用户

6.1 删除指定用户

DROP USER 'test_user'@'%';
FLUSH PRIVILEGES;

6.2 查看是否删除成功

SELECT User, Host FROM mysql.user;

7. MySQL 用户管理常见问题

问题 1:远程访问 MySQL 被拒绝

ERROR 1130 (HY000): Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server

解决方案:

  1. 确保 bind-address 设为 0.0.0.0

  2. 创建远程访问用户

  3. 防火墙放行 3306 端口


总结

  1. 查看用户SELECT User, Host FROM mysql.user;

  2. 创建用户CREATE USER 'user'@'host' IDENTIFIED BY 'password';

  3. 赋予权限GRANT 权限 ON 数据库.* TO 'user'@'host';

  4. 修改密码ALTER USER 'user'@'host' IDENTIFIED BY 'new_pass';

  5. 允许远程访问

    • 修改 bind-address

    • 放行 3306 端口

  6. 删除用户DROP USER 'user'@'host';

按照本教程,你可以轻松管理 MySQL 用户,保障数据库安全!🚀 更多技术教程请关注「码农资讯网」!


标签: mysql
声明

1、部分文章来源于网络,仅作为参考。
2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!