Web 与数据

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

MySQL 是一款开源的数据库管理软件,可用于存储、组织和检索数据。本教程简要介绍如何在 MySQL shell 中创建新用户、按数据库和表授予或撤销各类权限、查看已授予的权限,以及删除用户。

· 1 分钟阅读 · 难度 初级

引言

MySQL 是一款开源的数据库管理软件,可帮助用户存储、组织和检索数据。它提供了范围广泛的选项,用于为特定用户授予适合的表权限和数据库权限。本教程将简要介绍其中若干可用的选项。

Illustration 1 — Comment créer un nouvel utilisateur et octroyer des autorisations dans MySQL

如何创建新用户

您想必已经以 root user 身份在 MySQL 中做过修改,并拥有对所有数据库的完全访问权限。不过,在需要设置额外限制的情况下,也有办法创建具有自定义权限的用户。

我们先在 MySQL shell 中创建一个新用户:

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

说明:在本教程中,当我们在 MySQL shell 中添加用户时,会把用户的主机指定为 localhost,而不是服务器的 IP 地址。localhost 是一个主机名,含义是「这台计算机」。MySQL 对这个特定的主机名有专门的处理:当使用该主机的用户连接 MySQL 时,它会尝试通过 Unix 套接字文件连接到本地服务器。因此,一般来说,如果您打算通过 SSH 连接到服务器,或者运行本地 mysql 客户端连接到本地 MySQL 服务器,就可以使用 localhost。

在此阶段,username 还没有任何权限,无法对数据库执行任何操作。事实上,即使 username 尝试连接(使用密码 password),也无法进入 MySQL shell。

因此,首先要做的是让该用户能够访问它所需要的信息。

GRANT ALL PRIVILEGES ON * . * TO 'username'@'localhost';

该命令中的星号分别指代可以访问的数据库和表。这条具体的命令允许该用户对全部数据库和表进行读取、修改、执行以及各类操作。

请注意,在本例中,我们授予了 username 对数据库中所有内容的完全 root 访问权限。虽然这有助于说明某些 MySQL 概念,但在大多数使用场景中这种做法可能并不可行,而且会使您的数据库面临严重的安全风险。

为新用户配置好所需的权限之后,务必始终重新加载全部权限。

FLUSH PRIVILEGES;

现在,您的修改已经生效。

如何为用户授予不同的权限

以下是可以授予用户的其他常用权限的简要列表。

  • ALL PRIVILEGES:如前所述,这会授予 MySQL 用户对指定数据库的完全访问权限(如果没有选择数据库,则是对整个系统的全局访问权限)
  • CREATE:允许创建新的表或数据库
  • DROP:允许删除表或数据库
  • DELETE:允许从表中删除行
  • INSERT:允许向表中插入行
  • SELECT:允许使用 SELECT 命令读取数据库
  • UPDATE:允许更新表中的行
  • GRANT OPTION:允许授予或撤销其他用户的权限

要为某个特定用户授予权限,可以使用以下命令:

GRANT type_of_permission ON database_name.table_name TO 'username'@'localhost';

如果您希望让该用户访问任意数据库或任意表,请注意把数据库名或表名替换为星号(*)。

每次更新或修改权限之后,务必使用 Flush Privileges 命令。

要撤销某项权限,其结构与授予权限的结构几乎完全相同:

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

请注意,撤销权限时应使用 FROM 语法,而不是我们授予权限时所使用的 TO。

您可以运行以下命令,查看当前已授予某个用户的权限:

SHOW GRANTS FOR 'username'@'localhost';

正如您可以使用 DROP 删除数据库一样,也可以使用 DROP 彻底删除某个用户:

DROP USER 'username'@'localhost';

要测试您的新用户,请输入以下内容断开连接:

quit

然后在终端中使用以下命令重新连接:

mysql -u username -p

结论

完成本教程后,您应当对如何在 MySQL 数据库中添加新用户并为其授予不同权限有了更清晰的认识。在此基础上,您可以继续探索和试验数据库中存在的各种权限设置,或者进一步学习一些更高级的 MySQL 配置。

本作品采用知识共享 署名-非商业性使用-相同方式共享 4.0 国际许可协议