我尽可能地希望将MySQL用户帐户的权限限制为最小,仅授予我所需的最基本权限。
我有一个名为creator
的用户,我想用它来创建新用户、创建新数据库,并将这些用户的权限分配给那些数据库,但仅限于特定格式的数据库。
要创建creator
用户,我需要以下命令(以root身份运行):
GRANT CREATE USER, CREATE ON *.* TO 'creator'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON `my_prefix\_%`.* TO 'creator'@'localhost' WITH GRANT OPTION;
我原以为这样做可以让我创建一个新用户,并将其分配到与 my_prefix_% 匹配的表上的任何权限,但事实并非如此。以 creator
用户身份运行以下查询会导致错误。
CREATE DATABASE IF NOT EXISTS `my_prefix_test`;
CREATE USER 'test'@'localhost' IDENTIFIED BY 'password';
这些工作都能完成,我可以成功创建用户和数据库。但是,当我试图在新数据库上为新用户分配权限时,我遇到了以下问题:
GRANT ALL PRIVILEGES ON `my_prefix_test`.* TO 'test'@'localhost';
> ERROR 1044 (42000): Access denied for user 'creator'@'localhost' to database 'my_prefix_test'
为了安全起见,我还刷新了权限。
有人对这个问题有什么见解吗?使用存储过程是否更容易实现?谢谢!
my_prefixxtest
并相应地授予权限。但是,通过反斜杠转义两个下划线无法使其正常工作。 - Michael Berkowskimyotherdb
的数据库,并试图授予test
用户所有权限,但未成功(这也是我想要的结果)。我认为这应该足够了,谢谢!如果您发布回答的话,我会很高兴接受它。 - Ahorner