认证培训专区
学习笔记
文章

8cA09 GBase 8c 安全特性

发表于2026-06-21 21:08:1077次浏览9个评论

GBase 8c 安全特性

一、课程总览

1. 整体模块

全文分为四大模块:账户安全策略、权限控制、审计功能、黑白名单访问控制,包含原理说明、参数配置、完整 SQL 实操命令、场景案例。

二、账户安全策略

(一)功能说明

对数据库账号、登录行为、密码规则进行安全管控,包含登录锁定、账号生命周期、密码安全规则、账号运维等能力。

(二)账户安全策略

  • 密码错误次数限制

控制密码连续输错多少次后自动锁定账号

-- 创建用户
create user t_user identified by 'Gbase_123';
​
-- 查看当前允许的登录失败次数
show failed_login_attempts;
​
-- 修改登录失败最大次数(示例设为5次)
alter system set failed_login_attempts=5;

1781601535356.png

  • 账号自动解锁时长

账号锁定后,达到指定时长自动解锁,默认 1 天

-- 查看锁定后自动解锁时间
show password_lock_time;
​
-- 方式1:SQL 修改参数
alter system set password_lock_time='7d';
​
-- 方式2:gs_guc 工具批量修改(集群节点生效)
gs_guc reload -Z coordinator -N all -I all -c "password_lock_time='2d'"

1781605055366.png

  1. 手动锁定 / 解锁账号
-- 手动解锁账号 t_user
ALTER USER t_user ACCOUNT UNLOCK;
​
-- 手动锁定账号 t_user
ALTER USER t_user ACCOUNT LOCK;

1781605725663.png

1781605796597.png

  1. 删除闲置账号
-- 创建一个要删除的用户
create user t_dropUser identified by 'Gbase_123';
​
-- 彻底删除无用账号(级联删除依赖对象)
DROP USER t_dropUser CASCADE;

(三)账号有效期

限制账号可登录的起止时间,超出时间范围无法登录

-- 创建用户指定有效时间段,有效时间段可以正常登录,有效期过期后无法登录。
create user t_timeuser identified by 'Gbase_123'
VALID BEGIN '2026-06-16 08:00:00' 
VALID UNTIL '2026-06-16 18:36:00';
​
​
-- 设置账号有效时间段,有效时间段可以正常登录,有效期过期后无法登录。
alter user t_timeuser 
VALID BEGIN '2026-06-16 08:00:00' 
VALID UNTIL '2026-06-16 18:39:00';

1781606202611.png

1781606422250.png

(四)密码安全策略

1. 密码加密算法

支持 MD5、SHA256、SM3 等加密方式,参数 password_encryption_type 取值:0/1/2/3

参数值 加密算法 补充说明
0 MD5 安全性较低,存在破解风险
1 SHA256 + MD5 系统默认值,同时生成两种密文,主要用于兼容老旧 PostgreSQL 客户端
2 SHA256 安全性适中,常规业务环境首选
3 SM3 国密算法,等保、涉密、政企场景优先选择
-- 查看当前密码加密类型
show password_encryption_type;
​
-- 新创建用户生效
alter system set password_encryption_type=2;
​
-- 创建新用户
create user t_pwuser identified by 'Gbase_123';
​
-- 查看指定账号的密码、加密方式等全量账户信息
select rolname, rolpassword from pg_authid where rolname in('gbase','t_pwuser') ;

1781607461799.png

2. 密码复杂度校验

总开关 password_policy:1 = 开启复杂度校验,0 = 关闭;

规则:密码长度、大小写、数字、特殊字符组合校验,至少包含三类字符,禁止弱口令、与用户名一致。

  • 字符类最小数量控制参数
参数名 作用说明
password_min_uppercase 密码中大写字母 (A-Z) 最少出现个数
password_min_lowercase 密码中小写字母 (a-z) 最少出现个数
password_min_digital 密码中数字 (0-9) 最少出现个数
password_min_special 密码中特殊符号最少出现个数
  • 密码长度控制参数
参数名 作用说明
password_min_length 密码允许的最小字符长度
password_max_length 密码允许的最大字符长度
  • 强制校验规则(全局约束,开启 password_policy=1 生效)
    • 字符类别强制要求 大写、小写、数字、特殊符号四类,密码必须至少包含其中三类。
    • 禁止与用户名相关 密码不能等于用户名、用户名倒写,匹配不区分大小写。
    • 禁止复用当前密码 不能和当前密码、当前密码倒写一致。
    • 弱口令拦截 内置通用弱口令库,111111、123456qw 等简单密码直接拒绝创建 / 修改。
-- 查看密码复杂度总开关
show password_policy;
​
-- 测试创建弱密码用户(会直接报错)
create user u1 identified by '111111';
create user u1 identified by '123456qw';
​
-- 关闭密码复杂度
alter system set password_policy=0;
​
-- 测试创建弱密码用户成功
create user u1 identified by '111111';

1781607603419.png

3. 密码重用限制

控制历史密码不可重复使用的天数次数

-- 查看密码禁止重用天数(默认60天)
show password_reuse_time;
alter system set password_reuse_time=10;--10内不能复用旧密码
create user t_pwuser identified by 'Gbase_123';
alter user t_pwuser identified by 'Gbase_124';
alter user t_pwuser identified by 'Gbase_123';
drop user t_pwuser;
​
-- 查看密码禁止重用次数(默认是0不限制,优先级大于重用天数)
show password_reuse_max;
alter system set password_reuse_max=1;--1次新密码后才能复用旧密码
create user t_pwuser identified by 'Gbase_123';
alter user t_pwuser identified by 'Gbase_124';
alter user t_pwuser identified by 'Gbase_123';
drop user t_pwuser;

1781620756740.png 1781620932470.png

4. 密码有效期与到期提醒

-- 查看密码有效时长(单位:天,默认90天)
show password_effect_time;
alter system set password_effect_time=1;
show password_effect_time;--修改后查询
​
-- 查看密码到期提前提醒天数(默认7天)
show password_notify_time;
alter system set password_notify_time=1;
show password_notify_time;--修改后查询

1781622782051.png

5. 强制密码失效

新建 / 修改用户时直接置密码为过期,用户登录后必须先改密码

-- 新建用户并设置密码立即失效
create user u1 password 'Gbase_123' expired;
​
-- 修改密码(密码修改后,可以正常执行操作)
ALTER ROLE u1 IDENTIFIED BY 'Gbase_124' REPLACE 'Gbase_123';
​
-- 对已有用户设置密码失效(用gbase用户设置,u1再次登录后执行\l,无法执行)
alter user u1 password 'Gbase_125' expired;

1781623375075.png 1781623900568.png

三、权限控制

(一)功能说明

分为系统权限对象权限;默认采用基于角色访问控制,也可开启三权分立模型(系统管理员、安全管理员、审计管理员权限隔离),遵循最小权限原则。

(二)数据库 & 全局权限

  • 创建数据库、测试用户
create database test_1;
create user test1 identified by 'Gbase_123';
  • DBA 全权限授予与回收
-- 授予 DBA 所有权限
grant ALL privileges to test1;
-- 测试创建、删除用户、创建表
create user test2 identified by 'Gbase_123';
drop user test2;
create table t1(id int primary key ,name varchar(20));

1781669618552.png

-- 回收 DBA 所有权限
revoke ALL privileges from test1;
-- 测试创建、创建表,没有权限无法创建。
create user test2 identified by 'Gbase_123';
create table t1(id int primary key ,name varchar(20));

1781669769639.png

  • 数据库连接权限控制
-- 回收所有用户(public)对 test_1 库的连接权限
revoke connect on database test_1 from public;

1781670061037.png

-- 给指定用户授予数据库连接权限
grant CONNECT ON DATABASE test_1 to test1;

1781670128639.png

-- 客户端 gsql 登录命令
gsql -d test_1 -U test1  -p 5432 -W Gbase_123 -r

1781670174249.png

-- 回收指定用户数据库连接权限
gsql -d test -r   --gbase用户登录
GRANT CONNECT ON DATABASE test_1 TO test1;    --授权test1用户可以登录
revoke connect on database test_1 from test1; --回收test1用户可以登录
gsql -d test_1 -U test1  -p 5432 -W Gbase_123 -r --无法登录

1781671398316.png

(三)数据表对象权限(增删改查)

gsql -d test -r --gbase用户登录test库
revoke connect on database test from public;
create user test4 identified by 'Gbase_123';
GRANT CONNECT ON DATABASE test TO test4; 
​
-- 1. 建测试表
create table t3(id int,name varchar(10));
gsql -d test -r -U test4 -W Gbase_123 --test4用户登录test库查询表t3
select * from t3;
​
​
​
-- 3. 回收表权限
revoke select ON table t3 from test4;
revoke insert ON table t3 from test4;
revoke update ON table t3 from test4;
revoke delete ON table t3 from test4;

1781673542349.png

-- 2. 依次授予 查/增/改/删 权限
gsql -d test -r --gbase用户登录test库
grant select ON table t3 to test4;
grant insert ON table t3 to test4;
grant update ON table t3 to test4;
grant delete ON table t3 to test4;
-- 3.授权后登录test4,执行增删改查操作
gsql -d test -r -U test4 -W Gbase_123
insert into t3 values(1,'测试1'),(2,'测试2');
update t3 set name='更新1' where id=1;
delete from t3 where id=2;
select * from t3;

1781673884833.png

四、审计功能

(一)功能说明

全程记录数据库各类操作日志,支持追溯登录、账号操作、DDL、DML、权限变更等行为;支持日志自动清理与手动清理。

审计覆盖范围:登录 / 注销、库启停、账号锁定、越权访问、权限变更、库表增删改查、存储过程执行等。

(二)审计基础参数配置

-- 1. 开启审计总开关
alter system set audit_enabled=on;
show audit_enabled;
-- 2. 查看审计日志存放目录
show audit_directory;
​
-- 3. 开启全量对象审计(127 为全开表级DDL审计)
alter system set audit_system_object=127;
show audit_system_object;
​
-- 4. 开启 DML 审计(insert/update/delete)
alter system set audit_dml_state=1;
show audit_dml_state;
​
-- 5. 开启 DQL 查询审计(select)
alter system set audit_dml_state_select=1;
show audit_dml_state_select;
​
-- 查看审计对象配置项
show audit_system_object;

1782038781535.png

-- audit_system_object 是位掩码型整数参数,每一个二进制位对应一类数据库对象的 DDL 审计开关:
第 0 位 (1):数据库 (DATABASE) 审计
第 1 位 (2):模式 (SCHEMA) 审计
第 2 位 (4):用户 (USER/ROLE) 审计
第 3 位 (8):表 (TABLE) 审计
第 4 位 (16):视图 (VIEW) 审计
第 5 位 (32):存储过程 / 函数 (PROC/FUNC) 审计
第 6 位 (64):序列 (SEQUENCE) 审计
2. 127 二进制拆解
127 = 0b1111111 = 1+2+4+8+16+32+64
全部低 7 位置 1,代表:
✅ 审计数据库、模式、用户、表、视图、函数、序列的建 / 改 / 删操作

(三) 测试数据(用于后续审计查询)

-- 创建测试库 test_audit
CREATE DATABASE test_audit;
\c test_audit
​
-- 创建测试用户 audit_user
CREATE USER audit_user WITH PASSWORD 'Audit@123';
GRANT ALL PRIVILEGES ON DATABASE test_audit TO audit_user;
ALTER USER audit_user WITH AUDITADMIN;
​
\c - audit_user
​
-- 创建测试业务表 t_audit_test
CREATE TABLE t_audit_test(
    id int primary key,
    name text
);
-- 执行 DML 增、改、删、查(全覆盖)
-- 插入
INSERT INTO t_audit_test VALUES(1,'张三');
-- 更新
UPDATE t_audit_test SET name='李四' WHERE id=1;
-- 查询
SELECT * FROM t_audit_test;
-- 删除
DELETE FROM t_audit_test WHERE id=1;

(四)常用审计日志查询

统一通过系统视图 pg_query_audit 查询日志,支持按时间、操作类型、对象、用户筛选。

-- 1. 查询近1小时全量审计记录
select time,object_name,detail_info,type,result from pg_query_audit(sysdate-1/24,sysdate) WHERE database='test_audit';
​
-- 2. 查询账号锁定相关审计记录
select time,detail_info,type,result from pg_query_audit(sysdate-1/24,sysdate) where type ='lock_user';
​
-- 3. 按用户名/对象名查询操作日志
select time,detail_info,type,result from pg_query_audit(sysdate-1/24,sysdate) where object_name='audit_user';
​
-- 4. 查询数据库 DDL(建库/删库)操作日志
select time,detail_info,type,result from pg_query_audit(sysdate-1/24,sysdate) where type ='ddl_database';
​
-- 5. 查询近1天 登录失败 记录
select time,detail_info,type,result from pg_query_audit(sysdate-1,sysdate)
where type='login_failed';
​
-- 6. 查询近1天 登录成功 记录
select time,detail_info,type,result from pg_query_audit(sysdate-1,sysdate) 
where type='login_success';
​
-- 7. 按表名查询该表所有操作审计
select time,object_name,detail_info,type,result from pg_query_audit(sysdate-1/24,sysdate) where object_name='t_audit_test';

1782043362196.png

(五)审计日志清理

  • 自动清理:日志大小 / 数量达到阈值,自动删除最早日志
-- 查看审计日志空间限制参数
SHOW audit_space_limit;
  • 手动清理:按时间范围删除审计文件
-- 删除指定时间段内的审计日志
SELECT pg_delete_audit('2026-06-21 00:00:00','2026-06-21 19:30:00');

1782043468091.png

五、黑白名单访问控制

(一)功能说明

通过配置 pg_hba.conf 文件实现 IP、客户端、访问方式的黑白名单拦截,管控外部连接。

(二)操作配置

-- 查看数据目录,找到 pg_hba.conf 配置文件路径
show data_directory;
  1. 配置文件格式
# TYPE  DATABASE  USER  ADDRESS  METHOD

1782045872505.png

  1. 支持认证方式:trustreject(黑名单拒绝)、md5sha256cert
  2. 示例规则:限制本地 / 远程 IP 连接,通过 reject 实现黑名单拦截。
  • 重新加载
gs_guc reload -Z coordinator -N all -I all -c "listen_addresses"
  • 143 IP 登录数据库
gsql -h 172.27.237.144 -p 5432 -U audit_user -d test_audit -W Audit@123

1782046296814.png

  • 146 IP 登录数据库
gsql -h 172.27.237.144 -p 5432 -U audit_user -d test_audit -W Audit@123
--注意,远程连接pg_hba.conf配置的是sha256加密方式,一定要注意设置password_encryption_type=2才可以登录,如果password_encryption_type等于其他值,需要修改pg_hba.conf中对应的加密方式。

1782046594294.png

评论

登录后才可以发表评论
GBase用户21182发表于 2个月前
GBase 8c安全覆盖账号策略、权限、审计、访问黑白名单,配套完整参数与实操SQL满足等保要求。
GBase用户50900发表于 2个月前
非常实用的内容,收藏了。
GBase用户51966发表于 2个月前
写得很好,学习了!
GBase用户51510发表于 2个月前
内容详实,值得收藏。
GBase用户51511发表于 2个月前
内容详实,值得收藏。
一个老汉发表于 2个月前
好文章,支持一下!
佛洛伊得发表于 2个月前
好文章,支持一下!
塔山发表于 2个月前
分析得很透彻,学习了。
用户头像
A杰发表于 2个月前
写得很好,学习了!