所有托管服务节省 15%

测试技能,享折扣

使用代码: Skills 开始使用
China
管理

如何在 MySQL 中创建新用户和设置权限

MySQL 仍然是世界上部署最广泛的关系型数据库管理系统之一,为从小型个人项目到企业级应用的各种系统提供支持。无论您是开发人员、系统管理员还是管理自己基础设施的业务所有者,了解如何创建 MySQL 用户和配置其权限是维护安全、组织良好的数据库环境的必不可少的技能。

用户管理不当是导致数据库泄露的主要原因之一。授予过度权限、重复使用凭证或保持默认账户活跃都可能使整个数据层面临不必要的风险。本指南将引导您完成整个过程——从登录 MySQL 到验证权限——并在每一步提供清晰的命令、实际示例和安全最佳实践。

为什么 MySQL 用户管理很重要

在深入了解命令之前,值得理解*为什么*这很重要。MySQL 遵循最小权限原则:每个用户应该只能访问他们真正需要的特定数据库、表和操作。这最小化了被攻击账户的影响范围,并使审计变得更加容易。

如果您在托管的 VPS Hosting 计划或 Dedicated Server 上运行 MySQL,您对 MySQL 实例拥有完整的 root 级别访问权限,可以完全控制用户创建和权限管理。许多控制面板环境——例如 VPS with cPanel 提供的环境——也为 MySQL 管理提供了图形界面,可以补充此处描述的命令行方法。

前置条件

开始之前,请确保您拥有:

  • MySQL 5.7+ 或 MySQL 8.0+ 已安装并在您的服务器上运行
  • Root 访问权限或具有 GRANT OPTION 权限的 MySQL 超级用户账户访问权限
  • 终端访问权限(Linux/macOS)或命令提示符 / PowerShell(Windows)

第1步:登录MySQL

要管理用户和权限,您必须以具有足够管理权限的用户身份进行身份验证。在大多数情况下,这是 root 账户。

打开您的终端或命令提示符

  • Linux / macOS:打开您的终端应用程序
  • Windows:打开命令提示符或PowerShell

连接到MySQL服务器

运行以下命令:

mysql -u root -p

系统将提示您输入root密码。身份验证成功后,您将看到MySQL提示符:

mysql>

> 安全提示:如果您连接到远程MySQL服务器,请使用 -h 标志指定主机:

> “`bash

> mysql -u root -p -h your_server_ip

> “`

第 2 步:创建新的 MySQL 用户

进入 MySQL shell 后,您可以使用 CREATE USER 语句创建新用户。

语法

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

参数说明:

参数说明
username要分配给新用户的名称
host允许用户连接的主机。使用 localhost 进行仅本地访问,或使用 % 作为任何主机的通配符
password此用户的强密码且唯一的密码

示例:创建可从任何主机访问的用户

CREATE USER 'newuser'@'%' IDENTIFIED BY 'StrongP@ssw0rd!';

示例:创建仅限于本地主机的用户

CREATE USER 'localuser'@'localhost' IDENTIFIED BY 'AnotherStr0ng#Pass';

> 最佳实践:尽可能将用户限制为 localhost 或特定 IP 地址,而不是使用 %。通配符主机访问会不必要地增加您的攻击面。

MySQL 8.0 关于身份验证插件的说明

MySQL 8.0 引入了 caching_sha2_password 作为默认身份验证插件,这可能会导致与较旧客户端或应用程序的兼容性问题。如果需要,您可以显式设置身份验证方法:

CREATE USER 'newuser'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongP@ssw0rd!';

第 3 步:向用户授予权限

创建用户不会自动授予他们对任何数据库的访问权限。您必须使用 GRANT 语句显式分配权限。

语法

GRANT privileges ON database.table TO 'username'@'host';

参数说明:

参数描述
privileges权限的逗号分隔列表(例如 SELECTINSERTUPDATEDELETE)或 ALL PRIVILEGES
database.table授权的范围。使用 *.* 表示所有数据库和表,dbname.* 表示特定数据库中的所有表,或 dbname.tablename 表示单个表
username@host目标用户账户

常见 MySQL 权限

权限描述
SELECT从表中读取数据
INSERT向表中添加新行
UPDATE修改现有行
DELETE从表中删除行
CREATE创建新数据库或表
DROP删除数据库或表
INDEX创建或删除索引
ALTER修改表结构
ALL PRIVILEGES完全访问权限(谨慎使用)
GRANT OPTION允许用户向他人授予权限

示例:授予对特定数据库的完全访问权限

GRANT ALL PRIVILEGES ON exampledb.* TO 'newuser'@'%';

示例:授予只读访问权限

GRANT SELECT ON exampledb.* TO 'readonly_user'@'localhost';

示例:授予对单个表的特定权限

GRANT SELECT, INSERT, UPDATE ON exampledb.orders TO 'app_user'@'localhost';

示例:授予全局权限(谨慎使用)

GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;

> 警告:授予 ALL PRIVILEGES ON *.* 会给用户超级用户等效的访问权限。仅为受信任的管理账户保留此权限。

第 4 步:刷新权限

更改用户权限后,最好重新加载权限表,以便 MySQL 立即识别您的更改:

FLUSH PRIVILEGES;

> 注意:在现代版本的 MySQL (5.7.3+) 中,FLUSH PRIVILEGESGRANTREVOKECREATE USER 语句后会自动触发。但是,在手动编辑 mysql 系统表(通过 INSERTUPDATE)后显式运行它仍然是必要的。

第 5 步:验证用户权限

在将用户账户投入生产之前,始终确认您设置的权限是否正确。

检查特定用户的授权

SHOW GRANTS FOR 'newuser'@'%';

示例输出:

+--------------------------------------------------------------+
| Grants for newuser@%                                         |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `newuser`@`%`                          |
| GRANT ALL PRIVILEGES ON `exampledb`.* TO `newuser`@`%`       |
+--------------------------------------------------------------+

列出所有 MySQL 用户

SELECT user, host FROM mysql.user;

检查当前用户自己的权限

SHOW GRANTS;

第 6 步:撤销权限(需要时)

权限会随时间变化。当用户不再需要某些访问权限时,使用 REVOKE 语句及时撤销:

语法

REVOKE privileges ON database.table FROM 'username'@'host';

示例:撤销用户的所有权限

REVOKE ALL PRIVILEGES ON exampledb.* FROM 'newuser'@'%';
FLUSH PRIVILEGES;

示例:撤销特定权限

REVOKE DELETE ON exampledb.orders FROM 'app_user'@'localhost';

第 7 步:删除用户(必要时)

如果不再需要用户账户,请完全删除它以消除不必要的访问向量:

DROP USER 'newuser'@'%';

此命令在单个操作中删除用户账户和所有关联的权限。

托管环境中的 MySQL 用户管理

如果您在共享或托管主机环境中管理 MySQL,该过程可能会因您的控制面板而略有不同。cPanel、Plesk 和 DirectAdmin 等平台提供图形界面,用于创建 MySQL 用户和分配权限,无需直接编写 SQL。

对于需要完整命令行控制但不需要专用服务器开销的用户,VPS Hosting 计划提供了性能、灵活性和成本的理想平衡。如果您运行需要最大吞吐量和隔离资源的数据库密集型应用程序,请考虑升级到专用服务器以获得有保证的性能。

对于较小的项目或开发环境,共享网络主机计划通常包括 phpMyAdmin 访问权限,它提供了一个基于浏览器的界面来管理 MySQL 用户和数据库。

此外,如果您的应用程序处理敏感的用户数据,将您的数据库服务器与有效的 SSL Certificate 配对,可确保在您的应用程序和数据库服务器之间传输的数据保持加密状态,并防止被拦截。

MySQL 用户管理的安全最佳实践

遵循技术步骤只是工作的一半。以下是每个管理员应该实施的关键安全实践:

  1. 永远不要为应用程序连接使用 root 账户。为每个应用程序创建专用的最小权限用户。
  2. 为每个 MySQL 用户使用强大、唯一的密码。考虑使用密码管理器或密钥保管库。
  3. 限制主机访问localhost 或特定 IP 地址。
  4. 定期审计用户账户。删除不再活跃或不必要的账户。
  5. 避免通配符授权 (*.*),除非管理任务绝对需要。
  6. 在生产服务器上启用 MySQL 的审计日志插件以跟踪所有用户活动。
  7. 定期轮换密码,特别是在人员变动或怀疑泄露后。
  8. 在通过网络连接 MySQL 时使用 SSL/TLS,即使在私有 LAN 内也要使用。

快速参考:基本 MySQL 用户管理命令

任务命令
登录到 MySQLmysql -u root -p
创建新用户CREATE USER 'user'@'host' IDENTIFIED BY 'pass';
授予数据库的所有权限GRANT ALL PRIVILEGES ON db.* TO 'user'@'host';
授予只读访问权限GRANT SELECT ON db.* TO 'user'@'host';
刷新权限FLUSH PRIVILEGES;
显示用户授权SHOW GRANTS FOR 'user'@'host';
列出所有用户SELECT user, host FROM mysql.user;
撤销权限REVOKE privileges ON db.* FROM 'user'@'host';
删除用户DROP USER 'user'@'host';

结论

正确的 MySQL 用户管理是数据库安全和运维卫生的基础支柱。通过创建专用用户账户、仅分配每个账户真正需要的权限,以及定期审计用户列表,您可以大幅降低未授权访问、数据泄露和权限提升的风险。

本指南涵盖的命令 — CREATE USERGRANTREVOKEFLUSH PRIVILEGESSHOW GRANTSDROP USER — 构成了每个数据库管理员需要的核心工具包。无论您是管理单个开发数据库还是监督数十个生产实例,持续应用这些实践将使您的 MySQL 环境保持安全、可维护和合规。

如需一个能够为您提供实施这些最佳实践所需的完全控制的托管环境,请探索 AlexHost 的解决方案范围 — 从共享虚拟主机用于直接项目,到完全托管的VPS 控制面板用于需要强大功能和灵活性而无需裸机管理复杂性的团队。