人大金仓数据库,全称为金仓数据库管理系统KingbaseES(简称:金仓数据库或KingbaseES),是北京人大金仓信息技术股份有限公司自主研制开发的具有自主知识产权的通用关系型数据库管理系统。以下是关于人大金仓数据库的详细介绍:
产品特点:
高兼容、高可靠、高性能、高扩展、高安全、易使用和易管理。
是唯一入选国家自主创新产品目录的数据库产品。
在国家电网、五大发电、三桶油、运营商、金融、铁路、轨交、医疗等60多个行业的关键应用国产化项目中得到广泛应用。
技术特性:
容错:提供可在电力、金融、电信等核心业务系统中久经考验的容错功能体系,确保数据库7×24小时不间断服务。
应用迁移:提供智能便捷的数据迁移工具,实现无损、快速数据迁移;支持主流数据库的语法,如Oracle、SQL Server、MySQL等,实现无损、平滑、快速迁移。
设计:提供了全新设计的集成开发环境(IDE)和集成管理平台,扩展性强,支持基于读写分离的负载均衡技术。
版本信息:
最新版本为KingbaseES V8,在系统的可靠性、可用性、性能和兼容性等方面进行了重大改进。
支持多种操作系统和硬件平台,如Unix、Linux、Windows等操作系统,以及X86、X86_64及国产龙芯、飞腾、申威等CPU硬件体系结构。
设计并实现了企业版、标准版、专业版等多类版本,满足不同业务需求。
行业应用:
金仓数据库产品广泛服务于电子政务、国防军工、能源、运营商、金融等60余个关键行业。
在国家电网调度系统稳定运行12年,支撑某中央部委稳定替代Oracle,承载日常3000+业务人员办公,整体性能提升67%等。
市场地位:
在中国数据库流行度排行榜中,人大金仓排名显著上升,以545.64的分数荣登榜单第三。
综上所述,人大金仓数据库凭借其先进的技术特性、丰富的版本选择、广泛的应用场景以及显著的市场地位,成为了国内数据库领域的佼佼者。(来自文心一言生成)
Kingbase数据库是信创项目常见的数据库之一,在政府项目会见的比较多,是比较常见的三个国产数据库之一(另外两个是达梦数据库和海量数据库)。主要难点在于根据版本的不同,查询的语句会有些许的不同。非常推荐大家有任何问题找人大金仓数据库的客服人员进行咨询或者查看他们的产品文档:https://help.kingbase.com.cn/v8/safety/safety-guide/index.html#kingbasees
本文以三级等保为环境,系统版本会分为v8r3和v8r6,简单讲述一下人大金仓数据库的测评
这一项的测评,根据28448测评要求,我们需要确认以下几点:
1、应核查用户在登录时是否采用了身份鉴别措施;
2、应核查用户列表确认用户身份标识是否具有唯一性;
3、应核查用户配置信息或测试验证是否不存在空口令用户
4、应核查用户鉴别信息是否具有复杂度要求并定期更换,
人大金仓数据库是通过用户名+口令去做身份鉴别的,这点所有的数据库都一样。
并且在产品文档中,对用户名的规约做了说明
并且口令应该也是不能为空的
口令复杂度即你在设置口令时口令需要遵循的规则,通常由口令最小长度、口令
关于口令复杂度的设置,产品文档做了相关说明
参数名 | 取值范围 | 默认值 | 描述 |
---|---|---|---|
passwordcheck.enable | true/false | false | 密码复杂度功能开关,默认为关闭状态 |
passwordcheck.password_length | [8,63] | 9 | 密码的最小长度 |
passwordcheck.password_condition_letter | [2,61] | 2 | 密码至少包含几个小写字母 |
passwordcheck.password_condition_digit | [2,61] | 2 | 密码至少包含几个大写字母 |
passwordcheck.password_condition_punct | [0,59] | 0 | 密码至少包含几个特殊字符 |
我们可以通过以下的sql进行查询,判断适用性:
show passwordcheck.password_length;
show passwordcheck.password_condition_letter;
show passwordcheck.password_condition_digit;
show passwordcheck.password_condition_punct;
最后是口令有效期,这个参数关乎这多久换一次口令,也是等保基线检查比较常见的参数,产品文档对此也做了相关说明:
参数名 | 取值范围 | 默认值 | 描述 | 备注 |
---|---|---|---|---|
identity_pwdexp.password_change_interval | [1,INT_MAX] | 30 | 密码有效期 | v8r6及以后 |
password_change_interval | [1,INT_MAX] | 30 | 密码有效期 | v8r6之前 |
在v8r6之前的版本,我们可以通过以下sql去查询:
show password_change_interval;
在v8r6版本,通过以下sql去查询:
show identity_pwdexp.password_change_interval;
如果以上所有参数都配置了,则本测评项为符合,否则为部分符合或者符合。
根据28448测评要求,我们需要确认以下几点:
应核查是否配置并启用了登录失败处理功能;
应核查是否配置并启用了限制非法登录功能,非法登录达到一定次数后采取特定动作,如账户锁定等;
应核查是否配置并启用了登录连接超时及自动退出功能;
登录失败处理策略,说人话就是输错几次密码锁定多久
人大金仓数据库的登录失败处理策略是由sys_audlog.max_error_user_connect_times
用户登录失败次数的最大值界限来限定的,error_user_connect_times的最大取值,取值范围为 [0,INT_MAX],缺省为2147483647。
参数名 | 取值范围 | 默认值 | 描述 | 备注 |
---|---|---|---|---|
sys_audlog.max_error_user_connect_times | [0,INT_MAX] | 2147483647 | 用户登录失败次数的最大值界限 | v8r6及以后 |
sys_audlog.max_error_user_connect_times | [0,INT_MAX] | 0 | 允许用户连续登录失败的最大次数 | v8r6及以后 |
error_user_connect_interval | [0,INT_MAX] | 0 | 用户被锁定时间 | v8r6及以后 |
max_error_user_connect_times | [0,INT_MAX] | 2147483647 | 用户登录失败次数的最大值界限 | v8r6以前 |
max_error_user_connect_times | [0,INT_MAX] | 0 | 允许用户连续登录失败的最大次数 | v8r6以前 |
sys_audlog.error_user_connect_interval | [0,INT_MAX] | 0 | 用户被锁定时间 | v8r6以前 |
因此我们可以使用以下sql语句去查询相关参数:
show sys_audlog.error_user_connect_times;
show sys_audlog_max_error_user_connect_times;
show sys_audlog.error_user_connect_interval;
不过在v8r6以前,sql长这样:
show error_user_connect_times;
show max_error_user_connect_times;
show error_user_connect_interval;
超时退出参数,也就是你没有操作多久会断开会话,在人大金仓数据库中,是由client_idle_timeout
参数进行控制,具体如下:
参数名 | 取值范围 | 默认值 | 描述 |
---|---|---|---|
client_idle_timeout | [0,1800] | 0 | 客户端最大空闲时间,单位是秒,超时需要重新连接。0为关闭功能。 |
可以通过以下sql进行查询:
show client_idle_timeout;
如果以上两个参数都进行了配置,那么本测评项符合,不然就是部分符合或者不符合。
在28448中,这项是这么要求的:核查是否采用加密等安全方式对系统进行远程管理,防止鉴别信息在网络传输过程中被窃听。
主要是查看被测数据库有没有对数据传输进行加密,一般是看SSL有没有开启
KingbaseES本地支持使用SSL连接加密客户端/服务器通信以提高安全性。
libkci读取系统范围的OpenSSL配置文件。默认情况下,这个文件被命名为openssl.cnf并且位于openssl version -d所报告的目录中。可以通过设置环境变量OPENSSL_CONF把这个默认值覆盖为想要的配置文件的名称。
这个,没有直接的sql语句可以查询,和oracle类似,我们需要在服务器上查看人大金仓数据库的配置文件,去查看ssl相关配置
如果只是查看ssl是否开启而不是查看具体配置,可以通过pg的一个sql查看ssl是否开启
show ssl;
如果返回值为on,证明ssl已经开启
但是如果要查看证书的话,那就需要去查看相关的配置了。此处不再赘述。有兴趣的同僚自行查看安全手册的第五章数据安全传输以及第二十章SSL支持,里面有详细的描述
截至本文完稿前应该还没有数据库能够实现双因子。云平台那个用户名+密码+动态OTP我感觉应该是算的但是前辈们说最多给部分符合。
在28448中,是这么要求的:
应核查是否为用户分配了账户和权限及相关设置情况;
应核查是否已禁用或限制匿名、默认账户的访问权限;
在KingbaseES中,除了在系统初始化过程中可以创建的三个用户:数据库管理员、安全管理员、审计管理员外,还可以创建普通用户来访问数据库,运行数据库应用。为了方便,这三个初始化用户也可以简称为管理员、审计员、安全员。
因此,如果不去修改默认配置的话,人大金仓数据库是能够实现等保上的三权分立的。
在28448中,是这么要求的:
应核查是否已经重命名默认账户或默认账户已被删除;
应核查是否已修改默认账户的默认口令;
人大金仓数据库在初始化时会生成三个默认账户,分别是系统管理员system、安全管理员sso和安全审计员sao,核查一下有没有更改口令。
根据上一项的检查结果,并与配合人员访谈各在用账户的使用情况。
根据产品文档的描述,人大金仓数据库已经做到了权限分离的要求。
此项默认符合。
默认符合。
默认不符合。
根据28448的要求,本项的核查点如下:
1、应核查是否开启了安全审计功能;
2、应核查安全审计范围是否覆盖到每个用户;应核查是否对重要的用户行为和重要安全事件进行审计
KingbaseES的审计设置分为三种类型:服务器事件审计、语句审计、模式对象审计。
事件审计
审计数据库服务器发生的事件,包含以下几种:数据库服务器的启动、数据库服务器的停止、数据库服务器配置文件的重新加载、用户登录、用户登出。简称为:服务器级审计或服务器审计。
语句级别审计
也称为 "STATEMENT AUDITING",指在 DBMS 范围内,对DBMS拥有的结构或模式对象进行操作时引发的事件进行审计,此类结构或模式对象并不指具体的某个结构或模式对象,而是一类结构或模式对象的泛称。通常,包括 DBMS 提供的 DDL、DML、DQL、DCL、TCL 等语句引发的事件。简称为:语句级审计或语句审计。
模式对象级别审计
也称为 "SCHEMA OBJECT AUDITING",指在某个确定的模式对象上进行 SELECT 或 DML 操作时引发的事件进行审计。模式对象包括表、视图、物化视图、过程、函数、序列。模式对象不包括有依附关系的对象,如依附于表的索引、约束、触发器、分区表等。简称为:模式对象级审计或对象审计。
如果要达到完全符合,那么需要引入第三方数据库审计
一般来说,开启自身审计只能给部分符合,不过kingbase的审计功能如果全部开启时可以给符合的,但审计全开会极大影响数据库的性能,请务必和客户沟通好。
kingbase的审计参数如下:
查看sql语句如下:
show sysaudit.enable;
show sysaudit.userevent;
show sysaudit.syntaxerror;
show sysaudit.serverevent;
在28448中,这一项是这么要求的:
应核查审计记录信息是否包括事件的日期和时间、主体标识、客体标识、事件类型、事件是否成功及其他与审计相关的信息。
如果引入了数据库审计系统,这里就写数据库审计系统的日志内容;如果开启的是自身审计,则可以参考下表:
列名 | 说明 |
---|---|
session_id | 会话id |
proc_id | 进程号 |
vxid | 虚事务id |
xid | 事务id |
user_id | 用户id |
username | 用户名 |
remote_addr | ip地址/端口 |
db_id | 数据库id |
db_name | 会话id |
rule_id | 审计策略编号 |
rule_type | 审计类型 |
opr_type | 操作类型 |
obj_type | 对象类型 |
schm_id | 模式id |
schm_name | 模式名 |
obj_id | 对象id |
obj_name | 对象名 |
sqltext | SQL文本 |
params | 参数 |
errcode | SQLSTATE错误码 |
errmsg | 错误消息内容 |
audit_ts | 操作时间 |
result | 结果,操作成功是success,失败是failure |
record_type | 审计记录类型(预留) |
aud_client | 客户端名字 |
server_type | 集群时服务器类型,M是主机,S是备机 |
数据库审计员sao需要查询视图sysaudit_record_sao,可以查看超级用户(包括数据库管理员system)和数据库安全员sso的审计日志
select * from sysaudit_record_sao;
数据库安全员sso需要查询视图sysaudit_record_sso,可以查看普通用户和数据库审计员sao的审计日志
select * from sysaudit_record_sso;
根据28448的要求,应核查是否采取了保护措施对审计记录进行保护;应核查是否采取技术措施对审计记录进行定期备份,并核查其备份策略。
在kingbaseES中,审计记录可以通过手动调用函数或者设置自动转储参数的方式进行转储, 转储之前要提前设置转储目录, 否则会转储失败。不推荐将转储目录放在data目录下。
查看的sql如下:
show sysaudit.auditlog_dump_di;
至于日志保护,kingbase自身只有sso和sao的用户可以查看审计日志,能够满足测评项要求。
根据28448的要求,:应测试验证通过非审计管理员的其他账户来中断审计进程,验证审计进程是否受到保护。
KingbaseES数据库中对审计功能设置了开关。审计功能关闭时,数据库不会发生审计动作,也无法将审计设置应用到数据库中。审计员(sao)如果要使 KingbaseES 系统中的审计设置生效,必须打开该审计开关。
在KingbaseES启动之前,通过修改 kingbase.conf 文件,将 sysaudit.enable 设置为on(或off)
在KingbaseES启动后,以审计员用户连接数据库,利用ALTER SYSTEM命令将 sysaudit.enable 设置为on | off。打开(或关闭)审计开关,重载配置后,数据库系统中的审计功能立即生效(或失效)。
打开(或关闭)审计开关并重载的命令:
ALTER SYSTEM SET sysaudit.enable = on | off;
CALL sys_reload_conf();
可以试试使用非审计员账户执行。
根据28448的要求,我们应该核查下列内容:
1)应核查是否遵循最小安装原则:
2)应核查是否未安装非必要的组件和应用程序
kingbaseES拥有非常多的扩展插件,可以通过下列命令查询安装的扩展插件:
\dx
这一项给不适用。数据库不涉及。
根据28448的要求,我们需要核查配置文件或参数是否对终端接入范围进行限制。
在kingbaseES中,有一个强身份认证的功能,开启后可以对身份鉴别进行强认证,其中就有对ip地址段进行限制的配置。
可以通过查看sys_hba.conf
配置文件去查看相关的配置信息,具体可参考:https://help.kingbase.com.cn/v8.6.7.24/safety/safety-guide/Managing-Strong-Authentication.html?highlight=地址 的6.2章节
对数据库来说该项直接不适用。一般是应用或者管理软件才会有这一项。
该项需结合漏扫,是否定期进行漏扫,具有漏扫报告、初测是否发现高风险漏洞,复测后高风险漏洞是否被修补。
数据库不涉及此项,不适用。
数据库不涉及此项,直接不适用。
直接不符合。
传输完整性,一般看SSL有没有开就行。
在kingbaseES中,关于存储加密的算法的描述如下:
通过在每个数据块头增加"数据水印",KingbaseES实现了数据存储过程中的完整性校验和保护。每次读磁盘时,自动进行数据水印校验。每次写磁盘时,自动更新数据水印。
数据校验支持CRC、SM3、SM3_HMAC算法,可以在初始化数据目录时指定使用的校验算法。此外,KingbaseES还支持国密算法校验。
传输保密性,一般看SSL有没有开就行。
存储保密性,kingbaseES数据库有一个手动加密的机制,可以自行设置密码算法对敏感数据进行加密,详见https://help.kingbase.com.cn/v8/safety/safety-guide/data-access-protect.html?highlight=加密#safety-safety-guide-data-access-protect--page-root,但是默认的加密算法暂时未知,还在查找产品文档中。
咨询甲方备份策略和备份恢复测试相关。
需要注意的是三级要求的异地备份是实时备份。
看所在服务器是否集群部署。
退出后需要重新输入用户名密码的话直接给符合。
这个需要问甲方说有没有针对存放敏感信息的存储介质做废弃处理。比如建立敏感数据的擦除机制,硬盘报废后进行物理毁坏处理等等。