首页 > 解决方案 > 用户可以在没有 ALL PRIVILEGES 的情况下获得 GRANT PERMISSION 吗?

问题描述

我想创建一个可以注册其他新用户的用户,但我不希望他拥有ALL PRIVILEGES,看起来我在这里做错了什么。

我试过以下

GRANT SELECT, INSERT, UPDATE ON database.* TO 'USER' IDENTIFIED BY '123456' WITH GRANT OPTION

但是,当我使用此 USER 帐户登录并尝试将权限授予另一个用户 MySQL/MariaDB 时,返回:You are not allowed to create a user with GRANT

是否可以让一个只能在单个数据库上选择/插入/更新的用户将这些相同的权限授予新用户?

标签: mysqlmariadb

解决方案


简短的回答:是的。不仅适用于新帐户,还适用于任何存在的帐户。

根据MySQL 的文档

可选的 WITH 子句用于使用户能够向其他用户授予权限。WITH GRANT OPTION 子句使用户能够将其在指定特权级别上的任何特权授予其他用户。

[...]

请注意,当您在特定权限级别授予用户 GRANT OPTION 权限时,该用户在该级别拥有(或将来可能授予)的任何权限也可以由该用户授予其他用户。

因此,正如文档所述,具有 、 和 特权的帐户SELECT可以INSERTUPDATE其他GRANT帐户提供相同的权限。

但是,文档中有一些重要的细节需要注意:

  1. 请注意您授予谁GRANT OPTION特权,因为具有不同特权的两个用户可能能够组合特权!
  2. 假设您授予用户INSERT对数据库的权限。如果您随后授予SELECT数据库权限并指定WITH GRANT OPTION,则该用户不仅可以授予其他用户SELECT权限,还可以授予INSERT. 如果您随后授予UPDATE用户对数据库的权限,则用户可以授予INSERTSELECTUPDATE

如果您要允许其他帐户管理权限,例如初级 DBA 或 HR 成员,请考虑查看您的数据库权限审核过程,以确保识别和纠正意外授予。


推荐阅读