Skip to content

KingBaseES 安全参数

安全参数概述

KingBaseES 的安全参数是保护数据库安全的重要配置项,合理的安全参数配置可以提高数据库的安全性,防止未授权访问和数据泄露。安全参数主要包括认证参数、访问控制参数、加密参数、审计参数等。

认证参数

listen_addresses

  • 描述:指定数据库监听的 IP 地址
  • 默认值:'localhost'
  • 取值范围:以逗号分隔的 IP 地址列表,或 '*' 表示所有地址
  • 配置建议
    • 生产环境建议只监听必要的 IP 地址,避免使用 '*'
    • 结合防火墙使用,限制访问源 IP
    • 建议设置为具体的 IP 地址,如 '192.168.1.100'

port

  • 描述:指定数据库监听的端口
  • 默认值:54321
  • 取值范围:1 ~ 65535
  • 配置建议
    • 建议修改默认端口,避免端口扫描攻击
    • 结合防火墙使用,限制访问端口
    • 确保端口未被其他服务占用

password_encryption

  • 描述:指定密码加密方式
  • 默认值:scram-sha-256
  • 取值范围:md5、scram-sha-256
  • 配置建议
    • 建议使用 scram-sha-256,安全性更高
    • md5 加密方式安全性较低,不建议在生产环境使用
    • 升级时注意密码兼容问题

pam_service_name

  • 描述:指定 PAM 服务名称
  • 默认值:'kingbase'
  • 取值范围:字符串
  • 配置建议
    • 如需使用 PAM 认证,确保 PAM 服务配置正确
    • 配置文件位置:/etc/pam.d/kingbase

ldap_url

  • 描述:指定 LDAP 服务器 URL
  • 默认值:无
  • 取值范围:LDAP URL 格式
  • 配置建议
    • 如需使用 LDAP 认证,确保 LDAP URL 配置正确
    • 建议使用 ldaps:// 协议进行加密通信

访问控制参数

max_connections

  • 描述:允许的最大并发连接数
  • 默认值:100
  • 取值范围:1 ~ 100000
  • 配置建议
    • 根据实际业务需求设置,避免设置过大
    • 结合 connection_limits 资源池使用,限制单个用户的连接数
    • 过高的设置可能导致资源耗尽攻击

superuser_reserved_connections

  • 描述:为超级用户预留的连接数
  • 默认值:3
  • 取值范围:0 ~ max_connections-1
  • 配置建议
    • 建议保留 3 ~ 5 个连接用于超级用户应急访问
    • 确保即使普通连接耗尽,超级用户仍能登录

tcp_keepalives_idle

  • 描述:TCP 连接空闲时间
  • 默认值:7200
  • 取值范围:0 ~ 2147483647
  • 配置建议
    • 建议设置为 300 ~ 600 秒
    • 较短的时间可以更快地检测到死连接
    • 防止攻击者占用大量连接资源

tcp_keepalives_interval

  • 描述:TCP keepalive 探测间隔
  • 默认值:75
  • 取值范围:0 ~ 2147483647
  • 配置建议
    • 建议设置为 30 ~ 60 秒
    • 与 tcp_keepalives_idle 配合使用

tcp_keepalives_count

  • 描述:TCP keepalive 探测次数
  • 默认值:9
  • 取值范围:0 ~ 2147483647
  • 配置建议
    • 建议设置为 3 ~ 5 次
    • 与 tcp_keepalives_idle 和 tcp_keepalives_interval 配合使用

加密参数

ssl

  • 描述:是否启用 SSL 连接
  • 默认值:off
  • 取值范围:on、off、prefer
  • 配置建议
    • 生产环境建议启用 SSL,设置为 on
    • 确保配置了正确的 SSL 证书和密钥
    • 建议使用 CA 签发的证书,避免自签名证书

ssl_cert_file

  • 描述:SSL 证书文件路径
  • 默认值:'server.crt'
  • 取值范围:字符串
  • 配置建议
    • 确保证书文件存在且权限正确(600)
    • 证书应包含完整的证书链
    • 定期更新证书,避免证书过期

ssl_key_file

  • 描述:SSL 密钥文件路径
  • 默认值:'server.key'
  • 取值范围:字符串
  • 配置建议
    • 确保密钥文件存在且权限正确(600)
    • 密钥应妥善保管,避免泄露
    • 建议使用强密钥,长度不小于 2048 位

ssl_ca_file

  • 描述:SSL CA 证书文件路径
  • 默认值:''
  • 取值范围:字符串
  • 配置建议
    • 建议配置 CA 证书,用于验证客户端证书
    • 确保 CA 证书可信
    • 定期更新 CA 证书

ssl_ciphers

  • 描述:指定允许的 SSL 密码套件
  • 默认值:'HIGH:MEDIUM:+3DES:!aNULL'
  • 取值范围:OpenSSL 密码套件字符串
  • 配置建议
    • 建议使用更安全的密码套件,如 'HIGH:!aNULL:!MD5:!3DES'
    • 避免使用不安全的密码套件,如 RC4、DES
    • 定期更新密码套件配置,跟随安全最佳实践

审计参数

audit_enabled

  • 描述:是否启用审计功能
  • 默认值:off
  • 取值范围:on、off
  • 配置建议
    • 生产环境建议启用审计功能
    • 审计可以记录数据库的重要操作,便于安全审计和故障排查

audit_directory

  • 描述:指定审计日志目录
  • 默认值:'pg_audit'
  • 取值范围:字符串
  • 配置建议
    • 确保目录存在且权限正确(700)
    • 建议将审计日志存储在独立的磁盘分区
    • 定期清理审计日志,避免磁盘空间不足

audit_filename

  • 描述:指定审计日志文件名模板
  • 默认值:'audit_%Y%m%d_%H%M%S.log'
  • 取值范围:字符串,支持 strftime 格式
  • 配置建议
    • 建议包含时间戳,便于日志管理
    • 定期归档审计日志

audit_rotation_size

  • 描述:指定审计日志文件大小限制
  • 默认值:10MB
  • 取值范围:1 ~ 2147483647
  • 配置建议
    • 建议根据审计日志量调整
    • 过大的文件可能影响日志查询性能
    • 过小的文件会导致日志文件过多

audit_rotation_age

  • 描述:指定审计日志文件时间限制
  • 默认值:1d
  • 取值范围:1min ~ 1y
  • 配置建议
    • 建议根据审计需求调整
    • 结合 audit_rotation_size 使用

audit_statement_classes

  • 描述:指定需要审计的语句类型
  • 默认值:'READ,WRITE'
  • 取值范围:以逗号分隔的语句类型列表
  • 配置建议
    • 生产环境建议审计所有重要操作,如 'READ,WRITE,DDL,DML,DCL'
    • 根据实际需求调整审计范围,避免审计日志过大

其他安全参数

cluster_name

  • 描述:指定集群名称
  • 默认值:'kingbase'
  • 取值范围:字符串
  • 配置建议
    • 建议设置有意义的集群名称,便于管理
    • 避免使用默认名称,提高安全性

data_directory_mode

  • 描述:指定数据目录权限
  • 默认值:0700
  • 取值范围:0000 ~ 0777
  • 配置建议
    • 建议保持默认值 0700,只允许数据库用户访问
    • 避免设置过松的权限,防止数据泄露

max_prepared_transactions

  • 描述:指定最大预备事务数
  • 默认值:0
  • 取值范围:0 ~ max_connections
  • 配置建议
    • 如需使用预备事务,根据实际需求设置
    • 过高的设置可能导致资源耗尽
    • 建议设置为 max_connections 的 10% ~ 20%

temp_file_limit

  • 描述:指定每个会话的临时文件大小限制
  • 默认值:-1(无限制)
  • 取值范围:-1 ~ 2147483647
  • 配置建议
    • 建议设置合理的限制,防止磁盘空间耗尽攻击
    • 根据磁盘空间大小调整
    • 建议设置为 1GB ~ 10GB

版本差异

V8 R6 安全参数

  • 支持基本的认证和加密功能
  • 审计功能相对简单
  • 安全参数配置选项较少

V8 R7 安全参数

  • 增强了认证和加密功能,支持更多认证方式
  • 改进了审计功能,支持更细粒度的审计
  • 增加了更多安全参数配置选项
  • 增强了对安全漏洞的防护
  • 支持更多的加密算法和密码套件

安全参数加固最佳实践

  1. 最小权限原则:只授予用户必要的权限,避免过度授权
  2. 定期更新密码:定期更换数据库用户密码,使用强密码策略
  3. 启用加密通信:配置 SSL 加密,保护网络传输安全
  4. 启用审计功能:记录重要操作,便于安全审计和故障排查
  5. 限制访问源:结合防火墙使用,限制数据库访问源 IP 和端口
  6. 定期备份配置文件:备份 kingbase.conf 和 sys_hba.conf 等配置文件
  7. 定期更新数据库版本:及时安装安全补丁,修复已知漏洞
  8. 监控安全事件:定期检查审计日志和错误日志,发现异常情况

常见问题(FAQ)

Q1:如何选择密码加密方式?

A1:建议使用 scram-sha-256 加密方式,安全性更高。md5 加密方式安全性较低,不建议在生产环境使用。升级时注意密码兼容问题,可能需要使用 password_encryption = 'scram-sha-256,md5' 进行过渡。

Q2:如何限制数据库访问源?

A2:可以通过以下方式限制数据库访问源:

  • 配置 listen_addresses,只监听必要的 IP 地址
  • 配置防火墙,限制访问 IP 和端口
  • 配置 sys_hba.conf,限制允许访问的 IP 地址和认证方式

Q3:如何启用 SSL 加密?

A3:启用 SSL 加密需要以下步骤:

  1. 生成或获取 SSL 证书和密钥
  2. 配置 ssl = on
  3. 配置 ssl_cert_file 和 ssl_key_file
  4. 配置 ssl_ca_file(可选,用于验证客户端证书)
  5. 重启数据库服务

Q4:如何配置审计功能?

A4:配置审计功能需要以下步骤:

  1. 配置 audit_enabled = on
  2. 配置审计日志目录和文件名
  3. 配置审计旋转策略
  4. 配置需要审计的语句类型
  5. 重启数据库服务

Q5:如何防止 SQL 注入攻击?

A5:防止 SQL 注入攻击可以从以下几个方面入手:

  • 使用参数化查询,避免直接拼接 SQL 语句
  • 限制用户权限,避免使用超级用户
  • 启用严格的语法检查
  • 定期审计 SQL 语句

Q6:如何备份和恢复安全参数配置?

A6:可以通过以下方式备份和恢复安全参数配置:

  • 备份 kingbase.conf 和 sys_hba.conf 等配置文件
  • 使用 sys_dumpall --globals-only 备份全局配置
  • 定期备份审计日志和安全相关日志

Q7:如何监控安全事件?

A7:可以通过以下方式监控安全事件:

  • 定期检查审计日志,发现异常操作
  • 定期检查错误日志,发现登录失败等异常情况
  • 使用监控工具监控数据库连接和操作
  • 配置告警策略,及时通知安全事件

Q8:如何处理安全漏洞?

A8:处理安全漏洞可以从以下几个方面入手:

  • 及时关注 KingBaseES 安全公告
  • 及时安装安全补丁
  • 配置防火墙和入侵检测系统
  • 定期进行安全扫描和渗透测试
  • 制定安全事件响应计划