作为一款国产分布式数据库,OceanBase在金融、政务等对安全性要求极高的领域应用广泛。但在实际等保测评过程中,许多DBA和运维人员常常面临一个困境:虽然知道等保三级的要求,却不知道如何在OceanBase上具体落地执行。本文将基于GB/T 22239-2019等保三级"安全计算环境"要求,结合我在多家金融机构的OceanBase等保测评实战经验,提供一套可直接复用的完整解决方案。
在开始测评前,需要确保环境满足以下条件:
重要提示:所有测评命令需要在SYS租户下执行,使用root@sys或sys用户。普通业务租户的管理员权限可能无法获取完整的系统信息。
为了方便测评过程中的命令执行,建议提前设置以下环境变量:
bash复制export OB_HOME=/home/admin/oceanbase
export PATH=$OB_HOME/bin:$PATH
alias obclient='obclient -h127.1 -P2883 -uroot@sys -p'
对于需要频繁执行的场景,可以在~/.my.cnf中配置连接信息(注意文件权限设置为600):
ini复制[client]
host=127.1
port=2883
user=root@sys
password=your_password
在OceanBase中,账号的唯一性由user和host组合确定。执行以下命令检查是否存在重复账号:
sql复制SELECT user,host FROM mysql.user;
达标要求:每个user+host组合必须唯一,不能存在完全相同的记录。
常见问题:有些系统在迁移过程中可能会意外创建重复账号,特别是在不同host上创建了相同用户名的账号。
空口令是严重的安全隐患,必须严格禁止。检查命令如下:
sql复制SELECT user,host FROM mysql.user WHERE authentication_string='';
达标要求:查询结果必须为空,任何账户都不允许设置空密码。
修复方案:如果发现空口令账户,立即设置强密码:
sql复制ALTER USER 'username'@'host' IDENTIFIED BY 'NewStrongPassword123!';
OceanBase的MySQL模式和Oracle模式在密码复杂度检查上实现方式不同:
MySQL模式:
sql复制SHOW VARIABLES LIKE 'validate_password%';
关键参数说明:
validate_password_policy:应设置为STRONGvalidate_password_length:最小长度建议≥10validate_password_mixed_case_count:至少包含大小写字母数validate_password_number_count:至少包含数字数validate_password_special_char_count:至少包含特殊字符数Oracle模式:
sql复制SELECT limit FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_VERIFY_FUNCTION';
达标要求:MySQL模式需启用validate_password插件并配置STRONG策略;Oracle模式需配置密码验证函数。
检查密码有效期配置:
sql复制SHOW VARIABLES LIKE 'default_password_lifetime';
达标要求:密码有效期≤90天(值为86400*90秒)
配置建议:
sql复制SET GLOBAL default_password_lifetime=90;
OceanBase通过connection_control插件实现登录失败锁定功能。检查配置:
sql复制SHOW PLUGINS LIKE 'connection_control';
SHOW VARIABLES LIKE 'connection_control%';
关键参数:
connection_control_failed_connections_threshold:失败尝试阈值,建议≤5connection_control_min_connection_delay:最小延迟时间(毫秒)达标要求:必须启用connection_control插件,且失败阈值≤5。
检查SSL加密配置:
sql复制SHOW VARIABLES LIKE '%ssl%';
关键指标:
have_ssl:必须为YESob_ssl_enabled:必须为ONOBProxy SSL配置:
sql复制alter proxyconfig set enable_client_ssl=true;
alter proxyconfig set enable_server_ssl=true;
达标要求:所有远程管理连接必须使用SSL加密,包括OBProxy的客户端和服务端连接。
检查会话超时时间:
sql复制SHOW VARIABLES LIKE 'wait_timeout';
达标要求:wait_timeout≤600秒(10分钟)
配置建议:
sql复制SET GLOBAL wait_timeout=600;
检查业务账户权限:
sql复制SHOW GRANTS FOR 'app'@'%';
达标要求:业务账户只能拥有其功能所需的最小权限,禁止授予ALL PRIVILEGES或全局权限。
权限回收示例:
sql复制REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'app'@'%';
GRANT SELECT, INSERT, UPDATE ON dbname.* TO 'app'@'%';
检查默认账户状态:
sql复制SELECT user,host FROM mysql.user WHERE user IN ('','root','test');
达标要求:必须删除或禁用所有默认账户、匿名账户和测试账户。
安全建议:
sql复制RENAME USER 'root'@'%' TO 'new_admin_name'@'%';
sql复制DROP USER 'test'@'%';
OceanBase建议配置三类管理员:
检查命令:
sql复制SELECT user,host FROM mysql.user WHERE user LIKE '%admin%';
达标要求:三类管理员角色必须由不同人员担任,账户权限分离。
检查白名单配置:
sql复制SELECT * FROM __all_white_list;
达标要求:只允许堡垒机或特定管理终端的IP访问数据库管理端口。
配置示例:
sql复制ALTER SYSTEM SET whitelist='192.168.1.100,192.168.1.101';
检查审计功能状态:
MySQL模式:
sql复制SHOW VARIABLES LIKE 'ob_audit_log_level';
Oracle模式:
sql复制SELECT value FROM v$parameter WHERE name='audit_trail';
达标要求:MySQL模式需设置为ALL,Oracle模式需设置为DB或OS。
检查审计策略:
Oracle模式:
sql复制SELECT policy_name, status FROM dba_audit_policies;
达标要求:审计策略必须覆盖登录尝试、DDL操作、DML操作和权限变更等关键事件。
检查审计日志配置:
sql复制SHOW PARAMETERS LIKE 'audit_file_max_size';
SHOW PARAMETERS LIKE 'audit_file_expire_time';
达标要求:
配置建议:
sql复制ALTER SYSTEM SET audit_file_max_size='100M';
ALTER SYSTEM SET audit_file_expire_time='180d';
检查审计日志文件权限:
bash复制ls -l /home/admin/oceanbase/log/audit/
达标要求:审计日志文件只能由admin用户读写,权限设置为600。
检查数据库版本和补丁:
sql复制SELECT version();
bash复制rpm -qa | grep oceanbase
达标要求:
检查系统服务:
bash复制systemctl list-unit-files --state=enabled | grep -vE "ob|ssh|audit"
达标要求:只启用OceanBase、SSH和审计等必要服务,禁用所有非必要服务。
检查最大连接数设置:
sql复制SHOW VARIABLES LIKE 'max_connections';
达标要求:根据业务峰值合理设置,防止DDoS攻击导致资源耗尽。
配置建议:
sql复制SET GLOBAL max_connections=500;
检查物理备份配置:
bash复制obdumper --help | head -3
crontab -l | grep obdumper
达标要求:
检查集群部署情况:
sql复制SELECT zone,svr_ip,svr_port FROM __all_server;
达标要求:至少3副本,且跨机房部署实现容灾。
以下脚本可自动执行大部分检查项:
bash复制#!/bin/bash
# OceanBase 4.x 等保三级一键巡检脚本
OB_USER="root@sys"
OB_PASS="your_password"
OB_HOST="127.0.0.1"
OB_PORT="2883"
function check_auth() {
echo "===== 身份鉴别检查 ====="
obclient -h$OB_HOST -P$OB_PORT -u$OB_USER -p$OB_PASS -e "
SELECT '空口令账户',user,host FROM mysql.user WHERE authentication_string='';
SHOW VARIABLES LIKE 'validate_password%';
SHOW VARIABLES LIKE 'default_password_lifetime';
SHOW VARIABLES LIKE 'connection_control%';
SHOW VARIABLES LIKE '%ssl%';
SHOW VARIABLES LIKE 'wait_timeout';
"
}
function check_access() {
echo "===== 访问控制检查 ====="
obclient -h$OB_HOST -P$OB_PORT -u$OB_USER -p$OB_PASS -e "
SELECT user,host FROM mysql.user WHERE user IN ('','root','test');
SELECT * FROM __all_white_list;
"
}
function check_audit() {
echo "===== 安全审计检查 ====="
obclient -h$OB_HOST -P$OB_PORT -u$OB_USER -p$OB_PASS -e "
SHOW VARIABLES LIKE 'ob_audit_log_level';
SHOW PARAMETERS LIKE 'audit_file%';
"
ls -l /home/admin/oceanbase/log/audit/
}
function check_backup() {
echo "===== 数据备份检查 ====="
crontab -l | grep obdumper
ls -l /backup/ob/ 2>/dev/null || echo "备份目录未配置"
}
# 执行所有检查
check_auth
check_access
check_audit
check_backup
在实际测评过程中,经常会遇到以下典型问题:
SSL配置不生效
审计日志不完整
三权分立实现困难
备份恢复验证失败
完成技术测评后,需要整理测评报告,重点关注:
不符合项说明
整改建议
证据材料
在实际测评过程中,我发现很多问题其实源于对OceanBase特有架构的理解不足。比如,很多管理员会忽略OBProxy的独立安全配置,或者没有意识到SYS租户和普通租户在安全配置上的差异。通过本文提供的系统化检查方法和实操命令,应该能够帮助大家更高效地完成OceanBase的等保测评工作。