Skip to content

OceanBase 权限审计与安全管理

审计日志配置

1. 审计日志参数配置

sql
-- 启用审计日志
ALTER SYSTEM SET audit_log_enable = true;

-- 设置审计日志级别
ALTER SYSTEM SET audit_log_level = 'ALL';  -- ALL, DDL, DML, DCL, SESSION

-- 设置审计日志存储位置
ALTER SYSTEM SET audit_log_dir = 'oceanbase_data_dir/log/audit';

-- 设置审计日志保留时间(天)
ALTER SYSTEM SET audit_log_keep_time = 90;

-- 设置审计日志文件大小限制(MB)
ALTER SYSTEM SET audit_log_file_size = 1024;

-- 设置审计日志轮转次数
ALTER SYSTEM SET audit_log_file_count = 10;

2. 租户级审计配置

sql
-- 切换到租户上下文
ALTER SYSTEM CHANGE TENANT mysql_tenant;

-- 启用租户级审计
ALTER TENANT mysql_tenant SET audit_log_enable = true;

-- 设置租户审计级别
ALTER TENANT mysql_tenant SET audit_log_level = 'ALL';

3. 敏感操作审计配置

sql
-- 启用敏感表审计
ALTER SYSTEM SET audit_sensitive_table_enable = true;

-- 配置敏感表
INSERT INTO oceanbase.CDB_OB_AUDIT_SENSITIVE_TABLES (table_schema, table_name) VALUES ('app_db', 'user_info');

-- 启用敏感字段审计
ALTER SYSTEM SET audit_sensitive_column_enable = true;

审计日志查看与分析

1. 使用内置视图查看审计日志

sql
-- 查看所有审计日志
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG ORDER BY event_time DESC LIMIT 100;

-- 查看特定用户的审计日志
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG WHERE user_name = 'app_user' ORDER BY event_time DESC;

-- 查看特定操作类型的审计日志
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG WHERE command_type = 'SELECT' ORDER BY event_time DESC;

-- 查看失败的审计日志
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG WHERE result_code != 0 ORDER BY event_time DESC;

-- 查看敏感操作审计日志
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG WHERE is_sensitive = 1 ORDER BY event_time DESC;

2. 审计日志文件查看

bash
# 查看审计日志文件
tail -f oceanbase_data_dir/log/audit/audit.log

# 搜索特定用户的审计记录
grep -i "app_user" oceanbase_data_dir/log/audit/audit.log

# 搜索失败的登录记录
grep -i "login.*failed" oceanbase_data_dir/log/audit/audit.log

3. 审计日志分析工具

  • 内置审计视图:GV$OB_AUDIT_LOG、CDB_OB_AUDIT_SENSITIVE_TABLES
  • 命令行工具:ob_admin audit show
  • 第三方工具:ELK Stack、Splunk、Graylog

权限审计实践

1. 定期审计流程

  1. 制定审计计划:确定审计频率、范围和重点
  2. 收集审计数据:从内置视图或日志文件中收集审计数据
  3. 分析审计数据:识别异常行为和安全风险
  4. 生成审计报告:汇总审计结果,提出改进建议
  5. 实施整改措施:根据审计建议调整权限配置和安全策略
  6. 跟踪整改效果:验证整改措施的有效性

2. 异常行为检测

常见异常行为模式

  • 非工作时间的数据库访问
  • 大量数据查询或导出操作
  • 权限变更操作
  • 失败的登录尝试
  • 敏感数据访问

检测方法

sql
-- 检测非工作时间的访问
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG 
WHERE event_time NOT BETWEEN '09:00:00' AND '18:00:00' 
AND TO_CHAR(event_time, 'DY') NOT IN ('SAT', 'SUN')
ORDER BY event_time DESC;

-- 检测大量数据查询
SELECT user_name, COUNT(*) as query_count 
FROM oceanbase.GV$OB_AUDIT_LOG 
WHERE command_type = 'SELECT' 
GROUP BY user_name 
HAVING COUNT(*) > 1000 
ORDER BY query_count DESC;

-- 检测失败的登录尝试
SELECT user_name, client_ip, COUNT(*) as failed_count 
FROM oceanbase.GV$OB_AUDIT_LOG 
WHERE command_type = 'LOGIN' AND result_code != 0 
GROUP BY user_name, client_ip 
HAVING COUNT(*) > 5 
ORDER BY failed_count DESC;

3. 权限合规检查

sql
-- 检查具有超级权限的用户
SELECT * FROM oceanbase.DBA_USERS WHERE is_superuser = 'YES';

-- 检查具有危险权限的用户
SELECT grantee, privilege_type 
FROM oceanbase.DBA_SYS_PRIVS 
WHERE privilege_type IN ('ALL PRIVILEGES', 'CREATE USER', 'DROP USER', 'GRANT ANY PRIVILEGE')
ORDER BY grantee;

-- 检查权限授予链
SELECT * FROM oceanbase.DBA_ROLE_PRIVS WHERE admin_option = 'YES';

-- 检查长时间未使用的用户
SELECT user_name, last_login_time 
FROM oceanbase.DBA_USERS 
WHERE last_login_time < DATE_SUB(NOW(), INTERVAL 90 DAY)
ORDER BY last_login_time;

安全管理最佳实践

1. 最小权限原则

  • 仅授予必要权限:根据用户角色和职责,仅授予完成工作所需的最小权限
  • 定期回收不必要的权限:定期审查用户权限,回收不再需要的权限
  • 使用角色管理权限:通过角色统一管理权限,简化权限管理流程

2. 强密码策略

sql
-- 设置密码复杂度要求
ALTER SYSTEM SET password_strength_check = true;
ALTER SYSTEM SET password_min_length = 12;
ALTER SYSTEM SET password_require_uppercase = true;
ALTER SYSTEM SET password_require_lowercase = true;
ALTER SYSTEM SET password_require_digit = true;
ALTER SYSTEM SET password_require_special = true;

-- 设置密码有效期
ALTER SYSTEM SET password_life_time = 90;

-- 设置密码尝试次数限制
ALTER SYSTEM SET max_password_retries = 5;
ALTER SYSTEM SET password_lock_time = 300;  -- 锁定时间(秒)

3. 网络安全配置

sql
-- 限制允许访问的IP地址
CREATE USER app_user IDENTIFIED BY 'password' HOST '192.168.1.%';

-- 启用SSL加密连接
ALTER SYSTEM SET ssl_external_key = 'server-key.pem';
ALTER SYSTEM SET ssl_external_cert = 'server-cert.pem';
ALTER SYSTEM SET ssl_external_ca = 'ca.pem';
ALTER SYSTEM SET ssl_internal_key = 'internal-key.pem';
ALTER SYSTEM SET ssl_internal_cert = 'internal-cert.pem';
ALTER SYSTEM SET ssl_internal_ca = 'internal-ca.pem';

-- 强制使用SSL连接
ALTER USER app_user REQUIRE SSL;

4. 数据加密配置

sql
-- 启用透明数据加密(TDE)
ALTER SYSTEM SET tde_method = 'AES-256-CBC';
ALTER SYSTEM SET tde_key_rotation_interval = 86400;  -- 密钥轮换间隔(秒)

-- 加密表空间
CREATE TABLESPACE encrypted_tablespace ENCRYPTION = 'Y';

-- 加密现有表
ALTER TABLE app_db.user_info ENCRYPTION = 'Y';

5. 定期安全检查

  • 定期漏洞扫描:使用专业工具扫描数据库漏洞
  • 定期权限审查:每季度审查用户权限配置
  • 定期审计日志分析:每月分析审计日志,识别异常行为
  • 定期安全培训:对数据库管理员和开发人员进行安全培训

常见安全问题与解决方案

1. 未授权访问

问题描述:未经授权的用户访问数据库资源

解决方案

sql
-- 限制用户访问IP
CREATE USER app_user IDENTIFIED BY 'password' HOST '192.168.1.%';

-- 启用登录失败锁定
ALTER SYSTEM SET max_password_retries = 5;
ALTER SYSTEM SET password_lock_time = 300;

-- 启用审计日志
ALTER SYSTEM SET audit_log_enable = true;

2. 权限过度授予

问题描述:用户被授予超出其职责范围的权限

解决方案

sql
-- 回收不必要的权限
REVOKE ALL PRIVILEGES ON *.* FROM app_user;

-- 仅授予必要权限
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO app_user;

-- 使用角色管理权限
CREATE ROLE app_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO app_role;
GRANT app_role TO app_user;

3. 敏感数据泄露

问题描述:敏感数据被未授权访问或泄露

解决方案

sql
-- 启用敏感数据审计
ALTER SYSTEM SET audit_sensitive_column_enable = true;

-- 加密敏感数据
ALTER TABLE app_db.user_info MODIFY COLUMN password VARCHAR(255) ENCRYPTED;

-- 限制敏感数据访问
CREATE VIEW app_db.user_view AS SELECT user_id, user_name, email FROM app_db.user_info;
GRANT SELECT ON app_db.user_view TO app_user;

4. 弱密码问题

问题描述:用户使用弱密码,容易被破解

解决方案

sql
-- 启用密码复杂度检查
ALTER SYSTEM SET password_strength_check = true;

-- 设置强密码策略
ALTER SYSTEM SET password_min_length = 12;
ALTER SYSTEM SET password_require_uppercase = true;
ALTER SYSTEM SET password_require_lowercase = true;
ALTER SYSTEM SET password_require_digit = true;
ALTER SYSTEM SET password_require_special = true;

-- 强制用户修改初始密码
ALTER USER app_user PASSWORD EXPIRE;

常见问题(FAQ)

Q1: 如何启用 OceanBase 的审计功能?

A1: 启用审计功能的步骤:

  1. 设置 audit_log_enable = true
  2. 配置审计日志级别和存储参数
  3. 根据需要配置敏感操作审计
  4. 重启服务使配置生效

Q2: 如何查看审计日志?

A2: 查看审计日志的方法:

  • 使用内置视图 GV$OB_AUDIT_LOG
  • 直接查看审计日志文件
  • 使用第三方日志分析工具

Q3: 如何配置敏感数据审计?

A3: 配置敏感数据审计的步骤:

  1. 启用敏感表审计
  2. 将敏感表添加到审计列表
  3. 启用敏感字段审计
  4. 配置敏感字段规则

Q4: 如何实现权限的精细化管理?

A4: 实现精细化权限管理的方法:

  • 遵循最小权限原则
  • 使用角色管理权限
  • 定期审查和回收权限
  • 限制用户访问范围
  • 启用权限审计

Q5: 如何确保数据库的安全性?

A5: 确保数据库安全性的措施:

  • 配置强密码策略
  • 启用审计日志
  • 定期进行安全检查
  • 实施网络安全措施
  • 加密敏感数据
  • 定期备份数据
  • 对管理员进行安全培训