认证培训专区
学习笔记
文章
8cA09 GBase 8c 安全特性
发表于2026-06-21 21:08:1067次浏览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;

- 账号自动解锁时长
账号锁定后,达到指定时长自动解锁,默认 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'"

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


- 删除闲置账号
-- 创建一个要删除的用户
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';


(四)密码安全策略
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') ;

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';

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;

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;--修改后查询

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;

三、权限控制
(一)功能说明
分为系统权限与对象权限;默认采用基于角色访问控制,也可开启三权分立模型(系统管理员、安全管理员、审计管理员权限隔离),遵循最小权限原则。
(二)数据库 & 全局权限
- 创建数据库、测试用户
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));

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

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

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

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

-- 回收指定用户数据库连接权限
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 --无法登录

(三)数据表对象权限(增删改查)
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;

-- 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;

四、审计功能
(一)功能说明
全程记录数据库各类操作日志,支持追溯登录、账号操作、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;

-- 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';

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

五、黑白名单访问控制
(一)功能说明
通过配置 pg_hba.conf 文件实现 IP、客户端、访问方式的黑白名单拦截,管控外部连接。
(二)操作配置
-- 查看数据目录,找到 pg_hba.conf 配置文件路径
show data_directory;
- 配置文件格式
# TYPE DATABASE USER ADDRESS METHOD

- 支持认证方式:
trust、reject(黑名单拒绝)、md5、sha256、cert - 示例规则:限制本地 / 远程 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

- 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中对应的加密方式。

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