达梦
身份鉴别
测评项:a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
1)应核查用户在登录时是否采用了身份鉴别措施;
使用DM管理工具进行登录时提供了四种身份验证方式,四种身份鉴别方式均需要提供登录口令,如图:
2)应核查用户列表确认用户身份标识是否具有唯一性;
无法创建同名账户,一般默认符合;
SELECT USERNAME FROM DBA_USERS;
3)应核查用户配置信息或测试验证是否不存在空口令用户;
注意:使用SYSDBA查看用户表发现所有账户password字段均为NULL,通过网上查询似乎是数据库为了安全性隐藏了这些信息。在配置向导中可以配置SYSDBA用户口令为空(但是仅能通过DIsql.exe空口令登录),使用SYSDBA创建其他普通账户时强制要求了口令,其他管理账户默认均有口令,建议手动测试账户是否配置了登录口令。
查看用户以及口令信息:
SELECT USERNAME, PASSWORD FROM DBA_USERS;
4)应核查用户鉴别信息是否具有复杂度要求并定期更换。
口令策略:除了在创建用户语句中指定该用户的口令策略,DM 的 INI 参数 PWD_POLICY 可以指定系统的默认口令策略,缺省值为 ≥2。
SELECT * FROM V$PARAMETER WHERE NAME= 'PWD_POLICY';
PWD_POLICY的数值策略含义(位掩码组合)
数值 策略含义(位掩码组合) 说明 0无策略(不启用密码策略) 密码无复杂度、有效期等限制 1密码长度 ≥8 位 仅限制长度 2密码含大写、小写、数字、标点 至少三类 强制复杂度 4启用密码有效期(需结合 PWD_MAX_LIFE_TIME)密码到期需修改 8密码 禁止与用户名相同 防弱密码 16登录失败锁定(需结合 PWD_LOCK_TIME)防暴力破解 32密码重用限制(需结合 PWD_HISTORY)禁止重复使用历史密码
使用自带的DM 控制台工具查看(开发版没查出来):
登录超时:使用自带的DM管理工具,SYSDBA登录后查看用户,点击用户属性,在DLL中查看口令有效期“password_life_time”的值(密码有效期30天)。
注意:修改系统参数需要 SYSDBA 或 PUBLIC 角色的 ALTER SYSTEM 权限。若当前用户权限不足,会提示参数错误
测评项: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,系统预设管理员用户默认无限制。
2)应核查是否配置并启用了限制非法登录功能,非法登录达到一定次数后采取特定动作,如账户锁定等;
同上第一小点
3)应核查是否配置并启用了登录连接超时及自动退出功能;
参数解释:
CONNECT_TIME:会话连接的总时长限制,默认无限制。
CONNECT_IDLE_TIME:会话空闲状态的时长限制,默认无限制。
登录超时命令行查询:
SELECT PROFILE, RESOURCE_NAME, LIMIT
FROM DBA_PROFILES
WHERE RESOURCE_NAME IN ('CONNECT_TIME', 'CONNECT_IDLE_TIME');
如果上述命令查询失败,可使用如下两条命令替换: ---- 查看连接存活超时(死连接检测)配置
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'; //单个用户
注:
系统权限:指用户在整个数据库系统层面上的权限,允许用户执行特定的系统级操作,如:
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账户无法登录)。
测评项: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:打开普通审计和实时审计
使用数据库数据库审计员查询审计开关当前的值:
2)应核查安全审计范围是否覆盖到每个用户;
默认覆盖到数据库上的每一个用户账户。
3)应核查是否对重要的用户行为和重要安全事件进行审计。
审计级别说明如下:
系统级:系统的启动、关闭、部分系统事件以及一些系统过程和函数的调用,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录
语句级:导致影响特定类型数据库对象的特殊 SQL 或语句组的审计。如 AUDIT TABLE 将审计 CREATE TABLE、ALTER TABLE 和 DROP TABLE 等语句
对象级:审计作用在特殊对象上的语句。如 test 表上的 INSERT 语句
开启ENABLE_AUDIT以及针对语句级查询后查看日志记录;
select * from V$AUDITRECORDS;
另外在配置文件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';
测评项: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;
测评项: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';
达梦数据库的SSL模式支持低版本TLS,建议手动核查 dm.ini 的会话版本。MIN_SSL_VERSION 应取值为 0x0303 或 0x0304 。
达梦数据库的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');
测评项:b)应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。
数据库创建时支持定义 ENCRYPT_NAME 进行全库加密,但未定义则不加密。
select SF_GET_ENCRYPT_NAME();
参考文档:登录用户名密码增强加密 | 达梦技术文档
当全盘加密未开启时,达梦数据库支持使用公私钥对称加密对鉴别数据进行保存。相关公私钥保存路径查阅 dm_svc.conf 中 LOGIN_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;
访谈内容: