一个角色就是把一堆的权限捆绑在一起授权,这个功能对于有很多用户拥有相同权限的情况可以显著提高管理效率。在有角色之前,这种情况只能为每个用户都做一大堆的授权操作,或者是给很多个需要相同权限的用户提供同一个账号去使用,这又会导致你要分析用户行为的时候不知道哪个操作是哪个具体用户发起的。

    有了角色,这样的管理就太容易了。例如,可以把权限需求相同的用户赋予同一个角色,只要定义好这个角色的权限就行,要更改这类用户的权限,只需要更改这个角色的权限就可以了,变化会影响到所有这个角色的用户。

    创建角色需要使用 CREATE ROLE 语句,删除角色使用 DROP ROLE 语句。然后再通过 GRANT 语句给角色增加授权,也可以把角色授权给用户,然后这个角色的权限就会分配给这个用户。同样,REVOKE 语句也可以用来移除角色的授权,或者把一个用户移除某个角色。

    只有直接被授予用户的角色才可以使用 SET ROLE 语句,间接授予的角色并不能被 SET ROLE 设置。例如角色B被授予角色A,而角色A被授予用户A,那么用户A只能 SET ROLE 角色A,而不能设置角色B。

    从 MariaDB 10.1.1 开始,可以利用 SET DEFAULT ROLE 语句来给某个用户设置默认的角色。当用户链接的时候,会默认使用这个角色,其实就是连接后自动做了一个 SET ROLE 语句。

    创建一个角色并给他赋权:

    角色也可以授权给另一个角色:

    但是只能 SET ROLE 直接给用户的角色。像这里 hulda 只能 SET ROLE journalist,而不能 SET ROLE writer,并且只要启用了 journalist 角色,hulda 也自动获得了 writer 角色的权限:

    角色和视图、存储过程。