介绍
MySQL 是一款开源关系型数据库管理系统。它通常作为 LAMP 技术栈(Linux、Apache、MySQL 和 PHP)的一部分使用,并且截至撰写本文时,它是世界上最流行的开源数据库。本指南将解释如何创建一个新的 MySQL 用户,并授予其执行各种操作所需的权限。.
先决条件
要遵循本指南,您需要访问 MySQL 数据库。本指南假设数据库安装在运行 Ubuntu 20.04 的虚拟专用服务器上,但无论您如何访问数据库,本指南中解释的原理都适用。如果您没有 MySQL 数据库的访问权限,并且想要自行设置,您可以参考我们提供的 MySQL 安装指南。同样,无论您的服务器底层操作系统是什么,创建新的 MySQL 用户并授予其权限的步骤通常都是相同的。.
创建新用户
安装完成后,MySQL 会创建一个 root 用户帐户,您可以使用该帐户管理数据库。此用户拥有 MySQL 服务器的全部权限,这意味着它可以完全控制每个数据库、表、用户等。因此,最好避免将此帐户用于管理功能之外的其他用途。本步骤将介绍如何使用 MySQL root 用户创建新用户帐户并授予其权限。.
在运行 MySQL 5.7(及更高版本)的 Ubuntu 系统上,MySQL root 用户默认使用 auth_socket 插件进行身份验证,而不是密码。该插件要求调用 MySQL 客户端的操作系统用户名与命令中指定的 MySQL 用户名匹配。这意味着您必须在 mysql 命令前加上 sudo,才能以 Ubuntu root 用户的权限调用该命令,从而获得对 MySQL root 用户的访问权限:
sudo mysql如果您的 MySQL root 用户配置了密码验证,则需要使用不同的命令来访问 MySQL shell。以下命令将以普通用户权限运行 MySQL 客户端,您只需使用正确的密码进行身份验证即可获得数据库的管理员权限:
mysql -u root -p一旦您获得 MySQL 提示符的访问权限,您就可以使用以下短语创建一个新用户 创建用户 创建。这些命令遵循以下通用语法:
CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';后 创建用户 您需要指定用户名。用户名后紧跟一个 @ 符号,然后是该用户将要连接的主机名。如果您仅打算从 Ubuntu 服务器本地访问该用户,则可以指定 localhost。用户名和主机名并非总是需要用引号括起来,但这样做有助于避免错误。.
选择用户身份验证插件时,您有多种选择。插件 认证套接字 如前所述,这种方式的优点在于它提供了强大的安全性,无需经过身份验证的用户输入密码即可访问数据库。但它也阻止了远程连接,这会使外部应用程序需要与 MySQL 交互时变得复杂。.
另一种方法是完全省略语法中的 `WITH authentication_plugin` 部分,让用户使用默认的 MySQL 插件 `caching_sha2_password` 进行身份验证。MySQL 文档建议希望使用密码登录的用户使用此插件,因为它具有强大的安全特性。.
要创建使用 caching_sha2_password 进行身份验证的用户,请运行以下命令。请确保 萨米 为您的用户名和密码选择一个强密码:
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
某些 PHP 版本存在一个已知问题,会导致 caching_sha2_password 函数失效。如果您计划将此数据库与 PHP 应用程序(例如 phpMyAdmin)一起使用,则可能需要创建一个使用较旧但仍然安全的 mysql_native_password 扩展进行身份验证的用户:
CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';如果您不确定,您可以创建一个使用 caching_sha2_plugin 进行身份验证的用户,然后使用以下命令进行更改:
ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';创建新用户后,您可以为其授予相应的权限。.
授予用户权限
授予用户权限的通用命令如下:
GRANT PRIVILEGE ON database.table TO 'username'@'host';本示例语法中的 PRIVILEGE 值指定了用户可以对指定的数据库和表执行哪些操作。您可以在一条语句中授予用户多个权限,只需用逗号分隔即可。您还可以通过在数据库和表名中输入星号 (*) 来授予用户全局权限。在 SQL 中,星号是用于表示“所有”数据库或表的特殊字符。.
例如,以下命令赋予用户创建、修改和删除数据库、表和用户的全局权限,以及在服务器上的任何表中插入、更新和删除数据的权限。它还允许用户查询数据。 选择 搜索,带有关键字的外键 参考 创建和运营 冲洗 积分 重新加载 但是,您应该只授予用户他们需要的权限,以便您可以根据需要调整用户权限。.
您可以在此处查看所有可用积分的完整列表 MySQL官方文档 找到它。.
运行以下 GRANT 语句,将 Sammy 替换为您的 MySQL 用户名,以授予您的用户以下权限:
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;请注意,此语句还包含 WITH GRANT 选项。这允许您的 MySQL 用户将其拥有的任何权限授予系统上的其他用户。.
某些用户可能希望授予其 MySQL 用户所有权限,这将赋予他们类似于 root 用户的广泛超级用户权限,例如:
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
不应轻易授予如此广泛的权限,因为任何拥有此 MySQL 用户访问权限的人都将完全控制服务器上的每个数据库。.
许多指南建议在执行 CREATE USER 或 GRANT 语句后立即运行 FLUSH PRIVILEGES 命令,以重新加载授权表,确保应用新的权限:
FLUSH PRIVILEGES;然而,根据 MySQL官方文档当您使用诸如 GRANT 之类的账户管理语句间接修改授权表时,数据库会立即将授权表加载到内存中,这意味着在本例中不需要执行 FLUSH PRIVILEGES 命令。另一方面,执行该命令也不会对系统造成任何负面影响。.
如果需要撤销许可证,其流程与授予许可证的流程几乎相同:
REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';请注意,撤销权限时,语法要求使用 `\n` 而不是 `\n`。 到您在授予权限时使用的 从使用。.
通过执行该命令 展览资助 您可以查看用户的当前权限:
SHOW GRANTS FOR 'username'@'host';您可以使用数据库 降低 删除,您可以从 降低 要删除用户,请使用:
DROP USER 'username'@'localhost';创建 MySQL 用户并授予其权限后,即可退出 MySQL:
exit
将来,要以新的 MySQL 用户身份登录,您将使用类似以下命令:
mysql -u sammy -p-p 参数会使 MySQL 客户端提示您输入 MySQL 用户密码进行身份验证。.
结果
通过本教程,您学习了如何在 MySQL 数据库中添加新用户并授予他们各种权限。接下来,您可以继续探索和尝试不同的 MySQL 用户权限设置,或者您可能想了解更多更高级的 MySQL 设置。.









