数据库

针对安全计算环境中三级条款关联数据库时需要核查的配置参数。

Oracle 19c


Oracle 19c

身份鉴别

测评项:a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;

测评点:用户名唯一性、弱口令、空口令、口令强度策略、口令过期策略;

核查命令:

SELECT
  s.sid,            -- 会话 ID(用于跟踪或终止)
  s.serial#,        -- 会话序列号(用于配合 SID 唯一标识)
  s.username,       -- 数据库用户名
  s.osuser,         -- 客户端操作系统用户
  s.machine,        -- 客户端主机名或 IP(某些场景)
  s.program,        -- 客户端使用的程序(如 SQL Developer、JDBC 驱动)
  s.module,         -- 应用程序模块名(可通过 DBMS_APPLICATION_INFO 设置)
  s.status,         -- 当前会话状态(ACTIVE 或 INACTIVE)
  s.logon_time,     -- 登录时间
  s.service_name,   -- 使用的服务名(如 ORCLPDB1)
  s.type            -- 会话类型(通常为 USER,后台为 BACKGROUND)
FROM v$session s
WHERE s.username IS NOT NULL;

核查效果:

Snipaste_2025-06-06_11-39-12.png

测评项:b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;

测评点:登录失败锁定、登录超时退出;

核查注意:Oracle Database 支持用户定义 profile ,profile 为空时则引入 DEFAULT

核查命令:

SELECT username, profile FROM dba_users WHERE username = 'sys';

核查效果:

Snipaste_2025-07-03_15-09-54.png

核查命令:

SELECT profile, resource_name, limit
FROM dba_profiles
WHERE resource_name IN ('FAILED_LOGIN_ATTEMPTS', 'PASSWORD_LOCK_TIME')
ORDER BY profile, resource_name;

核查效果:

Snipaste_2025-07-03_15-09-34.png

测评项:c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;

测评点:是否开启TLS传输

核查注意:Oracle支持1521(未通过TLS传输)端口和2484(通过TLSv1.2传输)同时开启

核查命令:

SELECT SYS_CONTEXT('USERENV', 'NETWORK_PROTOCOL') AS protocol FROM DUAL;
SELECT
    s.sid,
    s.username,
    s.osuser,
    s.program,
    c.network_service_banner
FROM
    v$session s
JOIN
    v$session_connect_info c ON s.sid = c.sid
WHERE
    s.type = 'USER'
    AND s.username IS NOT NULL;

核查效果:

Snipaste_2025-07-03_16-04-09.png

Oracle Advanced Security: AES256 encryption
Oracle Advanced Security: SHA512 crypto-checksumming
TCP/IP NT Protocol Adapter for Linux: Version 19.0.0.0.0

测评项:d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。

从 Oracle 19c 和 23ai 开始,数据库支持对本地用户启用多因素组合认证,需至少为2025年7月后的DBRU版本。一般默认不符合。

Oracle 19c

访问控制

a)应对登录的用户分配账户和权限;

核查注意:如果本地形式部署,syssysdba是默认账户,无法禁用,此项默认部分符合;如果部署于云平台,不存在默认账户,此项默认符合

b)应重命名或删除默认账户,修改默认账户的默认口令;

核查注意:须通过访谈确定syssysdba是否确定修改口令;

c)应及时删除或停用多余的、过期的账户,避免共享账户的存在;

核查点:多余账户、共享账户;

核查注意:离职员工、停止功能维护的账户须通过访谈确定;Oracle自身存在大量因功能而设但尚未开启而禁用的账户(如SYSBACKUP等)。

d)应授予管理用户所需的最小权限,实现管理用户的权限分离;

核查点:全局管理账户;

核查注意:如果本地形式部署,syssysdba是最高权限账户,无法禁用,此项默认不符合;如果部署于云平台,须核查高权限账户是否开启,未开启则默认符合

核查命令:(以DBA权限运行)

SELECT username, user_id, created, account_status
FROM dba_users
ORDER BY username;

核查命令:(以普通权限运行)

SELECT username, user_id, created
FROM all_users
ORDER BY username;
SELECT * FROM user_users;

核查命令:(在CDB环境以云平台管理员角色运行)

SELECT username, con_id, account_status
FROM cdb_users
WHERE con_id != 0  -- 通常排除系统容器本身(SYSAUX, SYSTEM 等用户通常在 CON_ID=0 或 1 的容器里,具体查询需确认)
ORDER BY con_id, username;

核查效果:

Snipaste_2025-07-04_14-18-59.pngSnipaste_2025-07-04_14-20-07.png

e)应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则;

核查注意:通常由syssysdba、云平台高权限账户、云控制台数据库管理员账户确定主客体访问规则,本处默认符合,写法固定。

f)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级;

核查注意:本处默认符合,写法固定。

g)应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问。

核查注意:本处默认不符合,写法固定。

Oracle 19c

安全审计

Oracle 19c

入侵防范

MySQL

MySQL

身份鉴别

测评项:a) 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。

MySQL通常不存在空口令账户,弱口令须通过访谈确定。

# MySQL 5.7及更低版本本命令行不适用。
select * from mysql.user where length(authentication_string) = 0 or authentication_string is null;

image.png

MySQL通常未预装validate_password,须先核查是否安装插件后再核查相关参数。

云服务客户租用数据库时通过云控制台查看,不适用本条命令。

# 核查插件形式的validate_password,从MySQL 5.7开始支持
select * from information_schema.plugins where plugin_name = 'validate_password';
# 核查模块形式的validate_password,从MySQL 8.0.2开始支持
select * from mysql.component;
# 核查MySQL当前口令策略,默认策略符合要求。
show variables LIKE 'validate_password%';

核查效果:(以插件形式安装validate_password,从MySQL 5.7开始支持)

Snipaste_2025-07-29_16-43-04.png

核查效果:(以模块形式安装validate_password,从MySQL 8.0.2开始支持)

Snipaste_2025-07-30_14-21-58.png

MySQL账户通常无法重复,账户名具有唯一性;MySQL支持单个用户名配置口令过期策略,仅在缺省时由全局配置确定。云服务客户租用数据库时通过云控制台查看,不适用本条命令。

# 查看MySQL全局口令过期策略。
show variables like 'default_password_lifetime';
# 查看MySQL 5.7最近口令更换情况。
select user, host, password_last_changed, password_lifetime from mysql.user;
# 查看MySQL 8.0最近口令更换情况。(支持限制使用重复密码)
select user, host, password_last_changed, password_lifetime,password_expired,password_reuse_history,password_reuse_time from mysql.user;

Snipaste_2025-07-29_18-06-20.png

核查效果:(在MySQL 5.7)

Snipaste_2025-07-30_16-21-52.png

核查效果:(在MySQL 8.0)

Snipaste_2025-07-30_16-22-24.png


测评项:b) 应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施。

MySQL低版本不支持登录失败锁定策略,从MySQL 8.0开始支持单用户设置失败锁定策略,从MySQL 8.1开始支持锁定时长限制至小时或分钟。

select host,user,User_attributes from mysql.user;
# 核查 interactive_timeout参数
show variables like '%timeout';

Snipaste_2025-07-30_17-44-55.pngSnipaste_2025-08-01_09-35-21.png


测评项:c) 当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听。

云服务客户租用数据库时仅核查当前会话,其他信息通过云控制台查看。

# 查看指定用户名(如root)是否强制使用TLS传输
select user, host, ssl_type from mysql.user where user = 'root';
# 查看是否全局开启强制TLS传输
show variables like 'require_secure_transport';
# 查看MySQL是否已开启TLS传输
show variables like 'have_ssl';
# 查看MySQL当前TLS相关配置信息
show global variables like 'ssl_cipher';
show global variables like 'ssl_ca';
show global variables like 'ssl_cert';
show global variables like 'ssl_key';
# (重点)查看当前会话是否采用TLS传输
show session status like 'ssl_cipher';
show session status LIKE 'Ssl_cipher_list';
show session status like 'ssl_version';
# 查看MySQL当前支持的TLS版本
show variables like 'tls_version';

Snipaste_2025-07-30_16-44-23.png

Snipaste_2025-07-30_16-44-57.png


测评项:d) 应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别, 且其中一种鉴别技术至少应使用密码技术来实现。

从MySQL 8.0.27起,企业版支持FIDO,社区版支持TOTP,可在完成用户名+口令后支持二次验证。基于实际生产环境,默认不支持。

MySQL

访问控制

测评项:a) 应对登录的用户分配账户和权限;
测评项:b) 应重命名或删除默认账户,修改默认账户的默认口令;

云数据库不存在默认账户,安装在本地服务器上则注意root账户是否已修改口令。

测评项:c) 应及时删除或停用多余的、过期的账户,避免共享账户的存在;

多余/共享账户依据客户实际业务判定,但账户数小于3则强制判定共享账户。

通过访谈确定账户是否闲置;闲置账户处于锁定状态可视为不存在过期账户。

select Host,Account_locked,User,Insert_priv,Delete_priv,Alter_priv,Drop_priv,Grant_priv,Super_priv from mysql.user;

核查效果:

Snipaste_2025-08-01_11-11-35.png


测评项:d) 应授予管理用户所需的最小权限,实现管理用户的权限分离。

MySQL账户除日常使用的增删查改权限较为敏感外,针对等保场景须注意Grant_privSuper_priv。前者可以扩展用户/数据库/数据库表的权限,后者可以管理所有的用户/数据库/数据库表。

select Host,Db,User,Insert_priv,Delete_priv,Alter_priv,Drop_priv,Grant_priv from mysql.db;

Snipaste_2025-08-01_11-12-41.png


测评项:e)应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则;

现场核查优先核查当前用户名所关联的权限,后续查看mysql.role_edges表和infomation_schema.user_privileges表所包含的具体内容。当role_edges表值为时,缺省值为root

-- show grants for '用户名'@'数据库';
SELECT * FROM `role_edges`;
SELECT * FROM `USER_PRIVILEGES`;

Snipaste_2025-08-01_14-48-05.pngSnipaste_2025-08-01_14-48-26.png


测评项:f)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级;

数据库与用户间是一对多的关系,因此默认符合。


测评项:g)应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问。

MySQL不支持等保场景的安全标记功能,须依赖第三方实现,因此默认不符合。

MySQL

安全审计

测评项:a) 应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计。

核查点:日志要素

MySQL不对特定用户执行日志收集策略,默认覆盖所有用户。仅关注MySQL是否收集登录失败(log_error)/ SQL语句执行(log_bin)日志。

非必要不推荐开启 general_log ,开启后MySQL会记录全量日志,极易影响系统的稳定运行。

核查命令

show variables like 'log%';

核查效果

测评项:b) 审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息。

测评方法

1)执行“mysql>show variables like ‘log_%’”命令,查看输出的日志内容是否覆盖所有用户,并核查审计记录覆盖的内容。

2)核查是否已使用第三方审计工具增强MySQL的日志审计功能。如果使用了第三方审计工具,则查看其审计内容是否包含事件的日期和事件、用户、事件类型、事件是否成功及其他与审计相关的信息。

操作步骤&预期结果

1)数据库本地启用了日志审计功能,审计内容覆盖每个用户,能够记录重要的用户行为和重要安全事件。

 show variables like 'log_%';

 

 show global variables like '%general%';

表格

AI 生成的内容可能不正确。

2)使用了第三方数据库审计产品,审计内容覆盖每个用户,能够记录重要的用户行为和重要安全事件。

测评项:c) 应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等。

测评方法

1)访谈管理员,了解审计记录的保护方式。核查审计记录是否定期备份,了解备份策略。

2)核查是否已严格限制用户访问审计记录的权限。

操作步骤&预期结果

1)采用备份、转存等手段对审计记录进行保护,避免未预期的删除、修改或覆盖,数据库本地日志保存时间超过6个月。

图片包含 表格

AI 生成的内容可能不正确。

 exprie_logs_days为日志存储时间(已经通过“set global expire_logs_days = 180;”命令设置保存时间)

2)采用第三方数据库审计产品审计记录保存时间超过6个月。

测评项:d) 应对审计进程进行保护,防止未经授权的中断。

测评方法

1)核查是否已严格限制管理员、审计员的权限。

2)尝试以用户身份重启实例、关闭审计功能,查看是否能成功(应为否)。

操作步骤&预期结果

1)非审计员账户无法中断审计进程,审计进程已受到保护。

2)非审计员账户无法对审计进程纪念性开启、关闭操作。对这类操作有日志记录。

 

MySQL

入侵防范

测评项:a) 应遵循最小安装的原则,仅安装需要的组件和应用程序

测评点:多余插件

核查命令:

show plugins;

 

预期结果:

 image.png

测评项:b) 应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制。

测评方法

(1)执行show grants for root@localhost”命令,查看用户登录的IP地址,核查是否给所有用户加上了IP地址限制以拒绝所有未知主机的连接。

注意:当user表中的Host值不在本地主机IP地址范围内时,应为其指定IP地址,使其不为“%”,或者将user表中的Host值置为空。在host表中指定允许用户账户登录访问的若干主机。在非信任的客户端以数据库账户登录的行为应被拒绝。用户从其他子网登录的行为也应被拒绝。

操作步骤&预期结果

(1)已在防火墙上限制特定的终端(IP地址)连接(访问)数据库。

image.png

 测评项:c) 能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞。

测评方法

(1)了解MySQL数据库的补丁升级机制,查看补丁安装情况。执行“show variables where variable_name like version”命令查看当前补丁版本。

(2)核查数据库的版本是否为企业版,是否定期进行漏洞扫描,是否针对高风险漏洞安装了经过评估和测试的补丁。

操作步骤&预期结果

(1)MySQL数据库目前并不存在高风险漏洞,补丁更新及时。

image.png

(2)MySQL数据库为企业版,定期进行漏洞扫描。对发现的数据库漏洞,已在测试和评估后进行修补。

MySQL

可信验证

测评项:a)可基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心

MySQL无法实现可信验证。


MySQL

数据完整性/保密性

测评项:a)应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等
测评项:a)应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等

该项核查与身份鉴别c强相关,即仅允许使用TLS证书进行传输时为符合。

# 查看指定用户名(如root)是否强制使用TLS传输
select user, host, ssl_type from mysql.user where user = 'root';
# 查看是否全局开启强制TLS传输
show variables like 'require_secure_transport';
# 查看MySQL是否已开启TLS传输
show variables like 'have_ssl';
# 查看MySQL当前TLS相关配置信息
show global variables like 'ssl_cipher';
show global variables like 'ssl_ca';
show global variables like 'ssl_cert';
show global variables like 'ssl_key';
# (重点)查看当前会话是否采用TLS传输
show session status like 'ssl_cipher';
show session status LIKE 'Ssl_cipher_list';
show session status like 'ssl_version';
# 查看MySQL当前支持的TLS版本
show variables like 'tls_version';


测评项:b)应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等
测评项:b)应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等

MySQL 5.6 、MySQL 5.7和 MySQL 8.0.0 ~8.0.33 ,MySQL默认采用 mysql_native_password 插件。该插件依赖存在安全风险的SHA1算法。

MySQL 5.6 ~ MySQL 8.0.3 支持的sha256_password 或 MySQL 8.0.4 开始支持的caching_sha2_password 引入RSA公私钥对鉴别数据进行加密,两者均使用SHA256校验算法进行保存,区别在于后者加入缓存机制允许高并发操作。

The SHA-2 family consists of six hash functions with digests (hash values) that are 224, 256, 384 or 512 bits: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256.

原文详见:https://security.stackexchange.com/questions/87154/what-is-the-relationship-between-sha-2-and-sha-256

翻译:SHA2家族包括SHA224、SHA256、SHA384、SHA512所有算法。  

-- 查看当前用户@地址口令段加密后的信息和所采用的算法
select user, host, plugin, authentication_string from mysql.user;
-- 查看私钥路径(caching_sha2_password)
show variables like 'caching_sha2_password_private_key_path';
-- 查看公钥路径(caching_sha2_password)
show variables like 'caching_sha2_password_public_key_path';
-- 查看当前通信使用的公钥
show status like 'caching_sha2_password_rsa_public_key';
-- 查看公钥路径(sha256_password)
SHOW VARIABLES LIKE 'sha256_password_public_key_path';
-- 查看私钥路径(sha256_password)
SHOW VARIABLES LIKE 'sha256_password_private_key_path';
-- 查看当前通信使用的公钥
show status like 'rsa_public_key';

MySQL

数据备份恢复

MySQL

剩余信息保护

MySQL

核查与访谈(mysql)

MySQL 5.6 ~ MySQL 8.4 可核查的命令:
-- 核查插件形式的validate_password,从MySQL 5.7开始支持
select * from information_schema.plugins where plugin_name = 'validate_password';
-- 核查MySQL当前口令策略,默认策略符合要求。
show variables LIKE 'validate_password%';
-- 查看MySQL全局口令过期策略。
show variables like 'default_password_lifetime';
-- 查看MySQL 5.7最近口令更换情况。
select user, host, password_last_changed, password_lifetime from mysql.user;
-- 核查 interactive_timeout参数
show variables like '%timeout';
-- 查看指定用户名(如root)是否强制使用TLS传输
select user, host, ssl_type from mysql.user where user = 'root';
-- 查看是否全局开启强制TLS传输
show variables like 'require_secure_transport';
-- 查看MySQL是否已开启TLS传输
show variables like 'have_ssl';
-- 查看MySQL当前TLS相关配置信息
show global variables like 'ssl_cipher';
-- 查看当前会话是否采用TLS传输
show session status like 'ssl_cipher';
show session status LIKE 'Ssl_cipher_list';
show session status like 'ssl_version';
-- 查看MySQL当前支持的TLS版本
show variables like 'tls_version';
-- 查看用户授权情况
select Host,Account_locked,User,Insert_priv,Delete_priv,Alter_priv,Drop_priv,Grant_priv,Super_priv from mysql.user;
-- 查看用户与数据库间授权关联
SELECT * FROM `role_edges`;
SELECT * FROM `USER_PRIVILEGES`;
-- 查看日志开启情况
show variables like 'log%';
-- 查看当前已安装的插件
-- 查看当前用户@地址口令段加密后的信息和所采用的算法
select user, host, plugin, authentication_string from mysql.user;
-- 查看公钥路径(sha256_password)
SHOW VARIABLES LIKE 'sha256_password_public_key_path';
-- 查看私钥路径(sha256_password)
SHOW VARIABLES LIKE 'sha256_password_private_key_path';
-- 查看当前通信使用的公钥
show status like 'rsa_public_key';
MySQL 8.0 ~MySQL 8.4的命令:
-- MySQL 5.7及更低版本本命令行不适用。
select * from mysql.user where length(authentication_string) = 0 or authentication_string is null;
-- 核查模块形式的validate_password,从MySQL 8.0.2开始支持
select * from mysql.component;
-- 查看MySQL 8.0最近口令更换情况。(支持限制使用重复密码)
select user, host, password_last_changed, password_lifetime,password_expired,password_reuse_history,password_reuse_time from mysql.user;
-- 核查 MySQL 8.0登录失败锁定情况
select host,user,User_attributes from mysql.user;
-- 查看私钥路径(caching_sha2_password)
show variables like 'caching_sha2_password_private_key_path';
-- 查看公钥路径(caching_sha2_password)
show variables like 'caching_sha2_password_public_key_path';
-- 查看当前通信使用的公钥
show status like 'caching_sha2_password_rsa_public_key';
MySQL 9.0 ~MySQL 9.5的命令:
-- ========== 1. 密码验证策略检查 ==========
-- 1.1 核查密码验证组件(MySQL 8.0+ 从插件改为组件)
-- 注意:MySQL 8.0+ 使用 component_validate_password 组件替代旧的插件
SELECT * FROM mysql.component 
WHERE component_urn = 'file://component_validate_password';
-- 如果组件未安装,可使用以下命令安装:
-- INSTALL COMPONENT 'file://component_validate_password';

-- 1.2 核查MySQL当前口令策略(MySQL 8.0+ 变量名改为带点号格式)
SHOW VARIABLES LIKE 'validate_password.%';
-- 常见密码策略变量说明:
-- validate_password.length                 - 密码最小长度(默认8)
-- validate_password.policy                 - 策略等级(LOW/MEDIUM/STRONG)
-- validate_password.mixed_case_count       - 大小写字母最小数量
-- validate_password.number_count           - 数字最小数量
-- validate_password.special_char_count     - 特殊字符最小数量
-- validate_password.dictionary_file        - 字典文件路径

-- 1.3 查看MySQL全局口令过期策略
SHOW VARIABLES LIKE 'default_password_lifetime';
-- 说明:单位为天,0表示永不过期,建议设置为90天

-- 1.4 查看所有用户的密码更换情况和过期策略
SELECT user, host, 
       password_last_changed AS '最后修改时间',
       password_lifetime AS '密码有效期(天)',
       CASE 
           WHEN password_lifetime IS NULL THEN '使用全局策略'
           WHEN password_lifetime = 0 THEN '永不过期'
           ELSE CONCAT(password_lifetime, '天')
       END AS '过期策略说明'
FROM mysql.user
ORDER BY user, host;

-- ========== 2. 连接超时与会话检查 ==========
-- 2.1 核查所有超时相关参数
SHOW VARIABLES LIKE '%timeout';
-- 重点关注:
-- interactive_timeout    - 交互式连接超时(默认28800秒/8小时)
-- wait_timeout          - 非交互式连接超时
-- connect_timeout       - 连接握手超时

-- ========== 3. TLS/SSL 加密传输检查 ==========
-- 3.1 查看指定用户(如root)是否强制使用TLS传输
SELECT user, host, ssl_type,
       CASE ssl_type
           WHEN '' THEN '不要求TLS'
           WHEN 'ANY' THEN '要求TLS(任意加密)'
           WHEN 'X509' THEN '要求X509证书'
           WHEN 'SPECIFIED' THEN '要求指定证书'
       END AS 'TLS要求说明'
FROM mysql.user 
WHERE user = 'root';

-- 3.2 查看所有用户的TLS配置
SELECT user, host, ssl_type
FROM mysql.user
WHERE ssl_type != ''
ORDER BY user, host;

-- 3.3 查看是否全局开启强制TLS传输
SHOW VARIABLES LIKE 'require_secure_transport';
-- 说明:ON表示所有连接必须使用TLS,OFF表示可选

-- 3.4 查看MySQL是否已开启TLS传输能力
SHOW VARIABLES LIKE 'have_ssl';
-- 说明:YES表示已启用,DISABLED表示未启用

-- 3.5 查看MySQL当前TLS相关配置信息
SHOW GLOBAL VARIABLES LIKE 'ssl_%';
-- 重点关注:
-- ssl_ca        - CA证书路径
-- ssl_cert      - 服务器证书路径
-- ssl_key       - 服务器私钥路径
-- ssl_cipher    - 允许的加密套件

-- 3.6 查看当前会话是否采用TLS传输
SHOW SESSION STATUS LIKE 'ssl_cipher';
SHOW SESSION STATUS LIKE 'Ssl_cipher_list';
SHOW SESSION STATUS LIKE 'ssl_version';
-- 说明:如果ssl_cipher为空,表示当前会话未使用TLS

-- 3.7 查看MySQL当前支持的TLS版本
SHOW VARIABLES LIKE 'tls_version';
-- 建议:至少支持 TLSv1.2, TLSv1.3,禁用TLSv1和TLSv1.1

-- ========== 4. 用户权限与授权检查 ==========
-- 4.1 查看所有用户的基本权限(MySQL 9.0 兼容写法)
SELECT Host, User, Account_locked AS '账户锁定',
       Insert_priv AS '插入', 
       Delete_priv AS '删除', 
       Alter_priv AS '修改', 
       Drop_priv AS '删除表', 
       Grant_priv AS '授权', 
       Super_priv AS '超级权限',
       Create_role_priv AS '创建角色',
       Drop_role_priv AS '删除角色'
FROM mysql.user
ORDER BY User, Host;
-- 注意:Super_priv 在 MySQL 8.0+ 逐步被动态权限替代

-- 4.2 查看用户与角色的关联关系
SELECT FROM_HOST AS '来源主机', 
       FROM_USER AS '来源用户', 
       TO_HOST AS '目标主机', 
       TO_USER AS '目标用户',
       WITH_ADMIN_OPTION AS '可再授权'
FROM mysql.role_edges
ORDER BY FROM_USER, TO_USER;

-- 4.3 查看所有用户的全局权限
SELECT GRANTEE AS '授权对象', 
       PRIVILEGE_TYPE AS '权限类型', 
       IS_GRANTABLE AS '可授权'
FROM information_schema.USER_PRIVILEGES
ORDER BY GRANTEE, PRIVILEGE_TYPE;

-- 4.4 查看数据库级别的权限
SELECT Host, User, Db AS '数据库',
       Select_priv, Insert_priv, Update_priv, Delete_priv,
       Create_priv, Drop_priv, Grant_priv
FROM mysql.db
ORDER BY Db, User;


-- ========== 5. 日志审计检查 ==========

-- 5.1 查看所有日志相关配置
SHOW VARIABLES LIKE 'log%';
-- 重点关注:
-- log_error              - 错误日志路径
-- general_log            - 通用查询日志(性能影响大,生产环境慎用)
-- slow_query_log         - 慢查询日志
-- log_bin                - 二进制日志(主从复制必需)
-- log_bin_trust_function_creators - 二进制日志函数创建权限

-- 5.2 查看审计日志插件状态(如果安装了审计插件)
SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE, PLUGIN_LIBRARY
FROM information_schema.PLUGINS
WHERE PLUGIN_NAME LIKE '%audit%';

-- ========== 6. 用户认证与加密检查 ==========
-- 6.1 查看所有用户的认证插件和加密信息
SELECT user, host, 
       plugin AS '认证插件',
       CASE plugin
           WHEN 'mysql_native_password' THEN 'MySQL 5.7 原生认证'
           WHEN 'caching_sha2_password' THEN 'MySQL 8.0+ 缓存SHA2认证(推荐)'
           WHEN 'sha256_password' THEN 'SHA256认证'
           WHEN 'auth_socket' THEN 'Socket认证(仅本地)'
           ELSE plugin
       END AS '认证方式说明',
       CHAR_LENGTH(authentication_string) AS '密文长度'
FROM mysql.user
ORDER BY user, host;
-- 建议:MySQL 9.0 推荐使用 caching_sha2_password

-- 6.2 查看 sha256_password 公钥路径
SHOW VARIABLES LIKE 'sha256_password_public_key_path';

-- 6.3 查看 sha256_password 私钥路径
SHOW VARIABLES LIKE 'sha256_password_private_key_path';

-- 6.4 查看当前通信使用的RSA公钥
SHOW STATUS LIKE 'rsa_public_key';


-- ========== 7. 组件与插件检查(MySQL 8.0+/9.0 推荐) ==========
-- 7.1 查看所有已安装的组件(MySQL 8.0+ 新特性)
SELECT component_id, component_group_id, component_urn
FROM mysql.component
ORDER BY component_id;

-- 7.2 使用 SHOW COMPONENTS 命令(MySQL 8.0.17+)
SELECT component_id AS '组件ID', 
       component_group_id AS '组件组ID', 
       component_urn AS '组件URN'
FROM mysql.component
ORDER BY component_id;

-- 7.3 查看所有已安装的插件
SELECT PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_STATUS, PLUGIN_TYPE, PLUGIN_LIBRARY
FROM information_schema.PLUGINS
WHERE PLUGIN_STATUS = 'ACTIVE'
ORDER BY PLUGIN_TYPE, PLUGIN_NAME;


-- ========== 8. 动态权限检查(MySQL 8.0+/9.0 新特性) ==========
-- 8.1 查看所有动态权限(替代部分Super_priv功能)
SELECT USER AS '用户', HOST AS '主机', PRIV AS '动态权限'
FROM mysql.global_grants
ORDER BY USER, HOST, PRIV;

-- 常见动态权限:
-- ROLE_ADMIN                    - 角色管理
-- BINLOG_ADMIN                  - 二进制日志管理
-- CONNECTION_ADMIN              - 连接管理
-- REPLICATION_SLAVE_ADMIN       - 复制从库管理
-- SYSTEM_VARIABLES_ADMIN        - 系统变量管理
-- BACKUP_ADMIN                  - 备份管理


-- ========== 9. 安全相关系统变量检查 ==========
SHOW VARIABLES WHERE Variable_name IN (
    'local_infile',                    -- 禁止加载本地文件(安全风险)
    'secure_file_priv',               -- 限制文件导入导出路径
    'skip_name_resolve',              -- 跳过DNS解析(提升性能和安全)
    'sql_mode',                       -- SQL模式
    'max_connect_errors',             -- 最大连接错误次数
    'max_connections',                -- 最大连接数
    'max_user_connections'            -- 单用户最大连接数
);


-- ========== 10. 空密码和弱密码用户检查 ==========
-- 10.1 检查空密码用户(严重安全隐患)
SELECT user, host, '!!!空密码账户!!!' AS '安全风险'
FROM mysql.user
WHERE authentication_string = '' OR authentication_string IS NULL;

-- 10.2 检查通配符主机用户(安全风险)
SELECT user, host, '允许任意主机连接' AS '安全风险'
FROM mysql.user
WHERE host = '%'
ORDER BY user;


-- ============================================================
-- 脚本执行完毕
-- ============================================================

SELECT '
============================================================
MySQL 9.0 安全审计检查完成!

建议操作:
1. 确保 caching_sha2_password 组件已安装
2. 所有用户密码长度应 >= 8 位,包含大小写字母、数字和特殊字符
3. 启用密码过期策略(建议90-180天)
4. 生产环境强制启用 TLS/SSL 传输
5. 移除空密码账户和不必要的通配符主机授权
6. 定期审计用户权限,遵循最小权限原则
7. 启用慢查询日志和错误日志
8. 禁用 local_infile,设置 secure_file_priv
9. 使用角色管理权限,避免直接授予过高权限
10. MySQL 9.0 推荐使用动态权限替代 Super_priv
============================================================
' AS '审计建议';

达梦

达梦

身份鉴别

测评项:a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;

1)应核查用户在登录时是否采用了身份鉴别措施;

使用DM管理工具进行登录时提供了四种身份验证方式,四种身份鉴别方式均需要提供登录口令,如图:

image.png

2)应核查用户列表确认用户身份标识是否具有唯一性;

无法创建同名账户,一般默认符合;

SELECT USERNAME FROM DBA_USERS;

image.png

3)应核查用户配置信息或测试验证是否不存在空口令用户;

注意:使用SYSDBA查看用户表发现所有账户password字段均为NULL,通过网上查询似乎是数据库为了安全性隐藏了这些信息。在配置向导中可以配置SYSDBA用户口令为空(但是仅能通过DIsql.exe空口令登录),使用SYSDBA创建其他普通账户时强制要求了口令,其他管理账户默认均有口令,建议手动测试账户是否配置了登录口令。

查看用户以及口令信息:

SELECT USERNAME, PASSWORD FROM DBA_USERS;

image.png

image.png

4)应核查用户鉴别信息是否具有复杂度要求并定期更换。

口令策略:除了在创建用户语句中指定该用户的口令策略,DM 的 INI 参数 PWD_POLICY 可以指定系统的默认口令策略,缺省值为 ≥2。

SELECT * FROM V$PARAMETER WHERE NAME= 'PWD_POLICY';

image.png

PWD_POLICY的数值策略含义(位掩码组合)

数值 策略含义(位掩码组合) 说明
0 无策略(不启用密码策略) 密码无复杂度、有效期等限制
1 密码长度 ≥8 位 仅限制长度
2 密码含大写、小写、数字、标点 至少三类 强制复杂度
4 启用密码有效期(需结合 PWD_MAX_LIFE_TIME 密码到期需修改
8 密码 禁止与用户名相同 防弱密码
16 登录失败锁定(需结合 PWD_LOCK_TIME 防暴力破解
32 密码重用限制(需结合 PWD_HISTORY 禁止重复使用历史密码

使用自带的DM 控制台工具查看(开发版没查出来):

image.png

登录超时:使用自带的DM管理工具,SYSDBA登录后查看用户,点击用户属性,在DLL中查看口令有效期“password_life_time”的值(密码有效期30天)。

注意:修改系统参数需要 SYSDBA 或 PUBLIC 角色的 ALTER SYSTEM 权限。若当前用户权限不足,会提示参数错误

image.png

测评项:b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连 接超时自动退出等相关措施。

1)应核查是否配晋并启用了登录失败处理功能;

SELECT 
    so.NAME AS "达梦数据库用户名",--列名都需要查表,so 是 SYSOBJECTS 表的别名(通过 JOIN SYSOBJECTS so 指定)。
    su.FAILED_NUM AS "失败次数限制",--su 是 SYSUSERS 表的别名(通过 FROM SYSUSERS su 指定)。
    su.FAILED_ATTEMPS AS "失败尝试次数",
    su.LOCK_TIME AS "锁定时间(min)"
FROM SYSUSERS su
JOIN SYSOBJECTS so ON su.ID = so.ID
WHERE so.SUBTYPE$ = 'USER';--这个subtype字段需要查表

参数解释:

PASSWORD_LOCK_TIME:锁定账户的时间,默认值为1,系统预设管理员用户默认无限制。

FAILED_LOGIN_ATTEMPTS:允许的失败登录尝试次数,默认值为3,系统预设管理员用户默认无限制。

image.png

2)应核查是否配置并启用了限制非法登录功能,非法登录达到一定次数后采取特定动作,如账户锁定等;

同上第一小点

3)应核查是否配置并启用了登录连接超时及自动退出功能;

参数解释:

CONNECT_TIME:会话连接的总时长限制,默认无限制。

CONNECT_IDLE_TIME:会话空闲状态的时长限制,默认无限制。

登录超时命令行查询:

SELECT PROFILE, RESOURCE_NAME, LIMIT 
FROM DBA_PROFILES 
WHERE RESOURCE_NAME IN ('CONNECT_TIME', 'CONNECT_IDLE_TIME');

image.png

如果上述命令查询失败,可使用如下两条命令替换:                                                                                                                      ---- 查看连接存活超时(死连接检测)配置
SELECT * FROM V$PARAMETER WHERE NAME = 'SQLNET_EXPIRE_TIME';

-- 查看会话空闲超时(自动退出)配置
SELECT * FROM V$PARAMETER WHERE NAME = 'IDLE_TIME';

测评项:c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;

DM 提供两种通信加密方式:一基于传输层的 SSL 协议加密;二基于应用层的消息包加密。当未采用通信加密时,为了提高安全性,数据库系统自动对登录消息中的用户名密码使用内部算法进行了简单的加解密操作。

详情查阅:https://eco.dameng.com/document/dm/zh-cn/pm/communication-encryption.html

测评项:d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。

通过访谈以及验证,确认是否采用了其他的身份鉴别技术。

达梦

访问控制

测评项:a)应对登录的用户分配账户和权限;

1)应核查是否为分配了账户和权限及相关设置情况;

查看所有用户:

SELECT USERNAME FROM DBA_USERS;

查看系统权限:

SELECT * FROM DBA_SYS_PRIVS ORDER BY GRANTEE;  //所有用户
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'SYSDBA';   //单个用户

查看对象权限:

SELECT * FROM DBA_TAB_PRIVS ORDER BY GRANTEE;   //所有用户
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE='SYSDBA';  //单个用户

image.png

注:

系统权限:指用户在整个数据库系统层面上的权限,允许用户执行特定的系统级操作,如:

CREATE SESSION:允许用户连接到数据库。

CREATE TABLE:允许用户创建表。

ALTER USER:允许用户修改其他用户的属性。

DROP ANY TABLE:允许用户删除任何表。

DBA:数据库管理员权限,几乎所有操作都可以执行。

对象权限:指用户对特定数据库对象(如表、视图、序列等)上的权限,如:

SELECT:允许用户查询(选择)数据。

INSERT:允许用户插入数据。

UPDATE:允许用户更新数据。

DELETE:允许用户删除数据。

EXECUTE:允许用户执行存储过程或函数。

REFERENCES:允许用户创建外键引用。

详情可查阅:https://eco.dameng.com/document/dm/zh-cn/pm/discretionary-access-control.html#3.3

2)应核查是否已禁用或限制匿名、默认账户的访问权限。

DM 数据库默认按照三权分立的机制进行权限划分,另外可以通过 SYSSSO 安全员账户设置安全标记限制SYSDBA的访问权限,添加标记后DBA 就不能直接访问添加有安全标记的数据限制,默认无(非安全版本SYSSSO账户无法登录)。

image.png

测评项:b)应重命名或删除默认账户,修改默认账户的默认口令;

1)应核查是否已经重命名默认账户或默认账户已被删除;

2)应核查是否已修改默认账户的默认口令。

用户名和密码:DM 数据库会预设数据库管理员账号 SYSDBA、数据库安全员账号 SYSSSO 和数据库审计员账号 SYSAUDITOR,其缺省口令都与用户名一致。若为DM 安全版本提供“四权分立”安全机制,新增数据库对象操作员账户 SYSDBO,其缺省口令为 SYSDBO。

测评项:c)应及时删除或停用多余的、过期的账户,避免共享账户的存在;

1)应核查是否不存在多余或过期账户,管理员用户与账户之间是否一一对应;

2)应测试验证多余的、过期的账户是否被删除或停用。

查看所有账户,访谈管理员:

SELECT USERNAME FROM DBA_USERS;
测评项:d)应授予管理用户所需的最小权限,实现管理用户的权限分离;

1)应核查是否进行角色划分;

2)应核查管理用户的权限是否已进行分离;

3)应核查管理用户权限是否为其工作任务所需的最小权限。

DM 数据库会预设数据库管理员账号 SYSDBA、数据库安全员账号 SYSSSO 和数据库审计员账号 SYSAUDITOR。若为DM 安全版本提供“四权分立”安全机制,新增数据库对象操作员账户 SYSDBO。默认已对账户进行了管理账户的权限分离,如:系统管理员无权限管理安全审计相关配置等。

测评项:e)应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则;

1)应核查是否由授权主体(如管理用户)负责配置访问控制策略;

2)应核查授权主体是否依据安全策略配登了主体对客体的访问规则;

3)应测试验证用户是否有可越权访问情形。

访谈管理员是否制定数据库的访问控制策略,并通过专门的管理员账户(授权主体一般为数据库管理员客体为表、库)进行配置访问控制策略。

使用命令查看账号对象权限:

SELECT * FROM DBA_TAB_PRIVS ORDER BY GRANTEE;  //所有用户
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'TEST_USER'; //单个用户
测评项:f)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级;

DM 支持对数据库中的表、视图、索引等对象扩展客体标记,一旦一个对象被应用了扩展客体标记,则用户只有在支配相应标记的情况下,才能访问客体。

测评项:g)应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问。

1)应核查是否对主体、客体设置了安全标记;

2)应测试验证是否依据主体、客体安全标记控制主体对客体访问的强制访问控制策略。

DM数据库支持自主访问控制以及强制访问控制,在强制访问控制中,系统给主体和客体都分配一个特殊的安全标记,主体的安全标记反映了该主体可信的程度,客体的安全标记则与其包含信息的敏感度一致,且主体不能改变他自己及任何其它客体的安全标记,主体是否可以对客体执行特定的操作取决于主体和客体的安全标记之间的支配关系。

强制访问控制功能仅在 DM 安全版中提供,DM 中与强制访问控制相关的数据字典表,只有具有 SSO 类型的用户才能查询。

详情查阅:https://eco.dameng.com/document/dm/zh-cn/pm/mandatory-access-control.html

达梦

安全审计

测评项:a)应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;

1)应核查是否开启了安全审计功能;

DM 具有一个灵活的审计子系统,可以通过它来记录系统级事件、个别用户的行为以及对数据库对象的访问。审计开关由过程 VOID SP_SET_ENABLE_AUDIT(param int);控制,过程执行完后会立即生效,param 有三种取值:

0:关闭审计,缺省值为 0。

1:打开普通审计

2:打开普通审计和实时审计

使用数据库数据库审计员查询审计开关当前的值:

image.png

2)应核查安全审计范围是否覆盖到每个用户;

默认覆盖到数据库上的每一个用户账户。

3)应核查是否对重要的用户行为和重要安全事件进行审计。

审计级别说明如下:
系统级:系统的启动、关闭、部分系统事件以及一些系统过程和函数的调用,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录
语句级:导致影响特定类型数据库对象的特殊 SQL 或语句组的审计。如 AUDIT TABLE 将审计 CREATE TABLE、ALTER TABLE 和 DROP TABLE 等语句
对象级:审计作用在特殊对象上的语句。如 test 表上的 INSERT 语句

开启ENABLE_AUDIT以及针对语句级查询后查看日志记录;

select * from V$AUDITRECORDS;

image.png

另外在配置文件dm.ini中添加参数 AUD_PATH 指定审计文件保存位置后,可在对应log目录下找到日志记录文件。

测评项:b)审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相 关的信息

审计记录内容包括操作者的用户名、所在站点、所进行的操作、操作的对象、操作时间、当前审计条件等。

测评项:c)应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等;

单个审计文件的大小可以通过 DM 的 INI 参数 AUDIT_MAX_FILE_SIZE 指定。当单个审计文件超过指定大小时,系统会自动切换审计文件,自动创建新的审计文件,审计记录将写入新的审计文件中。AUDIT_MAX_FILE_SIZE 为动态系统级参数,有效值范围为 1~4096M,缺省值为 100M。

极限情况下,审计记录可能会因为磁盘空间不足而无法写入审计文件,最终导致系统无法正常运行。对这种情况的处理有两种策略,通过设置 DM 的 INI 参数 AUDIT_FILE_FULL_MODE 进行配置。当将 AUDIT_FILE_FULL_MODE 置为 1 时,将删除最老的审计文件,直至有足够的空间创建新审计文件。当将 AUDIT_FILE_FULL_MODE 置为 2 时,将不再写审计记录;缺省值为 1。

不同AUDIT_FILE_FULL_MODE的含义如下:

参数值 含义
0 当审计文件写满时,停止写入新的审计记录,并可能触发报错(严格模式,确保记录不丢失,但可能影响业务)。
1 写满后 切换到新的审计文件(需提前配置文件路径和滚动策略,如按大小或时间分割)。
2 写满后 覆盖最早的审计记录(但可能仅覆盖部分旧记录,策略较简单)。
3 写满后 循环覆盖最早的审计记录(持续滚动写入,始终保留最新的审计记录,旧记录逐步被覆盖)。

两种策略都会导致审计记录的缺失,因此,管理员应该及时对审计文件进行备份。

SELECT * FROM V$PARAMETER WHERE NAME = 'AUDIT_FILE_FULL_MODE';

image.png

测评项:d)应对审计进程进行保护,防止未经授权的中断。

默认普通用户以及非审计员管理账户无权限关闭日志记录进程。

更多和审计相关的信息请查阅:https://eco.dameng.com/document/dm/zh-cn/pm/audit.html

达梦

入侵防范

测评项:a)应遵循最小安装的原则,仅安装需要的组件和应用程序。

1)应核查是否遵循最小安装原则;

2)应核查是否未安装非必要的组件和应用程序。

数据库默认最小化安装,无多余扩展。

测评项:b)应关闭不需要的系统服务、默认共享和高危端口;

参考《GB/T 28448-2019 信息安全技术 网络安全等级保护测评要求》,该要求项,不适用于数据库。

测评项:c)应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制。

测评点:ALLOW_ADDR字段

查看所有账户的访问规则:

Select A.allow_addr,A.not_allow_addr,A.allow_dt,A.not_allow_dt,B.USERNAME from SYSUSERS A ,DBA_USERS B WHERE A.ID=B.USER_ID;

image.png

测评项:d)应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符 合系统设定要求。

参考《GB/T 28448-2019 信息安全技术 网络安全等级保护测评要求》,该要求项,不适用于数据库。

测评项:e)应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞;

根据现场漏洞扫描结果进行判断。

测评项:f)应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。

参考《GB/T 28448-2019 信息安全技术 网络安全等级保护测评要求》,该要求项,不适用于数据库。

补充:DM数据库SP_SET_ENABLE_AUDIT为 (2)时可以实时侵害检测,根据侵害检测结果做出相应(安全策略)的安全审计响应,结合审计告警工具dmamon,将报警信息以邮件的形式发送给指定邮箱。

达梦

可信验证

测评项:a)可基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心。

参考《GB/T 28448-2019 信息安全技术 网络安全等级保护测评要求》,该要求项,不适用于数据库。

达梦

数据完整性

测评项:a)应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等;

根据保密性查询的算法判断是否具有完整性校验

测评项:b)应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等。

根据保密性查询的算法判断是否具有完整性校验

达梦

数据保密性

参考文档:通信加密 | 达梦技术文档

测评项:a)应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等;

达梦数据库的SSL模式运行于TCP/IP四层模式时,在传统双向认证的基础上区分为SSL认证(证书验证)和SSL加密(数据传输)

ENABLE_ENCRYPT 数值 SSL认证(鉴别数据) SSL加密(业务数据等)
0 aes-256-cfb
1 启用,以SSL证书算法为准 启用,以当前会话为准
2 启用,以SSL证书算法为准
4 aes-256-cfb 启用,以当前会话为准(客户端未配置则不加密)
SELECT * FROM V$PARAMETER WHERE NAME='ENABLE_ENCRYPT';

image.png

达梦数据库的SSL模式支持低版本TLS,建议手动核查 dm.ini 的会话版本。MIN_SSL_VERSION 应取值为 0x03030x0304

达梦数据库的SSL模式也支持运行于TCP/IP七层模式。当SSL证书未配置时,应用层也存在未加密的可能性。

COMM_ENCRYPT_NAME 数值 业务数据等
NULL 未加密
数值不规范 aes-256-cfb
数值规范 以实际为准
// 当前会话已采用的加密算法
SELECT * FROM V$PARAMETER WHERE NAME='COMM_ENCRYPT_NAME';
// 达梦数据库可支持的算法
SELECT CYT_NAME FROM V$CIPHERS WHERE (CYT_TYPE=1 OR CYT_TYPE=2 ) AND (WORK_MODE!='ECB_NOPAD' AND WORK_MODE!='CBC_NOPAD');

image.png

测评项:b)应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。

数据库创建时支持定义 ENCRYPT_NAME 进行全库加密,但未定义则不加密

select SF_GET_ENCRYPT_NAME();

image.png

参考文档:登录用户名密码增强加密 | 达梦技术文档

当全盘加密未开启时,达梦数据库支持使用公私钥对称加密对鉴别数据进行保存。相关公私钥保存路径查阅 dm_svc.confLOGIN_CERTIFICATE 的配置路径(通常在 SYSTEM_PATH ),常见名称有 dm_login.prikey 等。

 

达梦

数据备份恢复

测评项:a)应提供重要数据的本地数据备份与恢复功能;

通过访谈管理员数据备份策略以及核查是否备份到指定的存储介质中。

测评项:b)应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地;

通过访谈管理员数据备份策略是否存在异地备份。

测评项:c)应提供重要数据处理系统的热冗余,保证系统的高可用性。

访谈管理员数据库所在服务器服务器采用热冗余方式部署,保障系统的可用性。

达梦

剩余信息保护

测评项:a)应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除;

用户注销后重新登录,会重新调用接口,用户的鉴别信息会重新从数据库中提取,保证了鉴别信息所在存储空间被释放或重新分配前得到完全清除。

测评项:b)应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除。

用户注销后重新登录,会重新调用接口,用户的鉴别信息会重新从数据库中提取,保证了敏感数据所在存储空间被释放或重新分配前得到完全清除。

达梦

核查与访谈

核查命令:

-- 核查用户列表确认用户身份标识是否具有唯一性;
SELECT USERNAME FROM DBA_USERS;
-- 核查用户配置信息或测试验证是否不存在空口令用户;
SELECT USERNAME, PASSWORD FROM DBA_USERS;
-- 核查用户鉴别信息是否具有复杂度要求并定期更换;
SELECT * FROM V$PARAMETER WHERE NAME= 'PWD_POLICY';
-- 核查是否配晋并启用了登录失败处理功能;
-- subtype$参考实际环境
SELECT 
    so.NAME AS "达梦数据库用户名",--列名都需要查表,so 是 SYSOBJECTS 表的别名(通过 JOIN SYSOBJECTS so 指定)。
    su.FAILED_NUM AS "失败次数限制",--su 是 SYSUSERS 表的别名(通过 FROM SYSUSERS su 指定)。
    su.FAILED_ATTEMPS AS "失败尝试次数",
    su.LOCK_TIME AS "锁定时间(min)"
FROM SYSUSERS su
JOIN SYSOBJECTS so ON su.ID = so.ID
WHERE so.SUBTYPE$ = 'USER';
-- 核查是否配置并启用了登录连接超时及自动退出功能;
SELECT PROFILE, RESOURCE_NAME, LIMIT 
FROM DBA_PROFILES 
WHERE RESOURCE_NAME IN ('CONNECT_TIME', 'CONNECT_IDLE_TIME');
-- 查看所有用户
SELECT USERNAME FROM DBA_USERS;
-- 查看系统/对象权限(所有用户)
SELECT * FROM DBA_SYS_PRIVS ORDER BY GRANTEE;
-- 查看系统/对象权限(单个用户)
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'SYSDBA';
-- 使用数据库数据库审计员查询审计开关当前的值
SELECT * FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';
-- 开启ENABLE_AUDIT以及针对语句级查询后查看日志记录;
select * from V$AUDITRECORDS;
-- 查询审计记录是否进行保护,定期备份
SELECT * FROM V$PARAMETER WHERE NAME = 'AUDIT_FILE_FULL_MODE';
-- 查看所有账户的访问规则
Select A.allow_addr,A.not_allow_addr,A.allow_dt,A.not_allow_dt,B.USERNAME from SYSUSERS A ,DBA_USERS B WHERE A.ID=B.USER_ID;
-- 系统管理员可通过查询 V$PARAMETER 动态视图查询 ENABLE_ENCRYPT 的当前值
SELECT * FROM V$PARAMETER WHERE NAME='ENABLE_ENCRYPT';
-- 用户可通过 V$PARAMETER 动态视图查询 COMM_ENCRYPT_NAME 的当前值
SELECT * FROM V$PARAMETER WHERE NAME='COMM_ENCRYPT_NAME';
-- 查看是否指定全库加密
select SF_GET_ENCRYPT_NAME();
-- 查看表空间透明加密(与全库加密冲突,二者只能选择其一)
SELECT TABLESPACE_NAME, ENCRYPTED FROM DBA_TABLESPACES;
-- 查看表列透明加密
SELECT * FROM DBA_ENCRYPTED_COLUMNS;

访谈内容:

MongoDB数据库

MongoDB数据库

身份鉴别

测评项:a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;

1) 访谈数据库管理员系统用户是否已设置密码,并查看登录过程中系统账户是否使用了密码进行验证登录,

(方法 1)Windows系统中查看 mongod.cfg 文件中 security.authorization 是否为 enabled,若无则需要配置;

5902e6cff7cfcf74651bdf5e1320db8.png


(方法 2)Linux系统中则通过命令查看:cat /etc/mongod.conf | grep "Auth=" 如果有返回行说明安全,否则需要进行修复

2) 确保 MongoDB 本地用户也不能绕过身份验证,查询是否含有配置项 cat /etc/mongod.conf | grep "enableLocalhostAuthBypass" 如果没有返回行说明安全,否则需要进行修复

3) 确保 MongoDB 身份验证在集群环境下正常使用,集群环境中身份验证依赖于密钥。如果不使用密钥,在集群的环境中会出现绕过身份验证,非授权用户登录到 MongoDB.
查询是否含有配置项 cat /etc/mongod.conf | grep "keyFile=" 如果有返回行说明安全,否则需要进行修复

访谈数据库管理员是否启用口令复杂度配置,Linux系统检查配置命令如下:

#!/bin/bash

# 1. 访谈数据库管理员是否启用口令复杂度配置:  

# 查看MongoDB的主配置文件,获取当前的配置设置  
cat /etc/mongod.conf  

# 检查配置文件中是否启用了安全授权(security.authorization)  
cat /etc/mongod.conf | grep security.authorization  

# 查找配置文件中关于认证模式(Auth=)的设置  
cat /etc/mongod.conf | grep "Auth="  

# 检查是否允许本地访问绕过身份验证(enableLocalhostAuthBypass)的设置  
cat /etc/mongod.conf | grep "enableLocalhostAuthBypass"  

# 查看配置文件中关于密钥文件(keyFile)的设置  
cat /etc/mongod.conf | grep "keyFile="  

测评项:b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连 接超时自动退出等相关措施。

1)查看是否启用登录失败限制策略 ;  

MongoDB 默认不直接提供登录失败限制 / 锁定功能,需通过以下方式实现:

Windows系统:

(方法1)检查MongoDB配置文件

 Get-Content "C:\Program Files\MongoDB\Server\版本号\bin\mongod.cfg" | Select-String -Pattern "retryFailedAuthenticationAttempts"

image.png

若配置文件中完全没有 retryFailedAuthenticationAttempts 字段,命令会静默返回空结果(不报错)。

原因:MongoDB 默认不启用登录失败限制策略,或使用了其他方式实现(如系统防火墙)。

若 MongoDB 已启用登录失败限制策略(即配置了 retryFailedAuthenticationAttempts 参数),这段 PowerShell 命令会返回配置文件中包含该参数的行。例如:

示例输出:

# 假设配置文件中有如下配置:
security:
  authorization: enabled
  retryFailedAuthenticationAttempts: 5  # 限制 5 次失败尝试

# 命令执行结果:
retryFailedAuthenticationAttempts: 5

参数含义:retryFailedAuthenticationAttempts: 5 表示允许 5 次失败的认证尝试,超过后会临时锁定账户(需 MongoDB 5.0+ 版本支持)。

(方法2)检查Windows防火墙规则

# 查看是否有针对 MongoDB 端口的失败连接限制规则
Get-NetFirewallRule | Where-Object {$_.DisplayName -like "*MongoDB*" -or $_.LocalPort -eq 27017} | Format-Table DisplayName,Direction,Action,Enabled

image.png

若无显示,则表明系统未配置与 MongoDB 端口相关的防火墙规则;

若返回规则列表,需进一步检查是否包含失败连接限制条件(如使用高级安全防火墙自定义规则)。

示例输出(有规则时):

image.png

输出字段说明
DisplayName:防火墙规则的显示名称(如管理员自定义的规则名称)。
Direction:规则方向(Inbound 入站 / Outbound 出站)。
Action:规则动作(Allow 允许 / Block 阻止)。
Enabled:规则是否启用(True 启用 / False 禁用)。

Linux系统:

#(1)检查 MongoDB 自身配置(适用于 MongoDB 5.0+)
# 检查是否配置了 retryFailedAuthenticationAttempts 参数(需在 mongod.conf 中配置)
cat /etc/mongod.conf | grep -i "retryFailedAuthenticationAttempts"
#若返回类似 retryFailedAuthenticationAttempts: 5,表示启用了失败重试限制(示例为 5 次)。

#(2)或者检查系统级防火墙规则(如 iptables)
# 查看是否有针对 MongoDB 端口(默认 27017)的失败连接限制规则
iptables -L -n | grep 27017
#若返回类似 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:27017 state INVALID,NEW recent: SET name: DEFAULT side: source,表示通过防火墙限制了失败连接。

2)查看是否启用登录失败锁定策略 ;  

MongoDB 默认不提供会话超时自动退出功能,需通过以下方式实现:

(方法 1):检查客户端连接超时配置

javascript
// 在 MongoDB Shell 中执行,查看当前会话的 idleSessionTimeoutMinutes 参数
db.adminCommand({ getParameter: 1, idleSessionTimeoutMinutes: 1 })


若返回 { "idleSessionTimeoutMinutes": 30, ok: 1 },表示会话空闲 30 分钟后自动超时(需 MongoDB 4.4+)。

(方法 2):检查 MongoDB 配置文件

bash
# Linux 系统
cat /etc/mongod.conf | grep -i "idleSessionTimeoutMinutes"

# Windows 系统
Get-Content "C:\Program Files\MongoDB\Server\{版本号}\bin\mongod.cfg" | Select-String -Pattern "idleSessionTimeoutMinutes"

 

若返回类似配置项,说明已启用会话超时策略。


3)查看是否启用登录超时退出策略;