如何在 MySQL 中创建新用户并授予权限

简介

MySQL 是一个开源的关系型数据库管理系统。它通常作为 LAMP stack 的一部分部署(LAMP 代表 Linux, Apache, MySQL, 和 PHP),截至目前,MySQL 是世界上最流行的开源数据库。

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

先决条件

为了按照本指南操作,您需要访问一个 MySQL 数据库。本指南假设该数据库安装在运行 Ubuntu 20.04 的虚拟专用服务器上,尽管它所概述的原则应该适用于无论您如何访问您的数据库。

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

请注意,您需要更改或自定义的示例命令部分将在本指南中以 这样 的方式突出显示。

创建新用户

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

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

sudo mysql

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

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

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

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

作为替代,您可以完全省略语法中的 WITH authentication_plugin 部分,以使用户使用 MySQL 的默认插件 caching_sha2_password 进行身份验证。MySQL 文档推荐这个插件,因为它具有强大的安全功能,适合希望使用密码登录的用户。

运行以下命令以创建一个使用 caching_sha2_password 进行身份验证的用户。确保将 sammy 更改为您喜欢的用户名,password 更改为您选择的强密码:

CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

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

授予用户权限

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

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

此示例语法中的 PRIVILEGE 值定义了用户在指定的 databasetable 上允许执行的操作。您可以通过用逗号分隔每个权限来在一条命令中向同一个用户授予多个权限。您还可以通过在数据库和表名的位置输入星号 (*) 来全局授予用户权限。在 SQL 中,星号是用来表示“所有”数据库或表的特殊字符。

举例来说,以下命令授予用户全局权限来 CREATEALTERDROP 数据库、表和用户,以及在服务器上的任何表中执行 INSERTUPDATEDELETE 数据的权限。它还授予用户使用 SELECT 查询数据、使用 REFERENCES 关键字创建外键,以及使用 RELOAD 权限执行 FLUSH 操作的能力。但是,您应该只授予用户他们需要的权限,因此请随时根据需要调整您自己用户的权限。

您可以在官方 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 用户向系统上的其他用户授予它拥有的任何权限。

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

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 配置。

有关 MySQL 基础知识的更多信息,您可以查看以下教程:

相关推荐

  1. 如何 MySQL 创建用户授予权限

    2024-05-05 03:38:04       13 阅读
  2. Mysql创建用户赋予权限

    2024-05-05 03:38:04       46 阅读
  3. MySQL 创建用户和分配权限

    2024-05-05 03:38:04       36 阅读
  4. 创建用户 admin 授予 sudo管理员权限的方法

    2024-05-05 03:38:04       41 阅读
  5. MySQL创建用户赋予数据库权限

    2024-05-05 03:38:04       34 阅读
  6. MySqlMySQL 如何创建用户

    2024-05-05 03:38:04       33 阅读
  7. Ubuntu 22.04 系统创建用户授权sudo权限

    2024-05-05 03:38:04       45 阅读
  8. 方案:如何列出 Jira 授予用户的所有权限

    2024-05-05 03:38:04       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-05 03:38:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-05 03:38:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-05 03:38:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-05 03:38:04       20 阅读

热门阅读

  1. Docker容器管理详解

    2024-05-05 03:38:04       48 阅读
  2. json文件的读取

    2024-05-05 03:38:04       10 阅读
  3. Edge浏览器

    2024-05-05 03:38:04       10 阅读
  4. 如何学习 Unreal Engine

    2024-05-05 03:38:04       38 阅读
  5. 【Git命令】通过在线demo学习

    2024-05-05 03:38:04       12 阅读
  6. mysql 删除数据,导致存在表空间碎片的解决方法

    2024-05-05 03:38:04       10 阅读
  7. vue的action与mutation 的区别

    2024-05-05 03:38:04       9 阅读