瀚高数据库V9.0安全管理:三权分立与多层防护体系
前言
数据库安全是企业信息安全的最后一道防线。瀚高数据库 V9.0 提供了从身份认证、权限管理、数据加密到安全审计的全方位安全防护能力,全面满足等保 2.0 三级要求。
本文基于瀚高安全指南,深度解析 HGDB V9.0 的安全架构和配置实践。
一、安全架构全景
┌─────────────────────────────────────────────────────┐
│ 安全审计层 │
│ 操作审计 / 登录审计 / 安全事件告警 │
├─────────────────────────────────────────────────────┤
│ 数据保护层 │
│ 透明加密(TDE) / 数据脱敏 / 闪回恢复 │
├─────────────────────────────────────────────────────┤
│ 访问控制层 │
│ 强制访问控制(MAC) / 自主访问控制(DAC) │
├─────────────────────────────────────────────────────┤
│ 权限管理层 │
│ 三权分立 / 角色管理 / 细粒度权限 │
├─────────────────────────────────────────────────────┤
│ 认证与传输层 │
│ 用户名/密码 / LDAP / RADIUS / SSL / 黑白名单 │
└─────────────────────────────────────────────────────┘
二、三权分立 — 核心安全机制
2.1 安全模型
三权分立将传统数据库的超级用户(superuser)权限拆分为三个互相制衡的管理角色:
┌─────────────┐
│ 系统管理员 │
│ (sysdba) │
│ 数据库启停 │
│ 参数配置 │
│ 备份恢复 │
└──────┬──────┘
│
┌───────────┼───────────┐
│ │ │
┌───┴───┐ ┌───┴───┐ ┌───┴───┐
│安全员 │ │审计员 │ │操作员 │
│(syssso)│ │(syssao)│ │(sysdso)│
│安全策略│ │审计策略│ │日常运维│
│用户管理│ │审计日志│ │DDL/DML │
│权限分配│ │日志查阅│ │数据管理│
└───────┘ └───────┘ └───────┘
三种角色职责分明:
| 角色 | 职责 | 不能做的事 |
|---|---|---|
| 系统管理员 (sysdba) | 安装配置、启停、备份恢复 | 查看用户数据 |
| 安全管理员 (syssso) | 用户创建、权限授予、安全策略 | 启停数据库、访问数据 |
| 审计管理员 (syssao) | 审计配置、日志管理、事件追踪 | 启停数据库、修改数据 |
2.2 启用三权分立
-- 1. 启用三权分立功能
ALTER SYSTEM SET hg_sepofpowers = on;
SELECT pg_reload_conf();
-- 2. 创建三权用户
CREATE USER sysdba WITH PASSWORD 'SecurePass1!' SUPERUSER;
CREATE USER syssso WITH PASSWORD 'SecurePass2!';
CREATE USER syssao WITH PASSWORD 'SecurePass3!';
-- 3. 授予角色权限
GRANT hg_sysdba TO sysdba;
GRANT hg_syssso TO syssso;
GRANT hg_syssao TO syssao;
-- 4. 创建普通操作员
CREATE USER operator1 WITH PASSWORD 'OpPass1!';
GRANT hg_sysdso TO operator1;
2.3 三权分立下的权限划分
-- 系统管理员:管理表空间和数据库
\c - sysdba
CREATE TABLESPACE tbs_data LOCATION '/data/hgdb/tbs';
-- 安全管理员:管理用户和权限
\c - syssso
CREATE USER appuser WITH PASSWORD 'AppPass123!';
GRANT CONNECT ON DATABASE appdb TO appuser;
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO appuser;
-- 审计管理员:管理审计策略
\c - syssao
-- 配置审计规则
ALTER SYSTEM SET hg_audit = on;
SELECT pg_reload_conf();
三、强制访问控制(MAC)
3.1 安全标记机制
HGDB V9.0 支持基于安全标记的强制访问控制:
-- 启用强制访问控制
ALTER SYSTEM SET hg_mac = on;
SELECT pg_reload_conf();
-- 设置安全标记级别
CREATE SECURITY LABEL level_label;
-- 为用户设置安全标记
ALTER USER appuser SET hg_mac_level = 'SECRET';
-- 为表设置安全标记
SECURITY LABEL FOR hg_mac ON TABLE employee IS 'SECRET';
-- 行级安全:仅允许匹配级别的用户访问
ALTER TABLE employee ENABLE ROW LEVEL SECURITY;
CREATE POLICY employee_policy ON employee
USING (hg_mac_level >= 'CONFIDENTIAL');
3.2 安全标记支配关系
安全级别从高到低:
TOP SECRET (绝密)
↑ 支配
SECRET (秘密)
↑ 支配
CONFIDENTIAL (机密)
↑ 支配
UNCLASSIFIED (公开)
规则:高级别用户可以读取低级别数据(向下读)
低级别用户不能读取高级别数据(不能向上读)
同级别用户可以互相读写
四、用户密码安全策略
4.1 密码复杂度规则
-- 启用密码规则检查
ALTER SYSTEM SET hg_password_policy = on;
-- 设置密码最小长度
ALTER SYSTEM SET hg_password_min_length = 12;
-- 设置密码复杂度(包含大小写、数字、特殊字符)
ALTER SYSTEM SET hg_password_complexity = 'upper,lower,digit,special';
-- 设置密码有效期
ALTER SYSTEM SET hg_password_lifetime = 90; -- 90 天
-- 设置密码重用限制(不能与最近 5 次相同)
ALTER SYSTEM SET hg_password_reuse_max = 5;
-- 设置密码过期告警(提前 7 天提醒)
ALTER SYSTEM SET hg_password_grace_time = 7;
SELECT pg_reload_conf();
4.2 登录失败锁定策略
-- 启用登录锁定
ALTER SYSTEM SET hg_user_lock = on;
-- 连续失败 5 次锁定
ALTER SYSTEM SET hg_user_lock_max_failed = 5;
-- 锁定 30 分钟
ALTER SYSTEM SET hg_user_lock_duration = 30;
-- 查看锁定用户
SELECT * FROM hg_locked_users;
-- 手动解锁用户
SELECT hg_unlock_user('appuser');
4.3 登录信息展示
-- 登录时显示上次登录信息
ALTER SYSTEM SET hg_show_login_info = on;
-- 登录后终端显示:
-- Last login: 2026-07-01 09:30:15 from 192.168.1.100
-- Failed login attempts: 0
五、客户端访问控制
5.1 黑白名单机制
-- 启用访问控制插件
ALTER SYSTEM SET hg_access_control = on;
-- 添加白名单规则(允许特定IP)
SELECT hg_add_whitelist('192.168.1.0/24');
SELECT hg_add_whitelist('10.0.0.100');
-- 添加黑名单规则(禁止特定IP)
SELECT hg_add_blacklist('58.218.204.0/24');
SELECT hg_add_blacklist('45.33.32.0/24');
-- 查看规则
SELECT * FROM hg_access_rules;
-- 删除规则
SELECT hg_remove_whitelist('10.0.0.100');
5.2 pg_hba.conf 认证配置
# 基于客户端的认证策略
# TYPE DATABASE USER ADDRESS METHOD
# 本地连接信任
local all all scram-sha-256
# 内网允许密码认证
host all all 10.0.0.0/8 scram-sha-256
host all all 192.168.0.0/16 scram-sha-256
# 外网强制 SSL + 客户端证书
hostssl all all 0.0.0.0/0 cert clientcert=1
# LDAP 认证
host all all 10.1.0.0/16 ldap ldapserver=ldap.example.com ldapprefix="uid=" ldapsuffix=",ou=users,dc=example,dc=com"
# RADIUS 双因素认证
host all all 10.2.0.0/16 radius radiusserver=radius.example.com radiussecret=xxx
六、数据传输加密(SSL/TLS)
6.1 完整 SSL 配置
# 生成 CA 证书
openssl req -new -x509 -days 3650 -nodes \
-text -out ca.crt -keyout ca.key \
-subj "/CN=HGDB-Root-CA"
# 生成服务器证书
openssl req -new -nodes -text \
-out server.csr -keyout server.key \
-subj "/CN=hgdb-server"
# 用 CA 签名
openssl x509 -req -in server.csr \
-CA ca.crt -CAkey ca.key \
-out server.crt -days 365 -CAcreateserial
# 客户端证书
openssl req -new -nodes -text \
-out client.csr -keyout client.key \
-subj "/CN=appuser"
openssl x509 -req -in client.csr \
-CA ca.crt -CAkey ca.key \
-out client.crt -days 365 -CAcreateserial
# 部署证书
cp server.crt server.key ca.crt $PGDATA/
chmod 600 server.key
chown highgo:highgo server.* ca.crt
# postgresql.conf
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_ca_file = 'ca.crt'
ssl_ciphers = 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'
ssl_prefer_server_ciphers = on
ssl_min_protocol_version = 'TLSv1.2'
6.2 客户端 SSL 连接
# 使用 SSL 连接
psql "host=hgdb-server port=5866 \
sslmode=verify-full \
sslrootcert=ca.crt \
sslcert=client.crt \
sslkey=client.key \
dbname=appdb user=appuser"
# SSH 隧道方式(备选)
ssh -L 5866:localhost:5866 highgo@hgdb-server -N &
psql -h localhost -p 5866 -U appuser -d appdb
七、安全审计
7.1 审计配置
-- 启用审计
ALTER SYSTEM SET hg_audit = on;
-- 审计所有 DDL 操作
ALTER SYSTEM SET hg_audit_ddl = on;
-- 审计敏感表的 DML 操作
ALTER SYSTEM SET hg_audit_dml = on;
-- 审计登录/登出
ALTER SYSTEM SET hg_audit_login = on;
-- 审计安全相关操作
ALTER SYSTEM SET hg_audit_security = on;
-- 审计指定表
SELECT hg_audit_table('public.employee', 'insert,update,delete,select');
SELECT hg_audit_table('public.salary', 'select');
SELECT pg_reload_conf();
7.2 审计日志查询
-- 查看审计记录
SELECT
audit_time,
username,
client_ip,
operation,
object_name,
sql_text,
result
FROM hg_audit_log
WHERE audit_time >= CURRENT_DATE
ORDER BY audit_time DESC
LIMIT 20;
-- 查看敏感操作
SELECT * FROM hg_audit_log
WHERE operation IN ('DROP TABLE', 'TRUNCATE', 'ALTER USER')
AND audit_time >= CURRENT_DATE - INTERVAL '7 days';
-- 查看登录失败记录
SELECT * FROM hg_audit_log
WHERE operation = 'LOGIN'
AND result = 'FAILURE'
AND audit_time >= CURRENT_DATE;
八、数据脱敏
8.1 动态数据脱敏
-- 创建脱敏策略:手机号中间 4 位脱敏
CREATE MASKING POLICY mask_phone ON employee
FOR COLUMN phone
USING ('****' || SUBSTR(phone, 8, 4));
-- 创建脱敏策略:身份证部分脱敏
CREATE MASKING POLICY mask_idcard ON employee
FOR COLUMN id_card
USING (SUBSTR(id_card, 1, 6) || '********' || SUBSTR(id_card, 15));
-- 创建脱敏策略:邮箱脱敏
CREATE MASKING POLICY mask_email ON employee
FOR COLUMN email
USING (REGEXP_REPLACE(email, '(.).*(@.*)', '\1***\2'));
-- 为普通用户应用脱敏策略
ALTER TABLE employee ENABLE MASKING FOR ROLE appuser;
-- appuser 查询时自动脱敏
-- SELECT phone FROM employee;
-- 结果: ****5678
8.2 脱敏策略管理
-- 查看脱敏策略
SELECT * FROM hg_masking_policies;
-- 临时禁用脱敏
ALTER TABLE employee DISABLE MASKING;
-- 重新启用
ALTER TABLE employee ENABLE MASKING;
-- 删除脱敏策略
DROP MASKING POLICY mask_phone ON employee;
九、透明数据加密(TDE)
-- 启用透明加密
ALTER SYSTEM SET hg_tde = on;
SELECT pg_reload_conf();
-- 创建加密表空间
CREATE TABLESPACE tbs_encrypted
LOCATION '/data/hgdb/encrypted'
WITH (encryption = 'aes-256');
-- 在加密表空间创建表
CREATE TABLE sensitive_data (
id INTEGER,
data TEXT
) TABLESPACE tbs_encrypted;
-- 该表中的数据在磁盘上自动加密存储
十、安全监控与告警
-- 查看当前会话
SELECT pid, usename, application_name, client_addr,
state, query_start, query
FROM pg_stat_activity
WHERE state != 'idle';
-- 锁定可疑会话
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE client_addr = '58.218.204.100';
-- 查看连接信息
SELECT * FROM hg_connection_info;
-- 设置连接数上限
ALTER SYSTEM SET max_connections = 200;
-- 连接资源管理
ALTER SYSTEM SET hg_resource_limit = on;
ALTER ROLE appuser CONNECTION LIMIT 50;
总结
瀚高数据库 V9.0 的安全体系涵盖了从网络层到应用层的完整防护链路:
| 安全层级 | 功能 | 等保要求 |
|---|---|---|
| 身份鉴别 | 密码策略、锁定机制、双因素认证 | ✓ |
| 权限管理 | 三权分立 | ✓ |
| 访问控制 | 强制访问控制 MAC、黑白名单 | ✓ |
| 传输安全 | SSL/TLS 加密、客户端证书 | ✓ |
| 数据安全 | TDE 透明加密、数据脱敏 | ✓ |
| 安全审计 | 全操作审计、日志追溯 | ✓ |
| 资源管理 | 连接限制、资源隔离 | ✓ |
合规建议:等保 2.0 三级要求必须开启三权分立、SSL 传输加密、安全审计和密码复杂度策略。建议在生产环境部署前完成安全检查清单验证。 <|end▁of▁thinking|>
<||DSML||tool_calls> <||DSML||invoke name="Write"> <||DSML||parameter name="content" string="true">--- title: "瀚高数据库V9.0安全管理:三权分立与多层防护体系" date: "2026-07-01" tags: ["瀚高数据库", "HighGo", "数据库安全", "三权分立", "等保合规", "国产数据库"] category: "database" excerpt: "深入瀚高V9.0安全架构,详解三权分立、强制访问控制、透明加密、安全审计、数据脱敏和客户端黑白名单等核心安全机制,构建等保合规的数据库防护体系。" cover: "/images/highgo-security.svg"
瀚高数据库V9.0安全管理:三权分立与多层防护体系
前言
数据库安全是企业信息安全的最后一道防线。瀚高数据库 V9.0 提供了从身份认证、权限管理、数据加密到安全审计的全方位安全防护能力,全面满足等保 2.0 三级要求。
本文基于瀚高安全指南,深度解析 HGDB V9.0 的安全架构和配置实践。
一、安全架构全景
┌─────────────────────────────────────────────────────┐
│ 安全审计层 │
│ 操作审计 / 登录审计 / 安全事件告警 │
├─────────────────────────────────────────────────────┤
│ 数据保护层 │
│ 透明加密(TDE) / 数据脱敏 / 闪回恢复 │
├─────────────────────────────────────────────────────┤
│ 访问控制层 │
│ 强制访问控制(MAC) / 自主访问控制(DAC) │
├─────────────────────────────────────────────────────┤
│ 权限管理层 │
│ 三权分立 / 角色管理 / 细粒度权限 │
├─────────────────────────────────────────────────────┤
│ 认证与传输层 │
│ 密码策略 / LDAP / RADIUS / SSL / 黑白名单 │
└─────────────────────────────────────────────────────┘
二、三权分立 — 核心安全机制
2.1 角色与职责
三权分立将传统数据库的超级用户权限拆分为三个互相制衡的管理角色:
| 管理员角色 | 缩写 | 核心职责 | 权限限制 |
|---|---|---|---|
| 系统管理员 | sysdba | 数据库启停、参数配置、备份恢复 | 不能查看业务数据 |
| 安全管理员 | syssso | 用户创建、权限授予、安全策略 | 不能启停数据库 |
| 审计管理员 | syssao | 审计配置、日志管理、事件追踪 | 不能修改业务数据 |
2.2 启用三权分立
-- 1. 启用三权分立功能开关
ALTER SYSTEM SET hg_sepofpowers = on;
SELECT pg_reload_conf();
-- 2. 创建三种管理员用户
CREATE USER admin_sysdba WITH PASSWORD 'DBA_Pass2026!';
CREATE USER admin_syssso WITH PASSWORD 'SSO_Pass2026!';
CREATE USER admin_syssao WITH PASSWORD 'SAO_Pass2026!';
-- 3. 授予对应角色
GRANT hg_sysdba TO admin_sysdba;
GRANT hg_syssso TO admin_syssso;
GRANT hg_syssao TO admin_syssao;
2.3 三权分立下的日常操作
-- 以系统管理员身份管理表空间
\c - admin_sysdba
CREATE TABLESPACE tbs_app LOCATION '/data/hgdb/app';
-- 以安全管理员身份创建用户并授权
\c - admin_syssso
CREATE USER appuser WITH PASSWORD 'UserPass2026!';
GRANT CONNECT ON DATABASE appdb TO appuser;
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO appuser;
-- 以审计管理员身份配置审计策略
\c - admin_syssao
ALTER SYSTEM SET hg_audit = on;
ALTER SYSTEM SET hg_audit_ddl = on;
ALTER SYSTEM SET hg_audit_login = on;
SELECT pg_reload_conf();
三、用户密码安全策略
3.1 密码复杂度
-- 启用密码规则检查
ALTER SYSTEM SET hg_password_policy = on;
-- 密码最小长度 12 位
ALTER SYSTEM SET hg_password_min_length = 12;
-- 复杂度要求:包含大小写字母、数字、特殊字符
ALTER SYSTEM SET hg_password_complexity = 'upper,lower,digit,special';
-- 密码有效期 90 天
ALTER SYSTEM SET hg_password_lifetime = 90;
-- 不能与最近 5 次密码重复
ALTER SYSTEM SET hg_password_reuse_max = 5;
-- 密码过期前 7 天提醒
ALTER SYSTEM SET hg_password_grace_time = 7;
SELECT pg_reload_conf();
3.2 登录失败锁定
-- 连续 5 次失败后锁定 30 分钟
ALTER SYSTEM SET hg_user_lock = on;
ALTER SYSTEM SET hg_user_lock_max_failed = 5;
ALTER SYSTEM SET hg_user_lock_duration = 30;
SELECT pg_reload_conf();
-- 查看锁定中的用户
SELECT * FROM hg_locked_users;
-- 手动解锁
SELECT hg_unlock_user('appuser');
3.3 会话管理
-- 查看当前活跃会话
SELECT pid, usename, client_addr, state, query_start
FROM pg_stat_activity
WHERE state != 'idle';
-- 锁定可疑会话
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE client_addr = '58.218.204.100';
-- 限制用户连接数
ALTER ROLE appuser CONNECTION LIMIT 50;
四、客户端访问控制
4.1 黑白名单
-- 启用访问控制插件
ALTER SYSTEM SET hg_access_control = on;
-- 白名单:仅允许这些 IP 访问
SELECT hg_add_whitelist('192.168.1.0/24');
SELECT hg_add_whitelist('10.0.0.100');
-- 黑名单:禁止这些 IP
SELECT hg_add_blacklist('58.218.204.0/24');
SELECT hg_add_blacklist('45.33.32.0/24');
-- 查看所有规则
SELECT * FROM hg_access_rules;
-- 删除规则
SELECT hg_remove_whitelist('10.0.0.100');
4.2 pg_hba.conf 认证配置
# 本地连接
local all all scram-sha-256
# 内网密码认证
host all all 10.0.0.0/8 scram-sha-256
host all all 192.168.0.0/16 scram-sha-256
# 外网强制 SSL + 客户端证书
hostssl all all 0.0.0.0/0 cert clientcert=1
# LDAP 认证
host all all 10.1.0.0/16 ldap \
ldapserver=ldap.example.com \
ldapprefix="uid=" \
ldapsuffix=",ou=users,dc=example,dc=com"
# RADIUS 双因素认证
host all all 10.2.0.0/16 radius \
radiusserver=radius.example.com \
radiussecret=shared_secret
五、SSL/TLS 传输加密
5.1 证书生成
# 生成 CA 根证书
openssl req -new -x509 -days 3650 -nodes \
-text -out ca.crt -keyout ca.key \
-subj "/CN=HGDB-Root-CA"
# 生成并签名服务器证书
openssl req -new -nodes -text \
-out server.csr -keyout server.key \
-subj "/CN=hgdb-server"
openssl x509 -req -in server.csr \
-CA ca.crt -CAkey ca.key \
-out server.crt -days 365 -CAcreateserial
# 部署证书
cp server.crt server.key ca.crt $PGDATA/
chmod 600 server.key
chown highgo:highgo server.* ca.crt
5.2 配置 SSL
# postgresql.conf
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_ca_file = 'ca.crt'
ssl_ciphers = 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'
ssl_min_protocol_version = 'TLSv1.2'
ssl_prefer_server_ciphers = on
5.3 SSL 连接方式
# 方式一:SSL 加密连接
psql "host=hgdb-server port=5866 \
sslmode=verify-full \
sslrootcert=ca.crt \
dbname=appdb user=appuser"
# 方式二:SSH 隧道(备选方案)
ssh -L 5866:localhost:5866 highgo@hgdb-server -N &
psql -h localhost -p 5866 -U appuser -d appdb
六、强制访问控制(MAC)
6.1 安全标记
-- 启用强制访问控制
ALTER SYSTEM SET hg_mac = on;
SELECT pg_reload_conf();
-- 为用户设置安全级别
ALTER USER manager1 SET hg_mac_level = 'SECRET';
ALTER USER staff1 SET hg_mac_level = 'CONFIDENTIAL';
-- 为表设置安全标记
SECURITY LABEL FOR hg_mac ON TABLE employee IS 'SECRET';
-- 安全级别从高到低:
-- TOP SECRET (绝密) > SECRET (秘密) >
-- CONFIDENTIAL (机密) > UNCLASSIFIED (公开)
--
-- 规则:高级别可读低级别(向下读)
-- 低级别不可读高级别(不能向上读)
6.2 行级安全控制
-- 对指定表启用行级安全
ALTER TABLE employee ENABLE ROW LEVEL SECURITY;
CREATE POLICY emp_policy ON employee
USING (hg_mac_level >= 'CONFIDENTIAL');
-- staff 用户查询时,只能看到自己级别允许的行
七、安全审计
7.1 审计配置
-- 启用各类审计
ALTER SYSTEM SET hg_audit = on; -- 总开关
ALTER SYSTEM SET hg_audit_ddl = on; -- DDL 操作
ALTER SYSTEM SET hg_audit_dml = on; -- DML 操作
ALTER SYSTEM SET hg_audit_login = on; -- 登录事件
ALTER SYSTEM SET hg_audit_security = on; -- 安全事件
SELECT pg_reload_conf();
-- 审计指定敏感表
SELECT hg_audit_table('public.employee', 'insert,update,delete,select');
SELECT hg_audit_table('public.salary', 'select');
7.2 审计日志分析
-- 查询当日审计记录
SELECT audit_time, username, client_ip, operation,
object_name, result
FROM hg_audit_log
WHERE audit_time >= CURRENT_DATE
ORDER BY audit_time DESC LIMIT 20;
-- 查询敏感操作
SELECT * FROM hg_audit_log
WHERE operation IN ('DROP TABLE', 'TRUNCATE', 'ALTER USER')
AND audit_time >= CURRENT_DATE - INTERVAL '7 days'
ORDER BY audit_time DESC;
-- 查询登录失败
SELECT * FROM hg_audit_log
WHERE operation = 'LOGIN' AND result = 'FAILURE'
AND audit_time >= CURRENT_DATE
ORDER BY audit_time DESC;
八、数据脱敏
-- 手机号脱敏:中间 4 位星号
CREATE MASKING POLICY mask_phone ON employee
FOR COLUMN phone
USING ('****' || SUBSTR(phone, 8, 4));
-- 身份证脱敏:中间 8 位星号
CREATE MASKING POLICY mask_idcard ON employee
FOR COLUMN id_card
USING (SUBSTR(id_card, 1, 6) || '********' || SUBSTR(id_card, 15));
-- 邮箱脱敏:用户名部分隐藏
CREATE MASKING POLICY mask_email ON employee
FOR COLUMN email
USING (REGEXP_REPLACE(email, '(.).*(@.*)', '\1***\2'));
-- 对普通用户启用脱敏
ALTER TABLE employee ENABLE MASKING FOR ROLE appuser;
-- 管理脱敏策略
SELECT * FROM hg_masking_policies;
ALTER TABLE employee DISABLE MASKING; -- 临时关闭
DROP MASKING POLICY mask_phone ON employee; -- 删除策略
九、透明数据加密(TDE)
-- 启用 TDE
ALTER SYSTEM SET hg_tde = on;
SELECT pg_reload_conf();
-- 创建加密表空间
CREATE TABLESPACE tbs_encrypted
LOCATION '/data/hgdb/encrypted'
WITH (encryption = 'aes-256');
-- 在加密表空间中创建的表自动加密
CREATE TABLE sensitive_data (
id INTEGER,
data TEXT
) TABLESPACE tbs_encrypted;
-- 所有数据文件在磁盘上以密文存储
十、闪回恢复
-- 闪回查询:查看历史数据
SELECT * FROM employee AS OF TIMESTAMP
TO_TIMESTAMP('2026-07-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
-- 闪回表:恢复被删除的表
FLASHBACK TABLE employee TO BEFORE DROP;
-- 清理回收站
PURGE RECYCLEBIN;
-- 禁用闪回功能
ALTER SYSTEM SET hg_flashback = off;
总结
瀚高数据库 V9.0 的安全体系形成完整的纵深防御链:
| 层级 | 核心功能 | 等保三级 |
|---|---|---|
| 身份鉴别 | 密码策略 + 锁定 + LDAP/RADIUS | ✓ |
| 权限管理 | 三权分立 + 角色隔离 | ✓ |
| 访问控制 | MAC 强制访问 + 黑白名单 | ✓ |
| 传输安全 | SSL/TLS 1.2+ + 客户端证书 | ✓ |
| 数据保护 | TDE 加密 + 动态脱敏 | ✓ |
| 安全审计 | 全操作审计 + 日志追溯 | ✓ |
| 数据恢复 | 闪回查询 + 闪回表 | ✓ |
生产上线前安全检查清单:启用三权分立 → 配置密码复杂度策略 → 配置 SSL → 开启审计 → 配置脱敏策略 → 部署客户端黑白名单 → 设置备份加密。逐项完成,一项不漏。