1.什么是权限分离

默认数据库root用户,rdsAdmin等用户权限较大,给普通用户不能授予太多的权限。为了让不同的用户有不同的管理权限,所以才有了权限分离。

2.查看默认的权限分离策略

gaussdb=> show enableSeparationOfDuty;
 enableSeparationOfDuty 
------------------------
 off
(1 row)

默认情况下,权限分离策略关闭。root可以管理大多数权限,也可以给用户授予很多权限。

但是如果开启权限分离功能,则每一个用户只能授予:sysadmin/CREATEROLE/AUDITADMIN/OPRADMIN 其中一个。多于一个则不被允许。

3.开启GaussDB的权限分离功能

--系统权限层级 设置GUC参数 --enableSeparationOfDuty = on:
--开启三权分立,三权分立,需要重启集群才能生效。
gs_guc reload -Z coordinator -Z datanode -N all -I all -c "enableSeparationOfDuty=on"

cm_ctl stop 
cm_ctl start 

gaussdb=> show enableSeparationOfDuty;
 enableSeparationOfDuty 
------------------------
 on
(1 row)

权限分离功能开启后,必须重启集群才能生效。

4.各权限说明

--初始安装用户:集群安装过程中自动生成的帐户,拥有系统的最高权限,能够执行所有的操作。
• SYSADMIN:系统管理员权限,权限仅次于初始安装用户,默认具有与对象所有者相同的权限,但不包括监控管理员权限和运维管理员权限。
• MONADMIN:监控管理员权限,具有监控模式dbe_perf及模式下视图和函数的访问权限和授予权限。
• OPRADMIN:运维管理员权限,具有使用Roach工具执行备份恢复的权限。
• CREATEROLE:安全管理员权限,具有创建、修改、删除用户/角色的权限。
• AUDITADMIN:审计管理员权限,具有查看和维护数据库审计日志的权限。
• CREATEDB:具有创建数据库的权限。
• POLADMIN:安全策略管理员权限,具有创建资源标签,数据动态脱敏策略和统一审计策略的权限。

5.权限分离功能开启后,新建用户。

--开启三权分立后,root用户可以创建用户,但是没有修改用户的权限。
gaussdb=> create user user1 with password 'Gauss_123';
CREATE ROLE
gaussdb=> create user user2 with password 'Gauss_123';
CREATE ROLE
gaussdb=> create user user3 with password 'Gauss_123';
CREATE ROLE

--我们使用rdsAdmin用户登陆。
[omm@gaussdb01 ~]$ gsql -d postgres -U rdsAdmin -W Gauss_123 -p 8000
gsql ((GaussDB Kernel 503.1.0.SPC1200 build c28d95e9) compiled at 2023-07-05 16:26:07 commit 5703 last mr 11933 release)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
--三权分立,不允许授予多个权限。
gaussdb=# alter user user1 with SYSADMIN CREATEROLE AUDITADMIN;
ERROR:  Separation of privileges is used,user can''t be altered because of too many privileges.
--没用用于授予单独的权限。
gaussdb=# alter user user1 with SYSADMIN;
ALTER ROLE
gaussdb=# alter user user2 with CREATEROLE;
ALTER ROLE
gaussdb=# alter user user3 with AUDITADMIN;
ALTER ROLE

--user2具有createrole权限,即可以修改用户。
可以看到:user2用户,有创建用户的权限。
user2无法给其他用户授予:sysadmin/CREATEROLE/AUDITADMIN/OPRADMIN
user2可以给其他用户授予:POLADMIN,CREATEDB,login;
gaussdb=# alter user role2 with login;
ALTER ROLE
gaussdb=> create user user4 with password 'Gauss_123';
CREATE ROLE
gaussdb=> alter user user4 with sysadmin;
ERROR:  Permission denied.
gaussdb=> alter user user4 with CREATEROLE;
ERROR:  Permission denied.
gaussdb=> alter user user4 with AUDITADMIN;
ERROR:  Permission denied.
gaussdb=> alter user user4 with OPRADMIN;
ERROR:  Permission denied.
gaussdb=> alter user user4 with CREATEDB;
ALTER ROLE  
gaussdb=> alter user user4 with POLADMIN;
ALTER ROLE
gaussdb=> alter user user4 with login;
ALTER ROLE

可以看到,新建的用户,只能授予:SYSADMIN/CREATEROLE/AUDITADMIN/OPRADMIN 其中一个..可以并行授予:POLADMIN,CREATEDB 系统权限。

6.总结

权限分离功能,能够有效防止某个用户权限过大,降低安全问题。是国产数据库在权限方面的新探索和实践。生产环境可以根据需要确认是否开启权限分离功能。数据库默认未开启该功能。

Logo

数据库是今天社会发展不可缺少的重要技术,它可以把大量的信息进行有序的存储和管理,为企业的数据处理提供了强大的保障。

更多推荐