我有一个具有几个角色的 MariaDB 数据库。为了简单起见,我们假设我有一个
admins
角色。它是由 root
用户使用以下命令创建的:
CREATE ROLE admins;
GRANT ALL PRIVILEGES ON *.* TO admins WITH GRANT OPTION;
我还有另一个角色
default
,没有任何特权。
我将 admins
角色授予用户 myuser
(再次使用 root
):
CREATE USER myuser IDENTIFIED BY 'mysuperstrongpassword';
GRANT admins TO myuser;
考虑到这一点,我使用
myuser
帐户登录到会话,激活 admins
角色并创建了一个新用户 newuser
。但是,当我尝试将 default
角色授予 newuser
时,使用
GRANT default TO newuser;
我被
Access denied to user 'myuser'@'%'
击中。根据我对 GRANT OPTION
特权的理解,被授予者应该有权授予任何特权。是否需要不同的权限才能设置角色?
我找到了一些有关
ADMIN OPTION
权限的信息,但是无法将其授予具有 的用户或角色
GRANT ALL PRIVILEGES ON *.* TO [role|user] WITH ADMIN OPTION;
我无法验证我的版本是否存在
ADMIN OPTION
。
当前 MariaDB 版本是 10.11.7
您列出了一些问题,所以如果我遗漏了任何问题,请发表评论。
授予用户的角色不是默认的。可以使用 SET DEFAULT ROLE 进行设置,例如:
SET DEFAULT ROLE admin FOR myuser
请注意,一个用户只能拥有一个默认角色。使用 SET ROLE 切换到显式角色(如果有):
SET ROLE admin
对于您的
default
角色,如果您希望所有用户都拥有一组基本权限,请使用 TO PUBLIC
语法 (ref):
GRANT SELECT ON common_db.* TO PUBLIC
授予
ADMIN OPTION
不是特权,因此它具有 显式语法(不使用 PRIVILEGE
):
GRANT admin ON [role|user] WITH ADMIN OPTION
GRANT default ON myuser WITH ADMIN OPTION