用户和权限概述
用户
seekdb 的管理员为用户 root,可以创建普通用户,用户名称在 seekdb 内是唯一的。
权限
权限分为了 3 个级别:
-
全局权限:可以影响整个 seekdb 的权限,例如:修改系统设置、访问所有的表等权限。
-
数据库权限:可以影响某个特定数据库下所有对象的权限,例如:在对应数据库下创建删除表,访问表等权限。
-
对象权限:可以影响某个特定对象的权限,例如:访问一个特定的表、视图或索引的权限。
关于详细的权限分类,参见 权限分类。
权限转授
权限转授解决了授权者集中的问题。通过在授权时指定 with admin/grant option,可以同时授予用户将对应权限转授给其他用户的权限。回收对象权限时,要同时回收该用户转授给其他用户的对应权限,即 A 授予 B 权限,B 授予 C 权限,如果 A 收回 B 的权限,C 的权限也会被回收。回收系统权限时,不会级联回收转授的权限。
角色
为了方便权限的管理,seekdb 设定了角色。角色是一组系统权限、对象权限的组合,角色中也可以包含其他角色。可以把角色授予用户,用户就拥有了角色里面的所有权限。
seekdb 暂无系统内置的默认角色。关于角色管理的相关操作,参见 角色管理。
间接权限
用户的权限,包含直接授予的系统权限或者对象权限,也包含授予角色后,通过角色包获得的权限。大部分操作需要的权限,不论是直接授予的还是通过角色间接拥有的权限,都可以满足条件。对于下列场景,需要有直接权限才可以:
- 创建视图时,访问视图中的对象所需的权限。
- 执行定义者权限的有名 PL 块中的语句所需的权限。
权限检查
在 SQL 解析阶段,解析出一条 SQL 语句中所需的所有权限,逐个检查用户是否拥有对应的权限。对于系统操作的权限,如果权限不足则直接报错权限不足。对于访问对象的权限,如果用户在这个对象上没有任何权限,则报错对象不存在;如果用户在这个对象上有其他权限,只是没有需要的权限,则报错权限不足。