实验十九 GaussDB三权分立实验

一、三权分立简介

SYSADMIN:

系统管理员权限,不再具有创建、修改、删除用户/角色的权限,也不再具有查看和维护数据库审计日志的权限。

CREATEROLE:

安全管理员权限,具有创建、修改、删除用户/角色的权限。

AUDITADMIN:

审计管理员权限,具有查看和维护数据库审计日志的权限。

二、三权分立机制开启

此模式需要设置guc参数"enableSeparationOfDuty"的值为"on",该参数为POSTMASTER类型参数,修改完之后需要重启数据库。

#分布式

sql 复制代码
gs_guc set -Z coordinator -Z datanode -N all -I all -c "enableSeparationOfDuty=on"

#集中式

sql 复制代码
gs_guc set -Z datanode -N all -I all -c "enableSeparationOfDuty=on"

#重启集群

sql 复制代码
cm_ctl stop && cm_ctl start

三、创建三类管理员角色(超级用户执行)

创建系统管理员:负责资源调度、数据库维护

sql 复制代码
CREATE USER test_sysadmin WITH SYSADMIN password "Huawei@1234";

创建安全管理员:负责用户、权限、策略管理

sql 复制代码
CREATE USER test_createrole WITH CREATEROLE password "Huawei@1234";

创建审计管理员:负责审计日志查询与清理

sql 复制代码
CREATE USER test_auditadmin WITH AUDITADMIN password "Huawei@1234";

四、创建普通用户

1.系统管理员

创建普通用户:

sql 复制代码
gsql -dpostgres -p8000 -Utest_sysadmin -WHuawei@1234 -ar
create user test_sys_user with password 'test@123';

2.安全管理员

创建普通用户:

sql 复制代码
gsql -dpostgres -p8000 -Utest_createrole -WHuawei@1234 -ar
create user test_cre_user with password 'test@123';

3.审计管理员

创建普通用户:

sql 复制代码
gsql -dpostgres -p8000 -Utest_auditadmin -WHuawei@1234 -ar
create user test_aud_user with password 'test@123';

4.测试结果

系统管理员执行命令失败;

安全管理员执行命令成功;

审计管理员执行命令失败;

五、创建database

1.系统管理员

创建数据库:

sql 复制代码
gsql -dpostgres -p8000 -Utest_sysadmin -WHuawei@1234 -ar
create database testdb;

2.安全管理员

创建数据库:

sql 复制代码
gsql -dpostgres -p8000 -Utest_createrole -WHuawei@1234 -ar
create database testdb;

3.审计管理员

创建数据库:

sql 复制代码
gsql -dpostgres -p8000 -Utest_auditadmin -WHuawei@1234 -ar
create database testdb;

4.测试结果

系统管理员执行命令成功;

安全管理员执行命令失败;

审计管理员执行命令失败;

六、创建schema和table

1.系统管理员

创建测试schema和表,并写入数据

sql 复制代码
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和表,并写入数据

sql 复制代码
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和表,并写入数据

sql 复制代码
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.系统管理员

sql 复制代码
gsql -dtestdb -p8000 -Utest_sysadmin -WHuawei@1234 -ar
update test_schema.sales set amount = 2000 where id = 1;

2.安全管理员

sql 复制代码
gsql -dtestdb -p8000 -Utest_createrole -WHuawei@1234 -ar
update test_schema.sales set amount = 2000 where id = 1;

3.审计管理员

sql 复制代码
gsql -dtestdb -p8000 -Utest_auditadmin -WHuawei@1234 -ar
update test_schema.sales set amount = 2000 where id = 1;

4.测试结果

系统管理员更新数据成功

安全管理员更新数据失败

审计管理员更新数据失败

八、修改密码和用户期限等策略

1.系统管理员

sql 复制代码
gsql -dpostgres -p8000 -Utest_sysadmin -WHuawei@1234 -ar
alter role test_cre_user valid until '2099-12-31';

2.安全管理员

sql 复制代码
gsql -dpostgres -p8000 -Utest_createrole -WHuawei@1234 -ar
alter role test_cre_user valid until '2099-12-31';

3.审计管理员

sql 复制代码
gsql -dpostgres -p8000 -Utest_auditadmin -WHuawei@1234 -ar
alter role test_cre_user valid until '2099-12-31';

4.测试结果

系统管理员用户期限限制失败

安全管理员用户期限限制成功

审计管理员用户期限限制失败

九、授予权限给用户

1.系统管理员

sql 复制代码
gsql -dtestdb -p8000 -Utest_sysadmin -WHuawei@1234 -ar
grant select on table test_schema.sales to test_cre_user;

2.安全管理员

sql 复制代码
gsql -dtestdb -p8000 -Utest_createrole -WHuawei@1234 -ar
grant select on table test_schema.sales to test_cre_user;

3.审计管理员

sql 复制代码
gsql -dtestdb -p8000 -Utest_auditadmin -WHuawei@1234 -ar
grant select on table test_schema.sales to test_cre_user;

4.测试结果

系统管理员用户授权成功

安全管理员用户授权失败

审计管理员用户授权失败

十、修改用户密码

1.系统管理员

sql 复制代码
gsql -dpostgres -p8000 -Utest_sysadmin -WHuawei@1234 -ar
ALTER USER test_cre_user IDENTIFIED BY 'TestNew@123';

2.安全管理员

sql 复制代码
gsql -dpostgres -p8000 -Utest_createrole -WHuawei@1234 -ar
ALTER USER test_cre_user IDENTIFIED BY 'TestNew@123';

3.审计管理员

sql 复制代码
gsql -dpostgres -p8000 -Utest_auditadmin -WHuawei@1234 -ar
ALTER USER test_cre_user IDENTIFIED BY 'TestNew@123';

4.测试结果

系统管理员用户授权失败

安全管理员用户授权成功

审计管理员用户授权失败

十一、回收权限

1.系统管理员

sql 复制代码
gsql -dtestdb -p8000 -Utest_sysadmin -WHuawei@1234 -ar
revoke select on table test_schema.sales from test_cre_user;

2.安全管理员

sql 复制代码
gsql -dtestdb -p8000 -Utest_createrole -WHuawei@1234 -ar
revoke select on table test_schema.sales from test_cre_user;

3.审计管理员

sql 复制代码
gsql -dtestdb -p8000 -Utest_auditadmin -WHuawei@1234 -ar
revoke select on table test_schema.sales from test_cre_user;

4.测试结果

系统管理员用户收回权限成功

安全管理员用户收回权限失败

审计管理员用户收回权限失败

十二、查看审计日志

1.系统管理员

sql 复制代码
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.安全管理员

sql 复制代码
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.审计管理员

sql 复制代码
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.测试结果

系统管理员查看审计日志失败

安全管理员查看审计日志失败

审计管理员查看审计日志成功

相关推荐
banjin2 天前
在开发者空间云开发环境使用Vanna配合ollama/maas使用自然语言与GaussDB对话
gaussdb
DarkAthena2 天前
【GaussDB】在duckdb中查询GaussDB的数据
数据库·gaussdb·duckdb
DarkAthena3 天前
【Docker】定制化构建一个可以运行GaussDB的kylinv10sp3系统的docker镜像
数据库·docker·容器·gaussdb
xuekai200809018 天前
GaussDB一次小故障修复
gaussdb
Gauss松鼠会8 天前
GaussDB慢sql信息收集和执行计划查看
数据库·sql·gaussdb
小云数据库服务专线9 天前
GaussDB 应用侧报no pg_hba.conf entry for host处理方法
服务器·网络·gaussdb
小云数据库服务专线12 天前
GaussDB 应用侧报Read timed out解决方法
linux·服务器·gaussdb
小云数据库服务专线14 天前
GaussDB DN动态内存使用满导致DN主备切换
gaussdb
小云数据库服务专线15 天前
GaussDB 分布式下, 报错concurrent update under Stream mode is not yet support
gaussdb