实验十九 GaussDB三权分立实验
一、三权分立简介
SYSADMIN:
系统管理员权限,不再具有创建、修改、删除用户/角色的权限,也不再具有查看和维护数据库审计日志的权限。
CREATEROLE:
安全管理员权限,具有创建、修改、删除用户/角色的权限。
AUDITADMIN:
审计管理员权限,具有查看和维护数据库审计日志的权限。
二、三权分立机制开启
此模式需要设置guc参数"enableSeparationOfDuty"的值为"on",该参数为POSTMASTER类型参数,修改完之后需要重启数据库。
#分布式
gs_guc set -Z coordinator -Z datanode -N all -I all -c "enableSeparationOfDuty=on"
#集中式
gs_guc set -Z datanode -N all -I all -c "enableSeparationOfDuty=on"
#重启集群
cm_ctl stop && cm_ctl start
三、创建三类管理员角色(超级用户执行)
创建系统管理员:负责资源调度、数据库维护
CREATE USER test_sysadmin WITH SYSADMIN password "Huawei@1234";
创建安全管理员:负责用户、权限、策略管理
CREATE USER test_createrole WITH CREATEROLE password "Huawei@1234";
创建审计管理员:负责审计日志查询与清理
CREATE USER test_auditadmin WITH AUDITADMIN password "Huawei@1234";
四、创建普通用户
1.系统管理员
创建普通用户:
gsql -dpostgres -p8000 -Utest_sysadmin -WHuawei@1234 -ar
create user test_sys_user with password 'test@123';
2.安全管理员
创建普通用户:
gsql -dpostgres -p8000 -Utest_createrole -WHuawei@1234 -ar
create user test_cre_user with password 'test@123';
3.审计管理员
创建普通用户:
gsql -dpostgres -p8000 -Utest_auditadmin -WHuawei@1234 -ar
create user test_aud_user with password 'test@123';
4.测试结果
系统管理员执行命令失败;
安全管理员执行命令成功;
审计管理员执行命令失败;
五、创建database
1.系统管理员
创建数据库:
gsql -dpostgres -p8000 -Utest_sysadmin -WHuawei@1234 -ar
create database testdb;
2.安全管理员
创建数据库:
gsql -dpostgres -p8000 -Utest_createrole -WHuawei@1234 -ar
create database testdb;
3.审计管理员
创建数据库:
gsql -dpostgres -p8000 -Utest_auditadmin -WHuawei@1234 -ar
create database testdb;
4.测试结果
系统管理员执行命令成功;
安全管理员执行命令失败;
审计管理员执行命令失败;
六、创建schema和table
1.系统管理员
创建测试schema和表,并写入数据
gsql -dtestdb -p8000 -Utest_sysadmin -WHuawei@1234 -ar
CREATE SCHEMA test_schema;
CREATE TABLE test_schema.sales (id int, amount numeric, region text);
INSERT INTO test_schema.sales VALUES (1, 1000, 'North'), (2, 1500, 'South');
2.安全管理员
创建测试schema和表,并写入数据
gsql -dtestdb -p8000 -Utest_createrole -WHuawei@1234 -ar
CREATE SCHEMA test_schema;
CREATE TABLE test_schema.sales (id int, amount numeric, region text);
INSERT INTO test_schema.sales VALUES (1, 1000, 'North'), (2, 1500, 'South');
3.审计管理员
创建测试schema和表,并写入数据
gsql -dtestdb -p8000 -Utest_auditadmin -WHuawei@1234 -ar
CREATE SCHEMA test_schema;
CREATE TABLE test_schema.sales (id int, amount numeric, region text);
INSERT INTO test_schema.sales VALUES (1, 1000, 'North'), (2, 1500, 'South');
4.测试结果
系统管理员创建schema成功,创建表和往表中插入数据成功
安全管理员创建schema失败,创建表和往表中插入数据失败
审计管理员创建schema失败,创建表和往表中插入数据失败
七、修改数据
1.系统管理员
gsql -dtestdb -p8000 -Utest_sysadmin -WHuawei@1234 -ar
update test_schema.sales set amount = 2000 where id = 1;
2.安全管理员
gsql -dtestdb -p8000 -Utest_createrole -WHuawei@1234 -ar
update test_schema.sales set amount = 2000 where id = 1;
3.审计管理员
gsql -dtestdb -p8000 -Utest_auditadmin -WHuawei@1234 -ar
update test_schema.sales set amount = 2000 where id = 1;
4.测试结果
系统管理员更新数据成功
安全管理员更新数据失败
审计管理员更新数据失败
八、修改密码和用户期限等策略
1.系统管理员
gsql -dpostgres -p8000 -Utest_sysadmin -WHuawei@1234 -ar
alter role test_cre_user valid until '2099-12-31';
2.安全管理员
gsql -dpostgres -p8000 -Utest_createrole -WHuawei@1234 -ar
alter role test_cre_user valid until '2099-12-31';
3.审计管理员
gsql -dpostgres -p8000 -Utest_auditadmin -WHuawei@1234 -ar
alter role test_cre_user valid until '2099-12-31';
4.测试结果
系统管理员用户期限限制失败
安全管理员用户期限限制成功
审计管理员用户期限限制失败
九、授予权限给用户
1.系统管理员
gsql -dtestdb -p8000 -Utest_sysadmin -WHuawei@1234 -ar
grant select on table test_schema.sales to test_cre_user;
2.安全管理员
gsql -dtestdb -p8000 -Utest_createrole -WHuawei@1234 -ar
grant select on table test_schema.sales to test_cre_user;
3.审计管理员
gsql -dtestdb -p8000 -Utest_auditadmin -WHuawei@1234 -ar
grant select on table test_schema.sales to test_cre_user;
4.测试结果
系统管理员用户授权成功
安全管理员用户授权失败
审计管理员用户授权失败
十、修改用户密码
1.系统管理员
gsql -dpostgres -p8000 -Utest_sysadmin -WHuawei@1234 -ar
ALTER USER test_cre_user IDENTIFIED BY 'TestNew@123';
2.安全管理员
gsql -dpostgres -p8000 -Utest_createrole -WHuawei@1234 -ar
ALTER USER test_cre_user IDENTIFIED BY 'TestNew@123';
3.审计管理员
gsql -dpostgres -p8000 -Utest_auditadmin -WHuawei@1234 -ar
ALTER USER test_cre_user IDENTIFIED BY 'TestNew@123';
4.测试结果
系统管理员用户授权失败
安全管理员用户授权成功
审计管理员用户授权失败
十一、回收权限
1.系统管理员
gsql -dtestdb -p8000 -Utest_sysadmin -WHuawei@1234 -ar
revoke select on table test_schema.sales from test_cre_user;
2.安全管理员
gsql -dtestdb -p8000 -Utest_createrole -WHuawei@1234 -ar
revoke select on table test_schema.sales from test_cre_user;
3.审计管理员
gsql -dtestdb -p8000 -Utest_auditadmin -WHuawei@1234 -ar
revoke select on table test_schema.sales from test_cre_user;
4.测试结果
系统管理员用户收回权限成功
安全管理员用户收回权限失败
审计管理员用户收回权限失败
十二、查看审计日志
1.系统管理员
gsql -dpostgres -p8000 -Utest_sysadmin -WHuawei@1234 -ar
SELECT * FROM pg_query_audit('2025-09-26 08:00:00', '2025-09-26 09:00:00') LIMIT 1;
2.安全管理员
gsql -dpostgres -p8000 -Utest_createrole -WHuawei@1234 -ar
SELECT * FROM pg_query_audit('2025-09-26 08:00:00', '2025-09-26 09:00:00') LIMIT 1;
3.审计管理员
gsql -dpostgres -p8000 -Utest_auditadmin -WHuawei@1234 -ar
SELECT * FROM pg_query_audit('2025-09-26 08:00:00', '2025-09-26 09:00:00') LIMIT 1;
4.测试结果
系统管理员查看审计日志失败
安全管理员查看审计日志失败
审计管理员查看审计日志成功