• 产品更新

如何在MySQL中创建用户?(MySQL创建用户的分步指南)

如何在MySQL中创建用户?(MySQL创建用户的分步指南)

目录

MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS)。它通常是LAMP架构(包含Linux、Apache、MySQL和PHP)的核心组件。凭借其普及度和广泛应用,MySQL已成为全球使用最普遍的开源数据库之一。

本指南将指导您如何在MySQL中创建用户并为其分配执行各类任务所需的权限

前提条件

您需要访问 MySQL 数据库才能完成本指南。本指南基于 安装在 Ubuntu 22.04 虚拟专用服务器上的 MySQL 数据库,但操作步骤通常适用于其他环境。

在不同操作系统和服务器配置中,创建新 MySQL 用户并分配权限的步骤基本一致。

如何在 MySQL 中创建用户(授予全部权限)

安装 MySQL 时,系统会默认创建具有全权访问权限的 root 用户账户。该账户可完全控制所有数据库、表及用户。但最佳实践是将 root 账户保留用于管理任务,并为其他用途创建独立用户账户。

本节说明如何通过 root 账户创建新 MySQL 用户并为其分配特定权限。

在搭载 MySQL 5.7 及以上版本的 Ubuntu 系统中,MySQL root 用户通常通过 auth_socket 插件 进行身份验证,而非密码验证。这意味着 MySQL root 用户需与执行命令的操作系统用户相匹配。

可通过以下命令轻松检查已安装的 MySQL 版本:

要访问 MySQL root 账户,需使用 sudo 配合 MySQL 客户端命令,授予其作为 root MySQL 用户连接所需的权限。

若 MySQL root 用户设置为密码认证,则需使用不同命令访问 MySQL 控制台。请执行以下命令以普通用户身份登录,并输入 root 用户密码以获取数据库管理权限:

# mysql -u root -p

在 MySQL 中创建新用户

进入 MySQL 提示符后,可使用 CREATE USER 语句创建新用户。该命令的通用语法如下:

> CREATE USER ‘用户名’@'主机' IDENTIFIED WITH 认证插件 BY ‘密码’;

创建新用户时,需在 CREATE USER 命令后指定用户名。用户名后需添加 @ 符号及用户连接来源的主机名。若用户仅需从 Ubuntu 服务器本地访问数据库,可使用 localhost。虽然用户名和主机名可选单引号包裹,但为避免潜在错误建议使用。

用户可选择不同身份验证插件。前文提及的auth_socket插件提供强安全保障且无需用户输入密码,但会限制远程连接,这可能影响外部程序访问数据库。

若省略语法中的WITH authentication_plugin部分,系统将默认使用MySQL的caching_sha2_password插件。该插件因其强大的安全特性,是基于密码认证的首选方案。

使用以下命令在 MySQL 中创建使用 caching_sha2_password 进行认证的用户。将 sammy 替换为所需用户名,密码替换为强密码:

> CREATE USER ‘test’@'localhost' IDENTIFIED BY ‘password’;

某些 PHP 版本存在已知问题,可能导致 caching_sha2_password 插件 出现兼容性问题。若计划通过PHP应用(如phpMyAdmin)访问数据库,建议改用较旧但仍安全的mysql_native_password插件创建用户。可通过以下命令在MySQL中创建用户:

> CREATE USER ‘techUser’@'localhost' IDENTIFIED WITH mysql_native_password BY ‘password’;

若不确定,可先使用 caching_sha2_password 插件创建用户,后续如有需要再切换至 mysql_native_password。执行以下命令即可完成切换:

> ALTER USER ‘techUser’@'localhost' IDENTIFIED WITH mysql_native_password BY ‘password’;

新用户创建后,即可为其分配必要权限。

在 MySQL 中创建数据库

需创建数据库并为用户分配必要权限。创建数据库命令如下:

> CREATE DATABASE testdatabase;

这将创建名为“testdatabase”的空数据库,可用于您的应用程序。

授予用户权限:创建数据库后,需为用户 testUser 授予完整访问权限。执行命令:

> GRANT ALL PRIVILEGES ON testdatabase.* TO ‘techUser’@'localhost';

该命令授予 techUser 对测试数据库的完全控制权,允许其对数据库内所有表执行全部操作(如 SELECT、INSERT、UPDATE、DELETE 等)。其中 localhost 部分表示用户仅能从本地服务器访问数据库。

此配置既确保用户具备管理特定数据库的必要权限,又将其访问范围限定在mytestapp数据库及本地服务器。

MySQL中授予用户全部权限(Grant All Privileges MySQL)

在MySQL中授予用户特定权限的通用语法为:

> GRANT PRIVILEGE ON database.table TO ‘username’@'host';

此处PRIVILEGE指定用户对特定数据库及表可执行的操作。单条命令中可通过逗号分隔赋予多项权限。若需授予全局权限(适用于所有数据库和表),使用星号(*)表示“全部”。

例如,以下命令授予用户创建、修改、删除数据库及表的权限,同时允许插入、更新、删除数据以及执行SELECT查询。该命令还允许创建外键,并通过RELOAD权限执行FLUSH操作:

> GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO ‘techUser’@'localhost' WITH GRANT OPTION;

WITH GRANT OPTION 允许用户将权限授予他人。出于安全考虑,请确保仅向用户分配必要的权限。

完整可用权限列表可查阅官方 MySQL 文档

部分指南建议在创建用户或授予权限后执行 FLUSH PRIVILEGES 命令以重新加载权限表并应用新权限:

FLUSH PRIVILEGES;

但根据MySQL官方文档,使用GRANT等账户管理语句时,权限表会自动重新加载至内存,因此严格来说无需执行FLUSH PRIVILEGES。不过运行该命令不会对系统造成损害。

重要提示:授予MySQL用户ALL PRIVILEGES权限将使其获得类似root用户的超级用户访问权限。该命令示例如下:

> GRANT ALL PRIVILEGES ON *.* TO ‘techUser’@'localhost' WITH GRANT OPTION;

但需谨慎使用此级别的权限,因其赋予用户对服务器上所有数据库的完全控制权。任何访问该用户账户的人员都将能够修改或删除任意数据库。

若需撤销权限,语法与授予类似,但需使用 FROM 替代 TO:

> REVOKE 权限类型 ON 数据库名.表名 FROM ‘用户名’@'主机名';

查看用户当前权限可执行:

> SHOW GRANTS FOR ‘用户名’@'主机名';

在MySQL中删除用户

若需删除用户,请使用DROP USER命令:

> DROP USER ‘username’@'localhost';

完成用户及权限配置后,可退出MySQL客户端:

> exit

今后以新用户身份登录时,请使用以下命令:

# mysql -u techUser -p

-p 参数将提示输入用户密码。

总结

本指南已指导您完成 MySQL 用户创建及全权限授予操作。您可进一步探索不同权限配置方案,或深入研究 MySQL 高级配置。

如需掌握更多 MySQL 基础知识,欢迎查阅相关资源及 SQL 文档。

BlueServers.com – 全球专用服务器!

BlueServers 是充满活力与热忱的托管服务商,致力于提供卓越的在线解决方案。

若您正在寻找由专业团队支持的顶级托管服务,您的寻觅至此终结。我们确保您获得最佳客户体验。立即开启合作,提升您的在线形象!

Share

关于作者


scale 1
Ready to scale?

Start for free and unlock high-performance infrastructure with instant setup.

Get started arrow button

帮助我们改进 — 分享您的反馈

您的意见有助于我们提供更好的服务。