高斯数据库是一款开源关系型数据库管理系统,提供面向多核的极致性能、全链路的业务和数据安全。多用于大并发、大数据量、以联机事务处理为主的交易型应用,如电商、金融、O2O、电信CRM/计费等,应用可按需选择不同的主备部署模式。另外也用于在工业监控和远程控制、智慧城市的延展、智能家居、车联网等物联网场景下,传感监控设备多,采样率高,数据存储为追加模型,操作和分析并重的场景。目前支持此数据库的操作系统:openEuler 20.03LTS(推荐采用此操作系统)、麒麟V10、CentOS 7.6。
一、身份鉴别
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
1)登录/连接Gaussdb数据库的方法(与Postgresql数据库类似)
执行su - gaussdba切换至gaussdba用户
执行gsql -d postgres -U <username>连接数据库
执行gsql -d postgres -U gaussdba,以gaussdba用户登录数据库
2)输入密码进行登录数据库
gsql -d postgres -U gaussdba
3) 连接数据库时,需要进行身份鉴别,如果密码错误,提示“Invalid username/password,login denied.”
检查方法:使用gaussdba账户连接数据库,输入错误的密码,提示“Invalid username/password,login denied.”
4)执行select * from pg_user;或者(select usename,usesysid,passwd from pg_user;)命令,列出所有用户,USESYSID字段表示用户的ID,该值唯一,表明用户身份标识具有唯一性。
检查方法:登录gaussdb主节点,切换至root用户,执行su - gaussdba切换用户,执行gsql -d postgres连接数据库,输入gaussdba用户的密码,连接成功之后,执行select * from pg_user;命令,列出所有用户,USESYSID字段表示用户的ID,该值唯一,表明用户身份标识具有唯一性。
5)查看账户一览表,gaussdb所有账户都有默认密码。连接数据库时,需要输入密码,表明用户默认口令不为空。
检查方法:依次使用gaussdba、omm账户连接数据库,都需要输入密码,说明账户的口令不为空,如果使用gsql命令或者gsql -d postgres -U omm直接进入数据库,无密码输入则存在空口令,演示如下:
6)使用show password_effect_time;命令查询并口令有效期值,默认值为90天。
7)查询高斯数据库的口令复杂度策略。(备注:生产环境中修改密码属于高危操作,请谨慎操作)。
使用命令:select name, setting from pg_settings where category='File Locations';查询数据库的配置文件地址。
查看配置文件中的shared_preload_libraries 方式启用passwordcheck.so模块,命令如下:cat /var/lib/opengauss/data/postgresql.conf | grep shared_preload_libraries(此处配置文件需要根据实际查询地址进行替换)
如以上配置文件中查询未配置,则使用命令查看是否启用了passwordcheck模块,命令如下:show shared_preload_libraries;和show password_policy;如果已加载,则返回以下结果:
注意说明:
● 参数password_policy设置为1时表示采用密码复杂度校验,默认值;
● 参数password_policy设置为0时表示不采用任何密码复杂度校验,设置为0会存在安全风险,不建议设置为0,即使需要设置也要将所有openGauss节点中的password_policy都设置为0才能生效。
随后新建账户进行验证,下面是验证过程:
b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;
1)使用show failed_login_attempts;和show password_lock_time;命令查询登录失败处理策略,默认值为10,即登录失败10次错误后锁定账户1天。
2)使用命令:select * from pg_settings ps where ps.name like 'authentication_timeout'; 查询服务器认证的最长时间,如果在这个时间内没有完成认证,服务器将关闭连接。
c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;
核查是否采用加密等安全方式对系统进行远程管理,防止鉴别信息在网络传输过程中被窃听。检查远程管理时管理员所使用的管理协议,查看传输过程中的鉴别信息是否是经过加密处理的、抗重放的,并可使用抓包工具,判断管理员远程管理时传输过程中的鉴别信息被窃听的可能性。
GaussDB支持通过SSL加密客户端和服务器之间、主机和备机之间的通讯。SSL通讯使用的加密算法为XXX(以实际查询为准)。
命令查询:cat /var/lib/opengauss/data/postgresql.conf | grep ssl (配置路径以实际查询为准),下图为未启用。
d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。
一般没人做,不符合。(注意沟通)
二、访问控制
a)应对登录的用户分配账户和权限;
1)执行select * from pg_user;命令,查看所有用户。
2)执行select * from information_schema.routine_privileges where grantee='user_name';命令查询user_name用户所拥有的权限,user_name替换成实际的用户名。
b)应重命名或删除默认账户,修改默认账户的默认口令;
1)登录数据库之后,执行select ROLNAME from pg_authid where oid=10;命令,查看默认用户。
2)测试系统中的账户有没有弱口令密码或者默认密码。
c)应及时删除或停用多余的、过期的账户,避免共享账户的存在;
1)登录数据库之后,执行select * from pg_user;命令,查看所有用户。
2)询问运维人员数据库中的账户是否与自然人一一对应,核查有没有离职人员账户或测试账户等。
d)应授予管理用户所需的最小权限,实现管理用户的权限分离;
1)登录数据库之后,执行\du <username>命令,查看当前用户的权限
例如,执行\du omm查看omm用户的权限
也可以\du获取全部账户权限:
e)应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则;
数据库由超级管理员账户依据具体运维需求对账户进行具体权限划分,不同账户具有不同访问权限,未发现越权访问情况。
f)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级;
数据库由数据库管理员依据具体运维需求配置用户对数据库的访问规则,访问控制粒度主体为用户级,客体为数据库表级。
g)应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问。
通过访谈管理员是否对重要主体和客体设置安全标记。数据库自身应该很难实现这个功能,可能需要依赖操作系统或者第三方来实现。该项一般默认都不符合。
三、安全审计
a)应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;
在数据库运行过程中,会出现大量日志,既有保证数据库安全可靠的WAL日志(预写式日志,也称为Xlog),也有用于数据库日常维护的运行和操作日志等。在数据库发生故障时,可以参考这些日志进行问题定位和数据库恢复的操作。
1)查询各类日志审计功能是否开启:
show audit_enabled; //审计总开关设置 默认开启,值为on
show audit_database_process; //审计开关设置 默认开启,值为1
show audit_login_logout; //默认值为7,表示开启用户登录、退出的审计功能。设置为0表示关闭用户登录、退出的审计功能。不推荐设置除0和7之外的值。
show audit_database_process //默认值为1,表示开启数据库启动、停止、恢复和切换的审计功能。
show audit_user_locked //默认值为1,表示开启审计用户锁定和解锁功能。
show audit_user_violation //默认值为0,表示关闭用户越权操作审计功能。
show audit_grant_revoke。//默认值为1,表示开启审计用户权限授予和回收功能。。
show audit_system_object //默认值为12295,表示只对DATABASE、SCHEMA、USER、DATA SOURCE这四类数据库对象的CREATE、ALTER、DROP操作进行审计。
show audit_dml_state //默认值为0,表示关闭具体表的DML操作(SELECT除外)审计功能。
show audit_dml_state_select。//默认值为0,表示关闭SELECT操作审计功能。
show audit_copy_exec //默认值为0,表示关闭copy操作审计功能。
show audit_function_exec //默认值为0,表示不记录存储过程和自定义函数的执行审计日志。
show audit_set_parameter //默认值为1,表示记录set操作审计日志。
GaussdDB数据库日志类型:
类型 | 说明 |
---|---|
系统日志 | 数据库系统进程运行时产生的日志,记录系统进程的异常信息。 |
操作日志 | 通过客户端工具(例如gs_guc)操作数据库时产生的日志。 |
Trace日志 | 打开数据库的调试开关后,会记录大量的Trace日志。这些日志可以用来分析数据库的异常信息。 |
黑匣子日志 | 数据库系统崩溃的时候,通过故障现场堆、栈信息可以分析出故障发生时的进程上下文,方便故障定位。黑匣子具有在系统崩溃时,dump出进程和线程的堆、栈、寄存器信息的功能。 |
审计日志 | 开启数据库审计功能后,将数据库用户的某些操作记录在日志中,这些日志称为审计日志。 |
WAL日志 | 又称为REDO日志,在数据库异常损坏时,可以利用WAL日志进行恢复。由于WAL日志的重要性,所以需要经常备份这些日志。 |
性能日志 | 数据库系统在运行时检测物理资源的运行状态的日志,在对外部资源进行访问时的性能检测,包括磁盘、Hadoop openGauss等外部资源的访问检测信息。 |
系统日志:
openGauss运行时数据库节点以及openGauss安装部署时产生的日志统称为系统日志。如果openGauss在运行时发生故障,可以通过这些系统日志及时定位故障发生的原因,根据日志内容制定恢复openGauss的方法。
日志文件存储路径:
数据库节点的运行日志放在“/var/log/gaussdb/用户名/pg_log”中各自对应的目录下。
OM openGauss安装卸载时产生的日志放在“/var/log/gaussdb/用户名/om”目录下。
日志文件命名格式:
数据库节点运行日志的命名规则:
postgresql-创建时间.log
默认情况下,每日0点或者日志文件大于16MB或者数据库实例(数据库节点)重新启动后,会生成新的日志文件。
日志内容说明:
数据库节点每一行日志内容的默认格式:日期、时间、时区、用户名称、数据库名称、会话ID、日志级别、日志内容等
操作日志:
操作日志是指数据库管理员使用工具操作数据库时以及工具被openGauss调用时产生的日志。如果openGauss发生故障,可以通过这些日志信息跟踪用户对数据库进行了哪些操作,重现故障场景。
日志文件存储路径
默认在“$GAUSSLOG/bin”目录下,如果环境变量$GAUSSLOG不存在或者变量值为空,则工具日志信息不会记录到对应的工具日志文件中,日志信息只会打印到屏幕上。
其中$GAUSSLOG默认为“/var/log/gaussdb/_用户名_”。
如果使用om脚本部署时,则日志路径为 “/var/log/gaussdb/_用户名_”。
日志文件命名格式
日志文件命名格式为:
工具名-日志创建时间.log
工具名-日志创建时间-current.log
其中,“工具名-日志创建时间.log”是历史日志文件,“工具名-日志创建时间-current.log”是当前日志文件。
如果日志大小超过16MB,在下一次调用该工具时,会重命名当前日志文件为历史日志文件,并以当前时间生成新的当前日志文件。
例如将“gs_guc-2015-01-16_183728-current.log”重命名为“gs_guc-2015-01-16_183728.log”,然后重新生成“gs_guc-2015-01-17_142216-current.log”。
……
b)审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息;
根据日志文件查询为准。
系统日志具备日期、时间、时区、用户名称、数据库名称、会话ID、日志级别、日志内容等内容;……
查询命令:select * from pg_query_audit('2023-06-09 08:00:00','2023-06-09 23:59:59');,其他日志需通过不同的表或者log文件进行查询,此处不过多赘述。
c)应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等;
1)询问运维管理员对日志如何进行备份收集的。
2)查看日志文件是否满足6个月,查找6个月以前的日志内容。
d)应对审计进程进行保护,防止未经授权的中断。
数据库审计进程权限配置合理,仅授权用户可终止审计进程。
四、入侵防范
a)应遵循最小安装的原则,仅安装需要的组件和应用程序;
此项适用于操作系统、网络设备,测评对象为数据库,此项不适用。
b)应关闭不需要的系统服务、默认共享和高危端口;
此项适用于操作系统、网络设备、安全设备,测评对象为数据库,此项不适用。
c)应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制;
命令查看:cat /var/lib/opengauss/data/pg_hba.conf
d)应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求;
此项适用于应用系统、测评对象为数据库,此项不适用。
e)应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞;
1) 访谈管理员是否定期或不定期进行漏洞扫描或渗透测试,周期按照天/月/季度/半年/年等方式(建议漏洞扫描周期最长半年一次)。
2)通过本次漏洞扫描是否发现与数据库相关的高危漏洞,若存在,是否及时进行漏洞修补,检查数据库版本去了解此版本的漏洞情况。
执行命令:“gaussdb --version”查看数据库版本:
f)应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。
此项适用于网络设备、安全设备、操作系统,被测对象为数据库,此项不适用。
五、恶意代码防范
应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为,并将其有效阻断。
此项适用于网络设备、安全设备、操作系统,被测对象为数据库,此项不适用。
六、可信验证
可基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心。
不符合
七、数据完整性
a)应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等;
参考身份鉴别C项测评。
b)应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等。
使用命令查询:show password_encryption_type;
注意说明:
● 当参数password_encryption_type设置为0时,表示采用md5方式对密码加密。md5为不安全的加密算法,不建议使用。
● 当参数password_encryption_type设置为1时,表示采用sha256和md5方式对密码加密。其中包含md5为不安全的加密算法,不建议使用。
● 当参数password_encryption_type设置为2时,表示采用sha256方式对密码加密。
八、数据保密性
a)应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等;
参考身份鉴别C项测评。
b)应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。
使用命令查询:show password_encryption_type;
注意说明:
● 当参数password_encryption_type设置为0时,表示采用md5方式对密码加密。md5为不安全的加密算法,不建议使用。
● 当参数password_encryption_type设置为1时,表示采用sha256和md5方式对密码加密。其中包含md5为不安全的加密算法,不建议使用。
● 当参数password_encryption_type设置为2时,表示采用sha256方式对密码加密。
九、数据备份恢复
a)应提供重要数据的本地数据备份与恢复功能;
此项使用于服务器,测评对象为数据库,此项不适用。
b)应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地;
此项适用于应用系统、数据库,被测对象为操作系统,此项不适用。
c)应提供重要数据处理系统的热冗余,保证系统的高可用性。
此项适用于操作系统、应用系统,被测对象为数据库,此项不适用。
十、剩余信息保护
a)应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除;
数据库鉴别信息在删除后无法再利用此鉴别信息登录系统,再新建同一账户时可重新登录。
b)应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除。
数据库不具备专用的磁盘空间擦写工具和内存释放工具对鉴别信息进行清除。但当设备被替换作其他用途前,采取格式化硬盘、重新安装操作系统等方式,对存储介质的数据实现完全清除。
九、个人信息保护
a)应仅采集和保存业务必需的用户个人信息;
此项适用于数据资源,测评对象为操作系统,不适用。
b)应禁止未授权访问和非法使用用户个人信息。
此项适用于数据资源,测评对象为操作系统,不适用。