暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

一文认识三权分立

原创 元少爷 2023-07-23
3820

官方定义三权分立

三权分立是对系统权限管理机制的补充,核心思想是将管理数据库对象的权限、管理用户的权限和管理审计日志的权限分离,从而避免一个管理员拥有过度集中的权利带来的高风险。通过将GUC参数enableSeparationOfDuty设置为on来打开三权分立开关。三权分立开关打开后, SYSADMIN的权限范围将缩小,不再包括允许创建用户/角色的权限,也不再包括允许查看、删除数据库审计日志的权限。SYSADMIN,CREATEROLE,AUDITADMIN三种系统权限的权限范围互相隔离,互不影响,而且一个用户仅能被赋予其中一个属性。

系统权限

系统权限又称用户属性,具有特定属性的用户会获得指定属性所对应的权限。系统权限无法通过角色(ROLE)被继承。在创建用户或角色时可以通过SQL语句CREATE ROLE/USER指定用户具有某些属性,或者通过ALTER ROLE/USER的方式给用户/角色添加用户属性或取消用户属性。

openGauss数据库支持如下系统权限的授予和回收:

系统权限

权限范围

SYSADMIN

允许用户创建数据库,创建表空间
允许用户创建用户/角色
允许用户查看、删除审计日志
允许用户查看其它用户的数据

MONADMIN

允许用户对系统模式dbe_perf及该模式下的监控视图或函数进行查看和权限管理

OPRADMIN

允许用户使用Roach工具执行数据库备份和恢复

POLADMIN

允许用户创建资源标签、创建动态数据脱敏策略和统一审计策略

AUDITADMIN

允许用户查看、删除审计日志

CREATEDB

允许用户创建数据库

USEFT

允许用户创建外表

CREATEROLE

允许用户创建用户/角色

INHERIT

允许用户继承所在组的角色的权限

LOGIN

允许用户登录数据库

REPLICATION

允许用户执行流复制相关操作

对象权限

对象所有者缺省具有该对象上的所有操作权限,比如修改、删除对象的权限,查看对象的权限,将对象的操作权限授予其他用户,或撤销已经授予的操作权限等。其中对象的ALTER、 DROP、COMMENT、INDEX、VACUUM以及对象的可再授予权限属于所有者固有的权限,隐式拥有。但对象所有者可以撤消自己的普通权限,例如,使表对自己以及其他人都只可读。

对象权限可以通过角色(ROLE)被继承,这样方便用户将这些单个的权限打包成一个角色进行权限管理。openGauss数据库针对每一类数据库对象支持如下对象权限:

对象

权限

权限说明

TABLESPACE

CREATE

允许用户在指定的表空间中创建表

ALTER

允许用户对指定的表空间执行ALTER语句修改属性

DROP

允许用户删除指定的表空间

COMMENT

允许用户对指定的表空间定义或修改注释

DATABASE

CONNECT

允许用户连接到指定的数据库

TEMP

允许用户在指定的数据库中创建临时表

CREATE

允许用户在指定的数据库里创建模式

ALTER

允许用户对指定的数据库执行ALTER语句修改属性

DROP

允许用户删除指定的数据库

COMMENT

允许用户对指定的数据库定义或修改注释

SCHEMA

CREATE

允许用户在指定的模式中创建新的对象

USAGE

允许用户访问包含在指定模式内的对象

ALTER

允许用户对指定的模式执行ALTER语句修改属性

DROP

允许用户删除指定的模式

COMMENT

允许用户对指定的模式定义或修改注释

FUNCTION

EXECUTE

允许用户使用指定的函数

ALTER

允许用户对指定的函数执行ALTER语句修改属性

DROP

允许用户删除指定的函数

COMMENT

允许用户对指定的函数定义或修改注释

TABLE

INSERT

允许用户对指定的表执行INSERT语句插入数据

DELETE

允许用户对指定的表执行DELETE语句删除表中数据

UPDATE

允许用户对指定的表执行UPDATE语句

SELECT

允许用户对指定的表执行SELECT语句

TRUNCATE

允许用户执行TRUNCATE语句删除指定表中的所有记录

REFERENCES

允许用户对指定的表创建一个外键约束

TRIGGER

允许用户在指定的表上创建触发器

ALTER

允许用户对指定的表执行ALTER语句修改属性

DROP

允许用户删除指定的表

COMMENT

允许用户对指定的表定义或修改注释

INDEX

允许用户在指定表上创建索引,并管理指定表上的索引

VACUUM

允许用户对指定的表执行ANALYZE和VACUUM操作

白话讲解三权分立

上面是官方介绍,下面用通俗语言解释一下三权分立,

openGauss创建后会有一个omm用户,权限如下,注意他有多个角色权限,例如

openGauss=# \du

omm | Sysadmin, Create role, Create DB, Replication, Administer audit, Monitoradmin, Operatoradmin, Policyadmin, Us

eFT | {}

现在要把老大omm的权力分离出来,最主要是Sysadmin、Create role、Administer audit的分离出来。分离后如下,其中auditadmin1用户负责审计,createrole1负责用户角色创建,而sysadmin1则负责数据权限。

查看数据库三权分立

查看三权分立是否打开,off是关闭状态。

openGauss=# select name,setting,unit,context from pg_settings where name ~ 'enableSeparationOfDuty';

name | setting | unit | context

------------------------+---------+------+------------

enableSeparationOfDuty | off | | postmaster

(1 row)

通过gs_guc打开三权分立,并重启服务才能正常生效。

基于omm用户执行以下命令

gs_guc reload -Z datanode -D dn/ -c "enableSeparationOfDuty=on"

[omm@server130 ~]$ gs_om -t restart

三权分立后

具体的业务应用场景


下面举一个,三权分立后,再也不是由omm一个专利独权,omm的事情由三个部门管理,分别是人事部门、IT部门、数据部门

人事部负责给新员工创建帐号,HR根据各种标签给新员工创建各种角色。

IT部门负责给新员工赋矛相关部门的权限,一般IT部门要与人事部紧密配合,偶然也要与数据部门交流工作。

数据部门可以监控员工的行为,发现异常行业可以检测员工有没有恶意的帐号,。

从公司运营的角度来看,应该业务、技术、管理独立分离,三权就是满足了这点要求,否则就会监守自盗。

创建数据部门的审计用户的老大auditadmin1,以及人事部用户角色组的老大createrole1,还有数据部门权限分配的老大sysadmin1

CREATE USER auditadmin1 PASSWORD 'Agmcc#1234';

alter user auditadmin1 AUDITADMIN;

CREATE USER sysadmin1 PASSWORD 'Agmcc#1234';

alter user sysadmin1 SYSADMIN;

CREATE USER createrole1 PASSWORD 'Agmcc#1234';

alter user createrole1 CREATEROLE;

查看创建结果,分别创建auditadmin1,createrole1,sysadmin1

openGauss=# \du

auditadmin1 | Administer audit| {}

createrole1 | Create role| {}

omm | Sysadmin, Create role, Create DB, Replication, Administer audit, Monitoradmin, Operatoradmin, Policyadmin, UseFT | {}

sysadmin1 | Sysadmin| {}

测试能不能越权

我们尝试给用户更多的权利,例如审计老大有数据资源分配的权力,或者让管人的用户角色老大有审请的权力,赋权的时候会报错,提示三权分立正在使用中。

openGauss=# alter user sysadmin1 CREATEROLE;

ERROR: Separation of privileges is used,user can't be altered because of too many privileges.

openGauss=# alter user createrole1 SYSADMIN;

ERROR: Separation of privileges is used,user can't be altered because of too many privileges.

openGauss=# alter user auditadmin1 SYSADMIN;

ERROR: Separation of privileges is used,user can't be altered because of too many privileges.

三位老大根据自己的部门需求进行创建、授权、审计的活动。

测试独立交集的权限

审计用户的老大auditadmin1创建的用户能够对数据库日志进行审计,用户角色组的老大createrole1 能够创建各种用户角色和相应的资源,数据权限分配的老大sysadmin1负责数据资源权限的分配,sysadmin1看似三者之中权力,但是它也需要createrole1为它创建用户。所以三权分立的目标是三个不同的用户协同完成同一个工作。

例如审计老大auditadmin1新建一个用户newfish,newfish天生就有审计的权利,如果newfish想访问public.t1表的数据进行分析的话,那么必须sysadmin1老大运行以下命令

GRANT usage ON schema public to newfish;

grant select on table public.t1 to newfish;

总结三权分立

三权分立的改革创新,通过把鸡蛋放在一个篮子里面,现在变成放在三个篮子里面,三个篮子协同完成过去同样的工作。没有一权独大,从管理的角度来看比过去更加安全。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论