三权分立
5.2.1默认权限机制和5.2.2管理员两节的描述基于的是Vastbase创建之初的默认情况。从前面的介绍可以看出,默认情况下拥有SYSADMIN属性的系统管理员,具备系统最高权限。
在实际业务管理中,为了避免系统管理员拥有过度集中的权利带来高风险,可以设置三权分立。将系统管理员的部分权限分立给安全管理员和审计管理员,形成系统管理员、安全管理员和审计管理员三权分立。
三权分立后,系统管理员将不再具有CREATEROLE属性(安全管理员)和AUDITADMIN属性(审计管理员)能力。即不再拥有创建角色和用户的权限,并不再拥有查看和维护数据库审计日志的权限。关于CREATEROLE属性和AUDITADMIN属性的更多信息请参考12.19.44CREATE ROLE。
三权分立后,系统管理员只会对自己作为所有者的对象有权限。
初始用户的权限不受三权分立设置影响。因此建议仅将此初始用户作为DBA管理用途,而非业务应用。
三权分立的设置办法为:将参数enable_separation_of_duty设置为on。
三权分立前的权限详情及三权分立后的权限变化,请分别参见表5-9和表5-10。
表5-9 默认的用户权限
对象名称 | 初始用户(id为10) | 系统管理员 | 监控管理员 | 运维管理员 | 安全管理员 | 审计管理员 | 普通用户 |
---|---|---|---|---|---|---|---|
表空间 | 具有除私有用户表对象访问权限外,所有的权限。 | 对表空间有创建、修改、删除、访问、分配操作的权限。 | 不具有对表空间进行创建、修改、删除、分配的权限,访问需要被赋权。 | ||||
表 | 对所有表有所有的权限。 | 仅对自己的表有所有的权限,对其他用户的表无权限 | |||||
索引 | 可以在所有的表上建立索引。 | 仅可以在自己的表上建立索引。 | |||||
模式 | 对除dbe_perf以外的所有模式有所有的权限。 | 仅对dbe_perf模式和自己的模式有所有的权限,对其他用户的模式无权限。 | 仅对自己的模式有所有的权限,对其他用户的模式无权限。 | ||||
函数 | 对除dbe_perf模式下的函数以外的所有的函数有所有的权限。 | 仅对dbe_perf模式下的和自己的函数有所有的权限,对其他用户放在public这个公共模式下的函数有调用的权限,对其他用户放在其他模式下的函数无权限。 | 仅对自己的函数有所有的权限,对其他用户放在public这个公共模式下的函数有调用的权限,对其他用户放在其他模式下的函数无权限。 | ||||
自定义视图 | 对除dbe_perf模式下的视图以外的所有的视图有所有的权限。 | 仅对dbe_perf模式下的和自己的视图有所有的权限,对其他用户的视图无权限。 | 仅对自己的视图有所有的权限,对其他用户的视图无权限。 | ||||
系统表和系统视图 | 可以查看所有系统表和视图。 | 只可以查看部分系统表和视图。详细请参见15系统表和系统视图。 |
表5-10 三权分立较非三权分立权限变化说明
对象名称 | 初始用户(id为10) | 系统管理员 | 监控管理员 | 运维管理员 | 安全管理员 | 审计管理员 | 普通用户 | |
---|---|---|---|---|---|---|---|---|
表空间 | 无变化。 依然具有除私有用户表对象访问权限外,所有的权限。 | 无变化 | 无变化。 | |||||
表 | 权限缩小。
只对自己的表及其他用户放在public模式下的表有所有的权限,对其他用户放在属于各自模式下的表无权限。 |
无变化。 | ||||||
索引 | 权限缩小。
只可以在自己的表及其他用户放在public模式下的表上建立索引。 |
无变化。 | ||||||
模式 | 权限缩小。
只对自己的模式有所有的权限,对其他用户的模式无权限。 |
无变化 | 无变化。 | |||||
函数 | 权限缩小。
只对自己的函数及其他用户放在public模式下的函数有所有的权限,对其他用户放在属于各自模式下的函数无权限。 |
无变化 | 无变化。 | |||||
自定义视图 | 权限缩小。
只对自己的视图及其他用户放在public模式下的视图有所有的权限,对其他用户放在属于各自模式下的视图无权限。 |
无变化 | 无变化。 | |||||
系统表和系统视图 | 无变化。 | 无变化。 |
在数据库初始化阶段,新增三个默认用户:管理员vbadmin、审计员vbaudit和安全员vbsso。三个默认用户的关键属性(pg_authid数据字典)如下表:
用户属性 | 管理员 | 审计员 | 安全员 |
rolsuper | true | false | false |
rolinherit | true | true | true |
rolcreaterole | true | false | false |
rolcreatedb | true | false | false |
rolcatupdate | true | false | false |
rolcanlogin | true | true | true |
rolreplication | true | false | false |
rolssoadmin | false | false | true |
rolauditadmin | false | true | false |
rolsysadmin | true | false | false |
roluseft | true | true | false |
管理员权限
三种管理员的权限和范围请分别参见表5-11、5-12、5-13和表5-14。
表5-11 审计员权限列表
序号 | 权限类型 | 说明 | 是否已实现 |
1 | AUDIT.VB_AUDIT_LOG | 对外部表audit.VB_AUDIT_LOG中审计日志的查询权限 | 否 |
其他数据字典的权限与普通用户相同。
表5-12 安全员权限列表
序号 | PRIVILEGE类型 | 说明 | 是否已实现 |
1 | CREATE SECURITY LABEL | 创建敏感标记 | 是 |
2 | DROP SECURITY LABEL | 删除敏感标记 | 是 |
3 | SECURITY LABEL ON | 对数据库对象设置敏感标记 | 是 |
4 | PG_SECLABEL | 对数据字典PG_SECLABEL的查询权限 | 是 |
5 | PG_SHSECLABEL | 对数据字典PG_SHSECLABEL的查询权限 | 是 |
6 | PG_OGMAC_SECLABEL | 对数据字典PG_OGMAC_SECLABEL的查询权限 | 是 |
7 | PG_RLSPOLICY | 对系统表PG_RLSPOLICY的查询权限 | |
8 | CREATE POLICY | 创建行安全策略 | 否 |
9 | ALTER POLICY | 修改行安全策略 | 否 |
10 | DROP POLICY | 删除行安全策略 | 否 |
11 | ALTER TABLE | 启用/禁用表上的行安全策略 | 否 |
12 | CREATE RESOURCE LABEL | 创建资源池 | 是 |
13 | ALTER RESOURCE LABEL | 修改资源池 | 是 |
14 | DROP RESOURCE LABEL | 删除资源池 | 是 |
15 | CREATE MASKING POLICY | 创建审计脱敏策略 | |
16 | ALTER MASKING POLICY | 修改审计脱敏策略 | |
17 | DROP MASKING POLICY | 删除审计脱敏策略 | |
18 | CREATE AUDIT POLICY | 创建审计策略 | |
19 | ALTER AUDIT POLICY | 修改审计策略 | |
20 | DROP AUDIT POLICY | 删除审计策略 | |
21 | GS_POLICY_LABEL | 对系统表GS_POLICY_LABEL的查询权限 | |
22 | GS_AUDITING_POLICY | 对系统表GS_AUDITING_POLICY的查询权限 | |
23 | GS_AUDITING_POLICY_ACCESS | 对系统表GS_AUDITING_POLICY_ACCESS的查询权限 | |
24 | GS_AUDITING_POLICY_PRIVILEGES | 对系统表GS_AUDITING_POLICY_PRIVILEGES的查询权限 | |
25 | GS_AUDITING_POLICY_FILTERS | 对系统表GS_AUDITING_POLICY_FILTERS的查询权限 | |
26 | GS_LABEL | 对视图GS_LABELS的查询权限 | |
27 | GS_MASKING | 对视图GS_MASKING的查询权限 | |
28 | GS_AUDITING | 对视图GS_AUDITING的查询权限 | |
29 | GS_AUDITING_ACCESS | 对视图GS_AUDITING_ACCESS的查询权限 | |
30 | GS_AUDITING_PRIVILEGE | 对视图GS_AUDITING_PRIVILEGE的查询权限 | |
31 | GA_MASKING_POLICY | 对视图GS_MASKING_POLICY的查询权限 | |
32 | GS_MASKING_POLICY_FILTER | 对视图GS_MASKING_POLICY_FILTER的查询权限 | |
33 | GS_MASKING_POLICY_ACTIONS | 对视图GS_MASKING_POLICY_ACTION的查询权限 |
其他数据字典权限与普通用户相同。上述表格中列举的权限仅安全员才具备。
表5-13 系统管理员权限列表
序号 | PRIVILEGE类型 | 说明 | 是否已实现 |
1. | GRANT/REVOKE | 增加/移除成员关系。要求成员和父成员管理类型一致 | 否 |
表5-14 共有权限列表
序号 | PRIVILEGE类型 | 说明 | 是否已实现 |
1 | SET | 设置会话参数 | 是 |
2 | CREATE ROLE/USER | 创建角色/用户,只允许创建同类型的管理员用户 | 否 |
3 | ALTER ROLE/USER | 修改角色/用户信息,要求被修改者与执行者管理类型一致 | 否 |
4 | DROP ROLE/USER | 删除角色/用户, 要求执行用户与被删除者管理类型一致 | 否 |
Vastbase可以通过ALTER ROLE/USER命令修改用户属性。在启用三权分立功能情况下,不允许修改其他类型用户的属性,不允许修改用户属性使之同时具备安全员、审计员和管理员中两种或以上权限。例如不允许管理员修改安全员的用户属性。
新增安全员属性,相关语法示例如下:
CREATE USER user1 PASSWORD 'user1@abcd' ssoadmin;
以上SQL语句创建了一个名称为user1的安全员。
不允许同时指定sysadmin、auditadmin和ssoadmin中两种或以上属性,若用户属性为auditadmin或者ssoadmin,则不允许指定createrole和createdb属性。
例如以下创建用户语句是不合法的:
CREATE USER user1 PASSWORD 'user1@abcd' ssoadmin createrole;
导入导出数据
pg_dump
启用三权分立功能情况下,只允许具有系统管理员权限的用户(rolsystemadmin为true)导出数据库。
pg_restore
启用三权分立功能情况下,只允许具有系统管理员权限的用户(rolsystemadmin为true)导入数据库。
copy语句
copy语句在一个文件和表之间导入导出数据。
启用三权分立功能情况下,只允许具有审计策略管理权限的用户导入导出审计系统表,安全员导入导出安全系统表,其他表只有系统管理员有权导入导出。