三权分立
默认权限机制和管理员两节的描述基于的是数据库创建之初的默认情况。从前面的介绍可以看出,默认情况下拥有SYSADMIN属性的系统管理员,具备系统最高权限。
在实际业务管理中,为了避免系统管理员拥有过度集中的权利带来高风险,可以设置三权分立,将系统管理员的创建用户和审计管理的权限分别分给安全管理员和审计管理员。
三权分立后,系统管理员将不再具有CREATEROLE属性(安全管理员)和AUDITADMIN属性(审计管理员)能力,即不再拥有创建角色和用户的权限,也不再拥有查看和维护数据库审计日志的权限。关于CREATEROLE属性和AUDITADMIN属性的更多信息请参考CREATE ROLE。
初始用户的权限不受三权分立设置影响。因此建议仅将此初始用户作为DBA管理用途,而非业务应用。
三权分立的设置办法为:将GUC参数enableSeparationOfDuty设置为on。
如需使用三权分立权限管理模型,应在数据库初始化阶段指定,不建议来回切换权限管理模型。特别的,如需从非三权分立权限管理模型切换至三权分立权限管理模型,应重新审视已有用户的权限集合。如用户具备系统管理员权限和审计管理员权限,则需要进行权限裁剪。
三权分立后,系统管理员对其他用户的非系统模式不再具有权限,因此在未被授予其他用户模式的权限前,也不能访问放在其他用户模式下的对象。三权分立前的权限详情及三权分立后的权限变化,请分别参见表1和表2。
对象名称 |
初始用户(id为10) |
系统管理员 |
安全管理员 |
审计管理员 |
普通用户 |
---|---|---|---|---|---|
表空间 |
具有所有的权限。 |
对表空间有创建、修改、删除、访问、分配操作的权限。 |
不具有对表空间进行创建、修改、删除、分配的权限,访问需要被赋权。 |
||
模式 |
对除dbe_perf以外的所有模式有所有的权限。 |
对自己的模式有所有的权限,对其他用户的非系统模式无权限。 |
|||
自定义函数 |
对所有用户自定义函数有所有的权限。 |
对自己的函数有所有的权限,对其他用户的函数仅有调用权限。 |
|||
自定义表或视图 |
对所有用户自定义表或视图有所有的权限。 |
对自己的表或视图有所有的权限,对其他用户的表或视图无权限。 |
对象名称 |
初始用户(id为10) |
系统管理员 |
安全管理员 |
审计管理员 |
普通用户 |
---|---|---|---|---|---|
表空间 |
无变化。 依然具有所有的权限。 |
无变化 |
无变化 |
||
模式 |
权限缩小。 对自己的模式有所有的权限,对其他用户的非系统模式无权限。 |
无变化 |
|||
自定义函数 |
在未被授予其他用户的非系统模式的权限前,不能访问放在其他用户模式下的函数。 |
无变化 |
|||
自定义表或视图 |
在未被授予其他用户的非系统模式的权限前,不能访问放在其他用户模式下的表或视图。 |
无变化 |
PG_STATISTIC系统表和PG_STATISTIC_EXT系统表存储了统计对象的一些敏感信息,如高频值MCV。进行三权分立后系统管理员仍可以通过访问这两张系统表,获取统计信息里的敏感信息。