MySQL是一个开源关系数据库管理系统。它通常作为LAMP堆栈(代表L inux、A pache、M ySQL 和PHP)的一部分进行部署,它是世界上最流行的开源数据库。
本文将解答如何创建新的MySQL用户并授予它们执行各种操作所需的权限。
准备工作
为了遵循本指南,您需要访问MySQL数据库。假设该数据库安装在运行 Ubuntu 20.04 的虚拟专用服务器上,但无论您如何访问数据库,它概述的原则都应该适用。
如果您无权访问 MySQL 数据库并希望自己设置一个,您可以按照我们的如何安装 MySQL指南之一进行操作。同样,无论服务器的底层操作系统是什么,创建新的 MySQL 用户并授予他们权限的方法通常是相同的。
您也可以启动由云提供商管理的MySQL数据库。
请注意,您需要更改或自定义的示例命令的任何部分将like this
在本指南中突出显示。
创建新用户
安装后,MySQL 会创建一个root用户帐户,您可以用它来管理数据库。该用户对 MySQL 服务器拥有完全权限,这意味着它可以完全控制每个数据库、表、用户等。因此,最好避免在管理功能之外使用此帐户。此步骤概述了如何使用root MySQL 用户创建新用户帐户并授予其权限。
在运行 MySQL 5.7
(及更高版本)的 Ubuntu 系统中, MySQL root用户默认设置为使用auth_socket
插件进行身份验证,而不是使用密码。该插件要求调用MySQL客户端的操作系统用户名与命令中指定的MySQL用户名匹配。这意味着您需要在命令之前mysql
使用rootsudo
Ubuntu 用户的权限调用它,以获得对MySQL root用户的访问权限:
注意:如果您的MySQL root用户配置为使用密码进行身份验证,则您将需要使用不同的命令来访问 MySQL shell。以下将以常规用户权限运行您的 MySQL 客户端,并且您只能通过使用正确的密码进行身份验证来获得数据库内的管理员权限:
一旦您可以访问 MySQL 提示符,您就可以使用语句创建一个新用户CREATE USER
。它们遵循以下一般语法:
之后CREATE USER
,您指定一个用户名。紧接着是一个@
符号,然后是该用户将连接的主机名。如果您只计划从 Ubuntu 服务器本地访问此用户,则可以指定localhost
。将用户名和主机都用单引号括起来并不总是必要的,但这样做可以帮助防止错误。
在选择用户的身份验证插件时,您有多种选择。前面提到的插件auth_socket
很方便,因为它提供了强大的安全性,无需有效用户输入密码即可访问数据库。但它也会阻止远程连接,当外部程序需要与 MySQL 交互时,这会使事情变得复杂。
作为替代方案,您可以完全省略部分语法,让用户使用 MySQL 的默认插件 进行身份验证。MySQL文档推荐这个插件给想要使用密码登录的用户,因为它具有强大的安全功能。WITH authentication_plugin
caching_sha2_password
运行以下命令创建使用 进行身份验证的用户caching_sha2_password
。请务必更改sammy
为您首选的用户名和password
您选择的强密码:
注意:某些版本的 PHP 存在一个已知问题,会导致caching_sha2_password
.如果您计划将此数据库与 PHP 应用程序(例如 phpMyAdmin)一起使用,您可能需要创建一个用户,该用户将使用较旧但仍然安全的mysql_native_password
插件进行身份验证:
如果您不确定,您始终可以创建一个用户进行身份验证caching_sha2_plugin
,然后ALTER
使用以下命令进行身份验证:
创建新用户后,您可以授予他们适当的权限。
授予用户权限
授予用户权限的一般语法如下:
此示例语法中的值PRIVILEGE
定义允许用户对指定的database
和执行哪些操作table
。您可以在一个命令中向同一用户授予多个权限,并用逗号分隔各个权限。您还可以通过输入星号 ( *
) 代替数据库和表名称来授予用户全局权限。在 SQL 中,星号是用于表示“所有”数据库或表的特殊字符。
为了说明这一点,以下命令授予用户对CREATE
、ALTER
、 和DROP
数据库、表和用户的全局权限,以及对服务器上任何表中 、 和 数据的INSERT
权限UPDATE
。DELETE
它还授予用户使用 查询数据SELECT
、使用关键字创建外键REFERENCES
以及FLUSH
使用权限执行操作的能力RELOAD
。但是,您应该只授予用户所需的权限,因此请根据需要随意调整您自己的用户的权限。
您可以在官方 MySQL 文档中找到可用权限的完整列表。
运行此GRANT
语句,替换sammy
为您自己的 MySQL 用户名,以向您的用户授予这些权限:
请注意,该声明还包括WITH GRANT OPTION
.这将允许您的 MySQL 用户向系统上的其他用户授予其拥有的任何权限。
警告:某些用户可能希望授予其 MySQL 用户该ALL PRIVILEGES
权限,这将为他们提供类似于root用户权限的广泛超级用户权限,如下所示:
不应轻易授予如此广泛的权限,因为任何有权访问此 MySQL 用户的人都将完全控制服务器上的每个数据库。
许多指南建议在or语句FLUSH PRIVILEGES
之后立即运行该命令,以重新加载授权表以确保新权限生效:CREATE USER
GRANT
然而,根据MySQL 官方文档,当您使用诸如 之类的帐户管理语句间接修改授权表时GRANT
,数据库将立即将授权表重新加载到内存中,这意味着FLUSH PRIVILEGES
在我们的情况下不需要该命令。另一方面,运行它不会对系统产生任何负面影响。
如果您需要撤销权限,其结构与授予权限几乎相同:
请注意,撤销权限时,语法要求您使用FROM
,而不是TO
授予权限时使用的。
您可以通过运行以下命令查看用户当前的权限SHOW GRANTS
:
正如您可以使用 删除数据库一样DROP
,您可以使用DROP
删除用户:
创建 MySQL 用户并授予他们权限后,您可以退出 MySQL 客户端:
将来,要以新的 MySQL 用户身份登录,您可以使用如下命令:
该-p
标志将导致 MySQL 客户端提示您输入 MySQL 用户的密码以便进行身份验证。