介绍

MySQL是一个开源关系数据库管理系统。它通常作为LAMP 堆栈(代表L inux、A pache、M ySQL 和PHP)的一部分进行部署,并且在撰写本文时,它是世界上最流行的开源数据库。

本指南概述了如何创建新的 MySQL 用户并授予他们执行各种操作所需的权限。

先决条件

为了遵循本指南,您需要访问 MySQL 数据库。本指南假设该数据库安装在运行 Ubuntu 20.04 的虚拟专用服务器上,但无论您如何访问数据库,它概述的原则都应该适用。

如果您无权访问 MySQL 数据库并希望自己设置一个,您可以按照我们的如何安装 MySQL指南之一进行操作。同样,无论服务器的底层操作系统是什么,创建新的 MySQL 用户并授予他们权限的方法通常是相同的。

您也可以启动由云提供商管理的 MySQL 数据库。有关如何启动 DigitalOcean 托管数据库的详细信息,请参阅我们的产品文档。

请注意,您需要更改或自定义的示例命令的任何部分将like this在本指南中突出显示。

创建新用户

安装后,MySQL 会创建一个root用户帐户,您可以用它来管理数据库。该用户对 MySQL 服务器拥有完全权限,这意味着它可以完全控制每个数据库、表、用户等。因此,最好避免在管理功能之外使用此帐户。此步骤概述了如何使用root MySQL 用户创建新用户帐户并授予其权限。

在运行 MySQL 5.7(及更高版本)的 Ubuntu 系统中, MySQL root用户默认设置为使用auth_socket插件进行身份验证,而不是使用密码。该插件要求调用MySQL客户端的操作系统用户名与命令中指定的MySQL用户名匹配。这意味着您需要在命令之前mysql使用rootsudo Ubuntu 用户的权限调用它,以获得对MySQL root用户的访问权限:

sudo mysql

注意:如果您的MySQL root用户配置为使用密码进行身份验证,则您将需要使用不同的命令来访问 MySQL shell。以下将以常规用户权限运行您的 MySQL 客户端,并且您只能通过使用正确的密码进行身份验证来获得数据库内的管理员权限:

mysql -u root -p

一旦您可以访问 MySQL 提示符,您就可以使用语句创建一个新用户CREATE USER。它们遵循以下一般语法:

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

之后CREATE USER,您指定一个用户名。紧接着是一个@符号,然后是该用户将连接的主机名。如果您只计划从 Ubuntu 服务器本地访问此用户,则可以指定localhost。将用户名和主机都用单引号括起来并不总是必要的,但这样做可以帮助防止错误。

在选择用户的身份验证插件时,您有多种选择。前面提到的插件auth_socket很方便,因为它提供了强大的安全性,无需有效用户输入密码即可访问数据库。但它也会阻止远程连接,当外部程序需要与 MySQL 交互时,这会使事情变得复杂。

作为替代方案,您可以完全省略部分语法,让用户使用 MySQL 的默认插件 进行身份验证。MySQL文档推荐这个插件给想要使用密码登录的用户,因为它具有强大的安全功能。WITH authentication_plugincaching_sha2_password

运行以下命令来创建使用 进行身份验证的用户caching_sha2_password。请务必更改sammy为您首选的用户名和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使用以下命令进行身份验证:

ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

创建新用户后,您可以授予他们适当的权限。

授予用户权限

授予用户权限的一般语法如下:

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

此示例语法中的值PRIVILEGE定义允许用户对指定的database和执行哪些操作table。您可以在一个命令中向同一用户授予多个权限,并用逗号分隔各个权限。您还可以通过输入星号 ( *) 代替数据库和表名称来授予用户全局权限。在 SQL 中,星号是用于表示“所有”数据库或表的特殊字符。

为了说明这一点,以下命令授予用户对CREATE、ALTER、 和DROP数据库、表和用户的全局权限,以及对服务器上任何表中 、 和 数据的INSERT权限UPDATE。DELETE它还授予用户使用 查询数据SELECT、使用关键字创建外键REFERENCES以及FLUSH使用权限执行操作的能力RELOAD。但是,您应该只授予用户所需的权限,因此请根据需要随意调整您自己的用户的权限。

您可以在官方 MySQL 文档中找到可用权限的完整列表。

运行此GRANT语句,替换sammy为您自己的 MySQL 用户名,以向您的用户授予这些权限:

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

请注意,该声明还包括WITH GRANT OPTION.这将允许您的 MySQL 用户向系统上的其他用户授予其拥有的任何权限。

警告:某些用户可能希望授予其 MySQL 用户该ALL PRIVILEGES权限,这将为他们提供类似于root用户权限的广泛超级用户权限,如下所示:

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

不应轻易授予如此广泛的权限,因为任何有权访问此 MySQL 用户的人都将完全控制服务器上的每个数据库。

许多指南建议在or语句FLUSH PRIVILEGES之后立即运行该命令,以重新加载授权表以确保新权限生效:

CREATE USERGRANT
FLUSH PRIVILEGES;

然而,根据MySQL 官方文档,当您使用诸如 之类的帐户管理语句间接修改授权表时GRANT,数据库将立即将授权表重新加载到内存中,这意味着FLUSH PRIVILEGES在我们的情况下不需要该命令。另一方面,运行它不会对系统产生任何负面影响。

如果您需要撤销权限,其结构与授予权限几乎相同:

REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';

请注意,撤销权限时,语法要求您使用FROM,而不是TO授予权限时使用的。

您可以通过运行以下命令查看用户当前的权限SHOW GRANTS:

SHOW GRANTS FOR 'username'@'host';

正如您可以使用 删除数据库一样DROP,您可以使用DROP删除用户:

DROP USER 'username'@'localhost';

创建 MySQL 用户并授予他们权限后,您可以退出 MySQL 客户端:

exit

将来,要以新的 MySQL 用户身份登录,您可以使用如下命令:

mysql -u sammy -p

该-p标志将导致 MySQL 客户端提示您输入 MySQL 用户的密码以便进行身份验证。

结论

通过学习本教程,您已经了解了如何在 MySQL 数据库中添加新用户并授予他们各种权限。从这里,您可以继续探索和试验 MySQL 用户的不同权限设置,或者您可能想了解有关一些更高级别 MySQL 配置的更多信息。


By zk

一个程序员

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注