MariaDB 10.1.1: 默认角色
众所周知,MariaDB 自 MariaDB 10.0.5 版本起就支持角色。它们的实现几乎与 SQL Standard 2003 中指定的特性 T331 “基本角色”和 T332 “扩展角色”完全一致。
但我们经常听到抱怨,用户对纯粹的标准特性集并不满意。特别是,标准规定必须执行
SET ROLE foobar;
才能使用授予给角色 foobar 的权限。这并非总是方便,有时甚至不可能 (想象一下,你需要将角色权限授予给闭源应用程序使用的账户)。必须有某种方法可以在用户连接时自动启用给定的角色。
为了解决这个问题,我们引入了默认角色的概念。给定用户的默认角色在该用户连接时会自动启用。问题解决了!
要将 foobar 设置为默认角色,你可以,很合乎逻辑地,使用
SET DEFAULT ROLE foobar;
这会将你的默认角色存储在 mysql.user
表中,下次你连接时,角色 foobar 将自动为你启用。
要移除默认角色,请使用
SET DEFAULT ROLE NONE;
这类似于标准的 SET ROLE
语句。
你也可以为其他用户设置默认角色 (还记得那个闭源应用程序的使用案例吗?)
SET DEFAULT ROLE foobar FOR user@host;
就权限而言,如果你可以启用一个角色 (使用 SET ROLE
语句),你就可以将其设为默认 (使用 SET DEFAULT ROLE
语句)。但要为他人更改默认角色,你需要对 mysql.user
表有 INSERT 权限 — 这与为他人更改密码所需的权限相同。
在使用默认角色之前,不要忘记运行 mysql_upgrade
— 因为它们存储在权限表中,这些表必须更新到最新版本才能包含必要的列。否则 SET DEFAULT ROLE
语句将失败。
此功能的实现由 Vicenţiu Ciorbaru 贡献。