我知道我可以创建具有create user
权限的用户,如下所示:
create user primary_user identified by 'pass';
grant all on *.* to primary_user with grant option;
这将允许我在使用primary_user
登录时创建用户。
现在让我们假设我有一个数据库的子集,所有数据库都带有前缀abc_
,并且我希望我的primary_user
只能访问这些数据库。
然后上面的grant
查询看起来像这样:
grant all on `abc_%`.* to `primary_user` with grant option;
现在的问题是,当我使用primary_user
登录并尝试创建secondary_user
时,我收到以下错误:
错误1227(42000):拒绝访问;你需要(至少一个) 此操作的CREATE USER权限
TL; DR
基本上我想要的是primary_user
只能访问带有abc_
前缀的数据库,并且还能够创建次要用户,而这些用户又只能访问带有{的数据库{1}}前缀。
这可能吗?或者,我是唯一一个使用abc_
create user
权限的用户帐户创建辅助用户的选项?
答案 0 :(得分:1)
如MySQL Documentation中所述:
要使用CREATE USER,您必须具有全局CREATE USER权限或 mysql数据库的INSERT权限。
因此,具有特定数据库特权的用户无法创建用户。当然,由于您有with grant option
,您的primary_user可以将所有数据库级权限授予其他已创建的用户(对于abc_数据库)。
注意#1:Here您可以找到一个有趣的表格,其中包含各种特权以及可以授予的不同级别。
注意#2:在向非管理员用户提供GRANT OPTIONS时要格外小心,因为他们可以修改其他用户的权限,这可能会导致混乱。 Open Web Application Security Project州:
[授予权限] ...应适当限制在DBA和数据(表)中 拥有者。根据需要提供特定权限并使用 不同用途的不同登录。