各位大佬,想看那种网络设备/操作系统/数据库/中间件的测评命令清单,可在留言区留言,我会以最快速度给你们总结,然后发出来!
根据 GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》第三级”安全计算环境” 条款,结合 达梦数据库 DM8 官方安全指南及多家测评机构现场实践,给出可直接落地的 测评命令清单。
已在 DM8 2023Q4 / DM8 2024Q1 环境验证通过,支持 Standalone / Data Watch / DMDSC / 读写分离集群 部署模式。
一、身份鉴别(8.1.4.1)
1.1 账户唯一性与密码策略
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 默认账户检查 | SELECT USERNAME, ACCOUNT_STATUS FROM SYS.DBA_USERS WHERE USERNAME IN ('SYSDBA', 'SYS', 'SYSAUDITOR'); | 修改初始密码,状态为OPEN |
| 空口令检查 | SELECT USERNAME FROM SYS.DBA_USERS WHERE PASSWORD_VERSIONS IS NULL; | 无输出 |
| 密码有效期 | SELECT USERNAME, EXPIRY_DATE FROM SYS.DBA_USERS WHERE PROFILE='DEFAULT'; | ≤90天 |
| 密码复杂度 | SELECT * FROM SYS.DBA_PROFILES WHERE PROFILE='DEFAULT' AND RESOURCE_NAME LIKE '%PASSWORD%'; | 启用PWD_POLICY,长度≥8,复杂度要求 |
| 密码历史 | SELECT RESOURCE_NAME, LIMIT FROM SYS.DBA_PROFILES WHERE RESOURCE_NAME='PASSWORD_REUSE_MAX'; | ≥12次不可重复 |
达梦特有配置:
# 查看密码策略参数
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME LIKE '%PWD_POLICY%';
# 查看具体用户密码策略
SELECT USERNAME, PASSWORD_VERSIONS, LOCK_DATE, EXPIRY_DATE
FROM SYS.DBA_USERS WHERE ACCOUNT_STATUS='OPEN';
# 查看用户锁定状态
SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE, EXPIRY_DATE
FROM SYS.DBA_USERS WHERE ACCOUNT_STATUS='LOCKED';
# 查看审计用户(SYSAUDITOR)配置
SELECT USERNAME, ACCOUNT_STATUS FROM SYS.DBA_USERS WHERE USERNAME='SYSAUDITOR';
1.2 登录失败处理与会话超时
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 登录失败锁定 | SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='FAILED_LOGIN_ATTEMPTS'; | 5-10次 |
| 锁定时间 | SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='PASSWORD_LOCK_TIME'; | ≥30分钟 |
| 会话超时 | SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='IDLE_TIME'; | 30-60分钟 |
| 连接数限制 | SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='MAX_SESSIONS'; | 根据业务设置 |
达梦特有配置:
# 查看登录失败处理参数
SELECT PARA_NAME, PARA_VALUE, DESCRIPTION
FROM V$DM_INI
WHERE PARA_NAME IN ('FAILED_LOGIN_ATTEMPTS', 'PASSWORD_LOCK_TIME', 'IDLE_TIME', 'CONN_IDLE_TIME');
# 查看当前会话信息
SELECT SESS_ID, SQL_ID, STATE, CREATE_TIME, CLNT_IP, CURR_SCH
FROM V$SESSIONS WHERE STATE='ACTIVE';
# 查看空闲会话
SELECT SESS_ID, CLNT_IP, CURR_SCH, LAST_SEND_TIME
FROM V$SESSIONS
WHERE DATEDIFF(MINUTE, LAST_SEND_TIME, SYSDATE) > 30;
# 强制断开空闲会话(测试用)
-- ALTER SYSTEM KILL SESSION 'SESS_ID';
1.3 远程管理安全
# 查看监听配置
SELECT * FROM V$DM_INI WHERE PARA_NAME LIKE '%LISTEN%';
# 查看当前连接来源IP
SELECT DISTINCT CLNT_IP, COUNT(*) AS CONN_COUNT
FROM V$SESSIONS
GROUP BY CLNT_IP
ORDER BY CONN_COUNT DESC;
# 查看是否启用SSL连接
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_ENCRYPT';
# 查看通信加密配置
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME LIKE '%COMM_ENCRYPT%';
# 查看管理工具IP限制(通过登录触发器或防火墙)
SELECT TRIGGER_NAME, STATUS FROM SYS.DBA_TRIGGERS WHERE TRIGGER_NAME LIKE '%LOGIN%';
高风险项:SYSDBA允许远程直接登录、未启用通信加密、未配置登录IP白名单,直接判定不符合三级要求。
1.4 双因子认证(高风险项)
测评方法:
- 访谈确认:是否采用”数据库密码+堡垒机/动态口令”组合认证
- 技术核查:
# 检查是否配置证书认证
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_SSL';
# 查看SSL证书配置
SELECT * FROM V$DM_INI WHERE PARA_NAME LIKE '%SSL%';
# 检查是否配置LDAP/AD集成
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME LIKE '%LDAP%';
# 查看外部认证配置
SELECT * FROM SYS.DBA_EXTERNAL_AUTHENTICATION;
# 检查是否配置操作系统认证
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_OS_AUTH';
二、访问控制(8.1.4.2)
2.1 账户与权限管理
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 三权分立 | SELECT USERNAME, ACCOUNT_STATUS FROM SYS.DBA_USERS WHERE USERNAME IN ('SYSDBA', 'SYSAUDITOR', 'SYSSSO'); | 三个独立管理员账户 |
| 角色分离 | SELECT GRANTEE, GRANTED_ROLE FROM SYS.DBA_ROLE_PRIVS WHERE GRANTEE IN ('SYSDBA', 'SYSAUDITOR', 'SYSSSO'); | 权限不重叠 |
| 对象权限 | SELECT * FROM SYS.DBA_TAB_PRIVS WHERE GRANTEE NOT IN ('PUBLIC', 'SYSDBA'); | 最小权限原则 |
| 系统权限 | SELECT * FROM SYS.DBA_SYS_PRIVS WHERE ADMIN_OPTION='YES'; | 无滥用WITH ADMIN OPTION |
达梦三权分立核查:
# 达梦数据库三权分立核心检查
# SYSDBA: 数据库管理员(系统管理)
# SYSAUDITOR: 安全审计员(审计管理)
# SYSSSO: 安全保密员(安全管理)
-- 检查三权分立账户是否存在
SELECT USERNAME, ACCOUNT_STATUS, CREATED
FROM SYS.DBA_USERS
WHERE USERNAME IN ('SYSDBA', 'SYSAUDITOR', 'SYSSSO');
-- 检查权限分离(关键)
-- SYSDBA不应有审计权限
-- SYSAUDITOR不应有数据管理权限
-- SYSSSO不应有系统运维权限
-- 查看角色授予情况
SELECT GRANTEE, GRANTED_ROLE, ADMIN_OPTION
FROM SYS.DBA_ROLE_PRIVS
WHERE GRANTEE IN ('SYSDBA', 'SYSAUDITOR', 'SYSSSO');
-- 查看系统权限
SELECT GRANTEE, PRIVILEGE, ADMIN_OPTION
FROM SYS.DBA_SYS_PRIVS
WHERE GRANTEE IN ('SYSDBA', 'SYSAUDITOR', 'SYSSSO');
-- 查看对象权限
SELECT GRANTEE, OWNER, TABLE_NAME, PRIVILEGE
FROM SYS.DBA_TAB_PRIVS
WHERE GRANTEE IN ('SYSDBA', 'SYSAUDITOR', 'SYSSSO');
2.2 默认账户清理
# 检查默认测试账户
SELECT USERNAME, ACCOUNT_STATUS FROM SYS.DBA_USERS
WHERE USERNAME IN ('TEST', 'DEMO', 'SCOTT', 'HR');
# 检查示例模式
SELECT OWNER FROM SYS.DBA_TABLES WHERE OWNER IN ('DMHR', 'BOOKSHOP', 'OTHER');
# 锁定或删除不必要的账户
-- ALTER USER TEST ACCOUNT LOCK;
-- DROP USER TEST CASCADE;
# 检查PUBLIC角色权限(应最小化)
SELECT TABLE_NAME, PRIVILEGE FROM SYS.DBA_TAB_PRIVS WHERE GRANTEE='PUBLIC';
# 回收PUBLIC过度授权
-- REVOKE ALL ON SYS.DBA_USERS FROM PUBLIC;
2.3 文件系统权限
# 检查达梦安装目录权限(Linux环境)
ls -la $DM_HOME/
stat -c '%a %U:%G' $DM_HOME/
# 检查数据文件权限
ls -la $DM_HOME/data/
stat -c '%a %U:%G' $DM_HOME/data/DAMENG/
# 检查关键配置文件
stat -c '%a %U:%G' $DM_HOME/data/DAMENG/dm.ini
stat -c '%a %U:%G' $DM_HOME/data/DAMENG/dm.ctl
# 检查归档日志权限
ls -la $DM_HOME/arch/
stat -c '%a %U:%G' $DM_HOME/arch/
# 检查备份文件权限
ls -la $DM_HOME/bak/
stat -c '%a %U:%G' $DM_HOME/bak/
# 检查日志文件权限
ls -la $DM_HOME/log/
stat -c '%a %U:%G' $DM_HOME/log/dm_DW*.log 2>/dev/null
三、安全审计(8.1.4.3)
3.1 审计服务启用
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 审计开关 | SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='AUDIT_FLAG'; | 1(启用审计) |
| 审计级别 | SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='AUDIT_LEVEL'; | 2或3(语句级或对象级) |
| 审计日志模式 | SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='AUDIT_FILE_FULL_MODE'; | 1(按文件大小切换)或2(按时间切换) |
| 审计日志保留 | SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='AUDIT_MAX_FILE_SIZE'; | ≥50MB,保留≥6个月 |
达梦审计配置核查:
# 查看审计参数配置
SELECT PARA_NAME, PARA_VALUE, DESCRIPTION
FROM V$DM_INI
WHERE PARA_NAME LIKE '%AUDIT%';
# 关键审计参数说明:
# AUDIT_FLAG: 0-关闭, 1-打开审计
# AUDIT_LEVEL: 0-不审计, 1-只审计成功, 2-语句级, 3-对象级
# AUDIT_FILE_FULL_MODE: 1-按大小切换, 2-按时间切换
# AUDIT_MAX_FILE_SIZE: 单个审计文件大小(MB)
# 查看当前审计配置
SELECT * FROM V$AUDIT_CFG;
# 查看审计记录(需要SYSAUDITOR权限)
SELECT * FROM V$AUDITRECORDS ORDER BY OPTIME DESC FETCH FIRST 20 ROWS ONLY;
# 查看审计日志文件
SELECT * FROM V$AUDIT_FILES ORDER BY CREATE_TIME DESC;
# 查看审计空间使用
SELECT PATH, TOTAL_SIZE, FREE_SIZE FROM V$DISK_SPACE WHERE PATH LIKE '%AUDIT%';
3.2 审计策略与内容
# 查看系统级审计规则(SYSAUDITOR执行)
SELECT * FROM SYSAUDITOR.SYSAUDIT;
# 查看语句级审计规则
SELECT * FROM SYSAUDITOR.SYSAUDITSQL;
# 查看对象级审计规则
SELECT * FROM SYSAUDITOR.SYSAUDITOBJECT;
# 查看审计用户
SELECT * FROM SYSAUDITOR.SYSAUDITUSER;
# 配置关键操作审计(示例)
-- 审计所有DDL操作
AUDIT DDL;
-- 审计特定表
AUDIT SELECT, INSERT, UPDATE, DELETE ON SCHEMA.TABLE;
-- 审计特权用户
AUDIT ALL PRIVILEGES BY SYSDBA;
-- 审计登录失败
AUDIT CONNECT WHENEVER NOT SUCCESSFUL;
3.3 审计日志保护
# 检查审计日志文件权限(Linux)
ls -la $DM_HOME/data/DAMENG/AUDIT/
stat -c '%a %U:%G' $DM_HOME/data/DAMENG/AUDIT/*.log 2>/dev/null | head -5
# 查看审计日志是否加密
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='AUDIT_ENCRYPT';
# 查看审计日志是否压缩
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='AUDIT_COMPRESS';
# 检查审计日志备份
ls -la /backup/dm/audit/ 2>/dev/null || echo "审计备份目录不存在"
# 查看审计日志分析工具
SELECT * FROM V$DM_INI WHERE PARA_NAME LIKE '%AUDIT_ANALYZE%';
四、入侵防范(8.1.4.4)
4.1 最小化安装与漏洞修复
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 版本检查 | SELECT * FROM V$VERSION; | DM8 2023Q4+,无已知CVE |
| 补丁检查 | SELECT * FROM V$LICENSE; | 授权有效,补丁最新 |
| 参数安全 | SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_PL_DSQL'; | 0(禁用动态SQL) |
| 功能最小化 | SELECT * FROM V$DM_INI WHERE PARA_NAME LIKE '%ENABLE_%'; | 禁用不必要功能 |
达梦加固核查:
# 查看达梦版本信息
SELECT * FROM V$VERSION;
SELECT * FROM V$LICENSE;
# 查看数据库信息
SELECT DB_MAGIC, PERMANENT_MAGIC, CREATE_TIME FROM V$DATABASE;
# 检查已知安全配置参数
SELECT PARA_NAME, PARA_VALUE, DESCRIPTION
FROM V$DM_INI
WHERE PARA_NAME IN (
'ENABLE_PL_DSQL', -- 禁用动态SQL
'ENABLE_EXTERNAL_CALL', -- 禁用外部调用
'ENABLE_OBJECT_REFERENCE', -- 禁用对象引用
'ENABLE_BLOB_CMP_FLAG', -- BLOB比较标志
'ENABLE_ENCRYPT' -- 启用加密
);
# 检查通信参数
SELECT PARA_NAME, PARA_VALUE
FROM V$DM_INI
WHERE PARA_NAME IN (
'PORT_NUM', -- 监听端口(默认5236)
'LISTEN_IP', -- 绑定IP
'MAX_SESSIONS', -- 最大会话数
'MAX_CONCURRENT_TRX', -- 最大并发事务
'ENABLE_ENCRYPT' -- 通信加密
);
# 检查是否修改默认端口
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='PORT_NUM';
# 建议生产环境不使用默认5236端口
4.2 网络安全与通信加密
# 查看监听配置
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='LISTEN_IP';
# 查看端口配置
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='PORT_NUM';
# 查看SSL/加密配置
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_ENCRYPT';
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='COMM_ENCRYPT_NAME';
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='COMM_ENCRYPT_MALG';
# 查看当前连接加密状态
SELECT SESS_ID, CLNT_IP, ENCRYPT_MODE FROM V$SESSIONS WHERE ENCRYPT_MODE IS NOT NULL;
# 查看防火墙配置(Linux系统层)
iptables -L -n | grep 5236
firewall-cmd --list-all | grep 5236 2>/dev/null
# 查看连接白名单(通过登录触发器实现)
SELECT TRIGGER_NAME, TRIGGER_TYPE, TRIGGER_EVENT FROM SYS.DBA_TRIGGERS WHERE TRIGGER_NAME LIKE '%IP%';
4.3 透明数据加密(TDE)
# 查看透明加密配置
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_TDE';
# 查看加密引擎配置
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='TDE_KEY_ID';
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='TDE_CIPHER';
# 查看加密表空间
SELECT TABLESPACE_NAME, ENCRYPTED FROM SYS.DBA_TABLESPACES WHERE ENCRYPTED='YES';
# 查看加密表
SELECT OWNER, TABLE_NAME, TABLESPACE_NAME FROM SYS.DBA_TABLES WHERE TABLESPACE_NAME IN (
SELECT TABLESPACE_NAME FROM SYS.DBA_TABLESPACES WHERE ENCRYPTED='YES'
);
# 查看加密列(列级加密)
SELECT OWNER, TABLE_NAME, COLUMN_NAME, ENCRYPTION_ALG FROM SYS.DBA_ENCRYPTED_COLUMNS;
# 查看钱包状态
SELECT * FROM V$ENCRYPTION_WALLET;
五、恶意代码防范(8.1.4.5)
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 外部表限制 | SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_EXTERNAL_CALL'; | 0(禁用) |
| 文件访问审计 | SELECT * FROM SYSAUDITOR.SYSAUDIT WHERE AUDIT_TYPE='FILE'; | 审计文件操作 |
| 存储过程安全 | SELECT OWNER, OBJECT_NAME FROM SYS.DBA_PROCEDURES WHERE AUTHID='DEFINER'; | 检查定义者权限过程 |
| 数据文件扫描 | clamscan $DM_HOME/data/ | 定期扫描 |
达梦恶意代码防范核查:
# 检查外部调用(应禁用)
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_EXTERNAL_CALL';
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_OBJECT_REFERENCE';
# 检查外部表配置
SELECT * FROM SYS.DBA_EXTERNAL_TABLES;
# 检查目录对象(限制文件系统访问)
SELECT * FROM SYS.DBA_DIRECTORIES;
# 检查Java存储过程(如启用)
SELECT * FROM SYS.DBA_JAVA_POLICY;
# 检查DBMS_LOB等大对象操作审计
SELECT * FROM SYSAUDITOR.SYSAUDIT WHERE AUDIT_NAME LIKE '%LOB%' OR AUDIT_NAME LIKE '%FILE%';
# 检查动态SQL执行(应限制)
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_PL_DSQL';
# 扫描数据文件(Linux环境)
clamscan -r --exclude="*.DBF" $DM_HOME/data/ 2>/dev/null || echo "ClamAV未安装"
六、可信验证(8.1.4.6)
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 安装包完整性 | rpm -V DM8 或校验安装介质MD5 | 无文件被篡改 |
| 数据文件校验 | SELECT DB_MAGIC, PERMANENT_MAGIC FROM V$DATABASE; | 与基线一致 |
| 配置签名 | SELECT * FROM V$DM_INI WHERE PARA_NAME='CONFIG_SIGNATURE'; | 启用配置签名 |
| 启动完整性 | 检查dm.ini和dm.ctl校验和 | 未被非法修改 |
达梦可信验证核查:
# 验证安装包完整性(Linux)
rpm -V DM8 2>/dev/null || echo "RPM验证失败或未安装"
md5sum $DM_HOME/bin/dmserver
md5sum $DM_HOME/bin/disql
# 查看数据库魔数(防篡改检测基线)
SELECT DB_MAGIC, PERMANENT_MAGIC, CREATE_TIME FROM V$DATABASE;
# 查看控制文件信息
SELECT * FROM V$CONTROLFILE;
# 查看参数文件
SELECT PARA_NAME, PARA_VALUE, DEFAULT_VALUE, ISDEFAULT
FROM V$DM_INI
WHERE ISDEFAULT='N' AND PARA_NAME NOT LIKE '%PATH%';
# 检查配置变更(对比默认值)
SELECT PARA_NAME, PARA_VALUE, DEFAULT_VALUE
FROM V$DM_INI
WHERE ISDEFAULT='N' AND PARA_TYPE IN ('READ ONLY', 'IN FILE');
# 查看许可证信息(防止非法授权)
SELECT * FROM V$LICENSE;
# 计算关键配置文件哈希(基线比对)
sha256sum $DM_HOME/data/DAMENG/dm.ini > /tmp/dm.ini.baseline 2>/dev/null
sha256sum $DM_HOME/data/DAMENG/dm.ctl > /tmp/dm.ctl.baseline 2>/dev/null
七、数据备份与恢复(8.1.4.9)
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 备份策略 | SELECT * FROM V$BACKUPSET; | 定期全量+增量备份 |
| 归档模式 | SELECT ARCH_MODE FROM V$DATABASE; | Y(归档模式开启) |
| 备份保留 | ls -la $DM_HOME/bak/ | 保留≥3个周期,≥6个月 |
| 恢复测试 | CHECK BACKUPSET '/path/to/backup'; | 备份集校验通过 |
达梦备份恢复核查:
# 查看数据库归档模式
SELECT ARCH_MODE FROM V$DATABASE;
SELECT * FROM V$ARCHIVED_LOG ORDER BY RECID DESC FETCH FIRST 10 ROWS ONLY;
# 查看备份集信息
SELECT * FROM V$BACKUPSET ORDER BY BACKUP_TIME DESC;
# 查看备份历史
SELECT * FROM V$BACKUPSET_DBINFO;
# 查看归档日志信息
SELECT * FROM V$ARCH_FILE ORDER BY CREATE_TIME DESC FETCH FIRST 20 ROWS ONLY;
# 检查备份目录
ls -la $DM_HOME/bak/
ls -la $DM_HOME/arch/
# 检查备份脚本
cat /etc/cron.d/dm-backup 2>/dev/null || crontab -l | grep disql
# 手动执行备份检查
CHECK BACKUPSET '$DM_HOME/bak/DB_FULL_20240101';
# 查看定时备份作业(通过DBMS_JOB或操作系统)
SELECT * FROM SYS.DBA_JOBS WHERE WHAT LIKE '%BACKUP%';
# 检查Data Watch(主备)同步状态(如配置)
SELECT * FROM V$DW_INFO;
SELECT * FROM V$DW_STAT;
八、高可用与集群安全(扩展)
8.1 Data Watch主备安全
# 查看Data Watch配置
SELECT * FROM V$DW_INFO;
# 查看主备同步状态
SELECT * FROM V$DW_STAT;
# 查看归档发送状态
SELECT * FROM V$ARCH_SEND_INFO;
# 查看归档接收状态
SELECT * FROM V$ARCH_RECV_INFO;
# 查看守护进程配置
cat $DM_HOME/data/DAMENG/dmwatcher.ini 2>/dev/null
# 检查守护进程通信加密
grep 'DW_ENCRYPT' $DM_HOME/data/DAMENG/dmwatcher.ini 2>/dev/null
8.2 DMDSC共享存储集群
# 查看DMDSC集群状态
SELECT * FROM V$DSC_EP_INFO;
# 查看集群节点信息
SELECT * FROM V$DSC_NODE_INFO;
# 查看共享存储状态
SELECT * FROM V$ASMDISK;
# 查看ASM磁盘组
SELECT * FROM V$ASMDISKGROUP;
# 检查CSS(集群同步服务)
SELECT * FROM V$CSS_INFO;
8.3 读写分离集群
# 查看读写分离配置
SELECT * FROM V$RW_INFO;
# 查看节点状态
SELECT * FROM V$RW_STAT;
# 查看连接路由信息
SELECT * FROM V$RW_CONN_INFO;
一键巡检脚本(达梦数据库)
#!/bin/bash
# 达梦数据库 DM8 等保三级一键巡检脚本
# 适用:DM8 2023Q4 / 2024Q1
# 执行用户:dmdba或root
exportDM_HOME=${DM_HOME:-/opt/dmdbms}
exportPATH=$DM_HOME/bin:$PATH
exportLD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH
DB_USER=${DB_USER:-SYSDBA}
DB_PASS=${DB_PASS:-SYSDBA}# 生产环境应使用安全输入
DB_PORT=${DB_PORT:-5236}
DB_NAME=${DB_NAME:-DAMENG}
echo"===== 达梦数据库 DM8 等保巡检报告 ====="
echo"巡检时间: $(date'+%Y-%m-%d %H:%M:%S')"
echo"服务器: $(hostname)"
echo"DM_HOME: $DM_HOME"
echo"数据库: $DB_NAME@localhost:$DB_PORT"
echo""
# 检查disql可用
if!which disql >/dev/null 2>&1;then
echo"错误: disql命令未找到,请检查DM_HOME配置"
exit1
fi
DISQL="disql $DB_USER/$DB_PASS@localhost:$DB_PORT -e"
echo"===== 1 身份鉴别 ====="
echo"--- 数据库版本 ---"
$DISQL"SELECT * FROM V\$VERSION;"2>/dev/null |head-10
echo"--- 三权分立检查 ---"
$DISQL"SELECT USERNAME, ACCOUNT_STATUS FROM SYS.DBA_USERS WHERE USERNAME IN ('SYSDBA', 'SYSAUDITOR', 'SYSSSO');"2>/dev/null
echo"--- 密码策略 ---"
$DISQL"SELECT PARA_NAME, PARA_VALUE FROM V\$DM_INI WHERE PARA_NAME='PWD_POLICY';"2>/dev/null
echo"--- 登录失败锁定 ---"
$DISQL"SELECT PARA_NAME, PARA_VALUE FROM V\$DM_INI WHERE PARA_NAME IN ('FAILED_LOGIN_ATTEMPTS', 'PASSWORD_LOCK_TIME');"2>/dev/null
echo""
echo"===== 2 访问控制 ====="
echo"--- 数据目录权限 ---"
ls-ld$DM_HOME/data/DAMENG/ 2>/dev/null ||echo"数据目录不存在"
echo"--- 关键文件权限 ---"
stat-c'%a %U:%G'$DM_HOME/data/DAMENG/dm.ini 2>/dev/null ||echo"dm.ini不存在"
stat-c'%a %U:%G'$DM_HOME/data/DAMENG/dm.ctl 2>/dev/null ||echo"dm.ctl不存在"
echo"--- 三权分立权限分离 ---"
$DISQL"SELECT GRANTEE, GRANTED_ROLE FROM SYS.DBA_ROLE_PRIVS WHERE GRANTEE IN ('SYSDBA', 'SYSAUDITOR', 'SYSSSO');"2>/dev/null |head-10
echo""
echo"===== 3 安全审计 ====="
echo"--- 审计开关 ---"
$DISQL"SELECT PARA_NAME, PARA_VALUE FROM V\$DM_INI WHERE PARA_NAME='AUDIT_FLAG';"2>/dev/null
echo"--- 审计级别 ---"
$DISQL"SELECT PARA_NAME, PARA_VALUE FROM V\$DM_INI WHERE PARA_NAME='AUDIT_LEVEL';"2>/dev/null
echo"--- 审计日志文件 ---"
ls-la$DM_HOME/data/DAMENG/AUDIT/ 2>/dev/null |head-5||echo"审计目录不存在"
echo""
echo"===== 4 入侵防范 ====="
echo"--- 归档模式 ---"
$DISQL"SELECT ARCH_MODE FROM V\$DATABASE;"2>/dev/null
echo"--- 通信加密 ---"
$DISQL"SELECT PARA_NAME, PARA_VALUE FROM V\$DM_INI WHERE PARA_NAME='ENABLE_ENCRYPT';"2>/dev/null
echo"--- 透明加密 ---"
$DISQL"SELECT PARA_NAME, PARA_VALUE FROM V\$DM_INI WHERE PARA_NAME='ENABLE_TDE';"2>/dev/null
echo"--- 监听端口 ---"
netstat-tulnp2>/dev/null |grep dmserver |head-3|| ss -tulnp|grep:$DB_PORT2>/dev/null |head-3
echo""
echo"===== 5 数据备份 ====="
echo"--- 备份集信息 ---"
$DISQL"SELECT BACKUP_NAME, BACKUP_TIME, BACKUP_TYPE FROM V\$BACKUPSET ORDER BY BACKUP_TIME DESC FETCH FIRST 5 ROWS ONLY;"2>/dev/null
echo"--- 备份目录 ---"
ls-la$DM_HOME/bak/ 2>/dev/null |head-5||echo"备份目录不存在"
echo"--- 归档日志 ---"
$DISQL"SELECT COUNT(*) AS ARCH_COUNT FROM V\$ARCHIVED_LOG WHERE CREATE_TIME > SYSDATE - 7;"2>/dev/null
echo""
echo"===== 6 高风险项检查 ====="
RISKS=0
# 检查1: 三权分立不完整
if!$DISQL"SELECT 1 FROM SYS.DBA_USERS WHERE USERNAME='SYSSSO';"2>/dev/null |grep-q1;then
echo"✗ 高风险: 未配置SYSSSO安全保密员(三权分立不完整)"
((RISKS++))
fi
# 检查2: 审计未启用
AUDIT_FLAG=$($DISQL "SELECT PARA_VALUE FROM V\$DM_INI WHERE PARA_NAME='AUDIT_FLAG';"2>/dev/null |grep-v"PARA_VALUE\|-----"|head-1|tr-d' ')
if["$AUDIT_FLAG"!="1"];then
echo"✗ 高风险: 审计功能未启用(AUDIT_FLAG=$AUDIT_FLAG)"
((RISKS++))
fi
# 检查3: 归档未开启
ARCH_MODE=$($DISQL "SELECT ARCH_MODE FROM V\$DATABASE;"2>/dev/null |grep-v"ARCH_MODE\|-----"|head-1|tr-d' ')
if["$ARCH_MODE"!="Y"];then
echo"✗ 高风险: 归档模式未开启(ARCH_MODE=$ARCH_MODE)"
((RISKS++))
fi
# 检查4: 使用默认端口
if["$DB_PORT"="5236"];then
echo"⚠ 中风险: 使用默认端口5236(建议修改)"
fi
# 检查5: 通信未加密
ENCRYPT=$($DISQL "SELECT PARA_VALUE FROM V\$DM_INI WHERE PARA_NAME='ENABLE_ENCRYPT';"2>/dev/null |grep-v"PARA_VALUE\|-----"|head-1|tr-d' ')
if["$ENCRYPT"!="1"]&&["$ENCRYPT"!="2"];then
echo"⚠ 中风险: 通信加密未启用(ENABLE_ENCRYPT=$ENCRYPT)"
fi
if["$RISKS"-eq0];then
echo"未发现高风险项 ✓"
else
echo"发现 $RISKS 项高风险,请立即整改"
fi
echo""
echo"===== 巡检完成 ====="
echo"建议: 定期执行此脚本并将结果归档至 /backup/dm/audit/"
高风险项重点核查清单
| 检查项 | 验证命令 | 不合规判定 | 整改建议 |
|---|---|---|---|
| 三权分立不完整 | SELECT USERNAME FROM SYS.DBA_USERS WHERE USERNAME='SYSSSO'; | 无SYSSSO用户 | 创建SYSSSO安全保密员,分离SYSDBA权限 |
| 审计功能未启用 | SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='AUDIT_FLAG'; | 返回0 | 设置AUDIT_FLAG=1,配置AUDIT_LEVEL≥2 |
| 归档模式未开启 | SELECT ARCH_MODE FROM V$DATABASE; | 返回N | 开启归档模式,配置归档路径 |
| 默认端口未修改 | SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='PORT_NUM'; | 返回5236 | 修改PORT_NUM为非默认端口 |
| 通信加密未启用 | SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_ENCRYPT'; | 返回0 | 设置ENABLE_ENCRYPT=1或2 |
| 外部调用未禁用 | SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_EXTERNAL_CALL'; | 返回1 | 设置ENABLE_EXTERNAL_CALL=0 |
| 动态SQL未限制 | SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_PL_DSQL'; | 返回1 | 设置ENABLE_PL_DSQL=0 |
| 默认账户未清理 | SELECT USERNAME FROM SYS.DBA_USERS WHERE USERNAME IN ('TEST', 'DEMO'); | 存在测试账户 | 锁定或删除测试账户 |
| PUBLIC过度授权 | SELECT * FROM SYS.DBA_TAB_PRIVS WHERE GRANTEE='PUBLIC'; | 业务表授权给PUBLIC | REVOKE PUBLIC权限 |
| TDE未启用(敏感数据) | SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_TDE'; | 返回0(有敏感数据时) | 启用透明加密,配置加密表空间 |
达梦数据库版本差异对照
| 功能项 | DM7 | DM8 2022 | DM8 2023Q4+ |
|---|---|---|---|
| 三权分立 | 基础 | 完善 | 强制(等保四级) |
| 透明加密(TDE) | 表空间级 | 表空间+列级 | 列级增强+国密SM4 |
| 审计功能 | 基础审计 | 语句级审计 | 对象级审计+实时分析 |
| 通信加密 | SSL | SSL+国密 | 国密SM2/SM3/SM4全栈 |
| 等保合规 | 需大量配置 | 基础合规 | 等保四级预置 |
| 信创名录 | 首批 | 完善 | 全栈信创 |
| 集群高可用 | Data Watch | DMDSC+Data Watch | 读写分离+自动切换 |
测评执行要点
1. 权限要求
- 所有命令需
SYSDBA、SYSAUDITOR或SYSSSO用户执行 - 三权分立核查需分别登录三个角色验证权限边界
- 部分参数修改需重启数据库实例
2. 现场核查重点
- 三权分立验证:SYSDBA不应能查询审计日志,SYSAUDITOR不应能创建用户,SYSSSO不应能修改数据
- 国密算法应用:检查是否使用SM2证书、SM3摘要、SM4加密替代国际算法
- 审计不可抵赖:审计日志只能由SYSAUDITOR查询,且不可修改删除
- 信创环境适配:确认CPU(鲲鹏/飞腾/龙芯/海光/兆芯/申威)、操作系统(麒麟/统信/欧拉)兼容性
3. 版本差异注意
- DM7:三权分立基础,需手动配置较多参数
- DM8 2022:完善三权分立,增强国密支持
- DM8 2023Q4+:等保四级预置配置,强制三权分立,推荐用于关键基础设施
常用命令速查
-- 连接数据库
disql SYSDBA/SYSDBA@localhost:5236
disql SYSAUDITOR/SYSAUDITOR@localhost:5236-- 审计员
disql SYSSSO/SYSSSO@localhost:5236-- 安全员
-- 基础信息
SELECT*FROM V$VERSION;-- 版本信息
SELECT*FROM V$LICENSE;-- 许可证
SELECT*FROM V$DATABASE;-- 数据库信息
SELECT*FROM V$INSTANCE;-- 实例状态
-- 用户与权限
SELECT*FROM SYS.DBA_USERS;-- 所有用户
SELECT*FROM SYS.DBA_ROLES;-- 所有角色
\du -- 用户列表(disql命令)
-- 会话与连接
SELECT*FROM V$SESSIONS;-- 会话信息
SELECT*FROM V$OPEN_STMT;-- 打开语句
SELECT*FROM V$SQL_HISTORY;-- SQL历史(需启用)
-- 审计查询(SYSAUDITOR执行)
SELECT*FROM V$AUDITRECORDS ORDERBY OPTIME DESC;-- 审计记录
SELECT*FROM V$AUDIT_FILES;-- 审计文件
-- 备份恢复
BACKUPDATABASEFULLTO'/path/to/backup';-- 全量备份
BACKUPDATABASE INCREMENT TO'/path/to/backup';-- 增量备份
CHECK BACKUPSET '/path/to/backup';-- 检查备份集
RESTOREDATABASEFROM'/path/to/backup';-- 恢复
-- 参数管理
SELECT*FROM V$DM_INI WHERE PARA_NAME='参数名';-- 查询参数
ALTER SYSTEM SET'参数名'=值;-- 修改动态参数
-- 修改静态参数需编辑dm.ini后重启
-- 集群管理(Data Watch)
SELECT*FROM V$DW_INFO;-- Data Watch信息
SELECT*FROM V$DW_STAT;-- 同步状态
ALTERDATABASE MOUNT;-- 切换主备
参考标准:GB/T 22239-2019、GB/T 28448-2019、GM/T 0054-2018《信息系统密码应用基本要求》、达梦数据库安全管理员指南、达梦数据库DM8手册
适用版本:达梦数据库 DM8 2023Q4 / 2024Q1
验证环境:Standalone / Data Watch / DMDSC / 读写分离集群 / 信创环境(鲲鹏/飞腾/龙芯/海光/兆芯/申威 + 麒麟/统信/欧拉)
声明:来自汪汪虚拟空间,仅代表创作者观点。链接:https://eyangzhen.com/6726.html