允许MySQL用户授予自己对新数据库的权限

5

我有一个MySQL用户,我们称之为Tom。Tom拥有全局的CREATE和SHOW DATABASES权限,并具有“GRANT”选项。 该用户被分配了基于每个数据库的SELECT、INSERT、UPDATE和DELETE权限。然而,在Tom创建新数据库之后,尽管拥有全局GRANT选项,他无法设置自己的SELECT等权限。 错误信息是(可预测的):

CREATE DATABASE `my_new_db`; -- this is fine
GRANT SELECT , INSERT , UPDATE , DELETE ON `my_new_db` . * TO 'Tom'@'%';
*Access denied for user 'Tom'@'%' to database 'my_new_db'*

这是通过PHP实现的,但我怀疑这并没有太大的区别。

有人能告诉我我做错了什么!谢谢 =]

2个回答

2

如果您没有权限,您无法授予权限。Tom需要具有全局SELECT、INSERT、UPDATE和DELETE权限,才能将它们授予其他人。


真的吗?那太傻了。所以基本上我必须创建一个“授权”用户? - Grim...
我不明白。那怎么跟汤姆现有的角色有什么不同呢? - kbolino
Tom的真正角色是读写用户,但仅限于某些数据库。我需要动态创建这些数据库,但如果Tom无法授予自身对它们的访问权限,那么我就需要找到其他解决办法。我只是真的不想有一个可以访问所有数据库的用户而已。这不是什么大问题,但我还是有点小不爽=] - Grim...
很遗憾,似乎没有任何方法可以做到这一点。你最好的选择是创建一个专门的管理员,或者使用perissf所描述的技术,但在这种情况下,你需要事先知道数据库的名称。 - kbolino
数据库名称将类似于panel_[int],因此我可以列出1000个权限集,但这感觉很不好(尤其是在几年后有人创建panel_1001时会更加混乱)。现在我有了一个全局的超级用户,这是我希望避免的事情。没关系。 - Grim...

2
你做得很正确。这是有意为之的。不过,你可以在参考手册中找到如下内容: "MySQL 允许您授予不存在的数据库或表的权限。对于表,要授予的权限必须包括 CREATE 权限。这种行为是有意为之的,旨在使数据库管理员为稍后创建的数据库或表准备用户帐户和权限。"

http://dev.mysql.com/doc/refman/5.1/en/grant.html#grant-privileges


2
因此,假定的程序是超级用户授予Tom在一些尚不存在的数据库上进行SELECT、INSERT、UPDATE等操作的权限:TOM_db1、TOM_db2等等...当Tom需要时,他可以自由创建这些数据库。 - perissf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接