等保测评命令——达梦数据库 DM


各位大佬,想看那种网络设备/操作系统/数据库/中间件的测评命令清单,可在留言区留言,我会以最快速度给你们总结,然后发出来!

根据 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';业务表授权给PUBLICREVOKE PUBLIC权限
TDE未启用(敏感数据)SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='ENABLE_TDE';返回0(有敏感数据时)启用透明加密,配置加密表空间

达梦数据库版本差异对照

功能项DM7DM8 2022DM8 2023Q4+
三权分立基础完善强制(等保四级)
透明加密(TDE)表空间级表空间+列级列级增强+国密SM4
审计功能基础审计语句级审计对象级审计+实时分析
通信加密SSLSSL+国密国密SM2/SM3/SM4全栈
等保合规需大量配置基础合规等保四级预置
信创名录首批完善全栈信创
集群高可用Data WatchDMDSC+Data Watch读写分离+自动切换

测评执行要点

1. 权限要求

  • 所有命令需 SYSDBASYSAUDITOR 或 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

汪汪虚拟空间的头像汪汪虚拟空间

相关推荐

添加微信
添加微信
Ai学习群
返回顶部