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 贡献。