【发布时间】:2020-10-08 07:48:14
【问题描述】:
我正在建立一个用户有权访问数据库的数据库。问题是我希望这个用户拥有创建和删除表的权限,但他不应该有创建和删除数据库的能力,甚至是分配给他的数据库。
我在 MariaDB 和 MySQL 的文档中读到 DROP 权限适用于数据库、表和视图:
- https://mariadb.com/kb/en/grant/#comments
- https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_drop
就我而言,我尝试了以下命令:
- 创建数据库后,我将所有权限授予 MY_USER,这就是我看到用户可以在数据库上做任何他想做的事情(甚至删除它)的地方。 命令:
GRANT ALL PRIVILEGES ON "MY_DATABASE".* TO "MY_USER"@"localhost"; FLUSH PRIVILEGES;
- 在那之后,我撤销了权限,我试图给 MY_USER 一些权限,但没有 DROP 权限,它的工作,用户不能删除数据库,但是在数据库中创建一个表后,他不能删除它。 命令:
REVOKE ALL PRIVILEGES ON "MY_DATABASE".* FROM "MY_USER"@"localhost"; FLUSH PRIVILEGES;
GRANT SELECT, INSERT, UPDATE, [...] ON `MY_DATABASE`.* TO `MY_USER`@`localhost`; FLUSH PRIVILEGES;
所以我想知道是否可以设置规则,或者数据库管理 Web 应用程序,类型 Adminer 或 PHPMyAdmin 是否允许我的用户创建和删除数据库中包含的表,但不能创建和删除数据库本身。
提前感谢您,祝您有美好的一天!
【问题讨论】:
-
如果用户能够删除数据库中的所有表,那么他们不能删除数据库真的有意义吗?零表的数据库包含零有用数据。
-
@Damien_The_Unbeliever 我完全同意,如果用户可以选择从数据库中删除所有表,他们也可以删除数据库。现在的问题是,当且仅当原始数据库已被删除时,我希望该用户能够再次创建数据库。换句话说,只有当它的名称与原始数据库相同并且原始数据库已被删除时,用户才有可能创建单个数据库。
标签: mysql sql database shell mariadb