外观
GaussDB 安全相关参数
认证和授权相关参数
password_encryption
- 参数说明:设置密码的加密方式
- 默认值:md5
- 可选值:md5, scram-sha-256
- 推荐值:scram-sha-256(更安全)
- 注意事项:
- scram-sha-256比md5更安全,但需要客户端支持
- 修改该参数后,只有新创建或修改的密码会使用新的加密方式
- 建议在安全要求较高的环境中使用scram-sha-256
authentication_timeout
- 参数说明:设置客户端认证超时时间
- 默认值:60s
- 推荐值:30s-60s
- 注意事项:
- 过短的超时时间可能导致正常认证失败
- 过长的超时时间可能导致认证过程中占用资源时间过长
- 建议根据网络环境调整
max_connections_per_user
- 参数说明:设置每个用户允许的最大连接数
- 默认值:unlimited(无限制)
- 推荐值:根据用户需求和系统资源调整
- 注意事项:
- 该参数可以限制单个用户占用过多连接资源
- 建议根据实际业务需求设置
superuser_reserved_connections
- 参数说明:为超级用户保留的连接数
- 默认值:10
- 推荐值:10-20
- 注意事项:
- 确保超级用户在连接数达到上限时仍能连接到数据库
- 建议根据数据库管理员数量调整
pg_hba.conf 配置
- 配置文件:$PGDATA/pg_hba.conf
- 配置说明:控制客户端认证方式和权限
- 建议配置:
# 允许本地IPv4连接使用peer认证 host all all 127.0.0.1/32 peer # 允许本地IPv6连接使用peer认证 host all all ::1/128 peer # 允许同一网络段的IPv4连接使用md5认证 host all all 192.168.1.0/24 md5 # 允许复制连接使用md5认证 host replication all 192.168.1.0/24 md5 - 注意事项:
- 遵循最小权限原则,只授予必要的权限
- 定期审查pg_hba.conf配置,确保安全性
- 避免使用trust认证方式,尤其是在生产环境
加密相关参数
ssl
- 参数说明:启用或禁用SSL连接
- 默认值:off
- 推荐值:on(生产环境建议启用)
- 注意事项:
- 启用SSL可以加密客户端和服务器之间的连接
- 启用SSL会带来一定的性能开销
- 建议在生产环境中启用SSL
ssl_cert_file
- 参数说明:指定SSL证书文件的路径
- 默认值:server.crt
- 推荐值:根据实际SSL证书路径设置
- 注意事项:
- 确保证书文件存在且具有正确的权限
- 定期更新SSL证书,避免证书过期
ssl_key_file
- 参数说明:指定SSL私钥文件的路径
- 默认值:server.key
- 推荐值:根据实际SSL私钥路径设置
- 注意事项:
- 确保私钥文件的权限设置为600,仅所有者可访问
- 妥善保管私钥文件,避免泄露
ssl_ca_file
- 参数说明:指定SSL CA证书文件的路径
- 默认值:(空)
- 推荐值:根据实际CA证书路径设置
- 注意事项:
- 配置CA证书可以验证客户端证书
- 适用于双向SSL认证场景
ssl_ciphers
- 参数说明:设置允许使用的SSL加密算法
- 默认值:HIGH:MEDIUM:+3DES:!aNULL
- 推荐值:根据安全要求调整,建议使用更严格的加密算法
- 注意事项:
- 避免使用不安全的加密算法
- 定期更新加密算法列表,跟进安全漏洞
ssl_prefer_server_ciphers
- 参数说明:是否优先使用服务器端的加密算法列表
- 默认值:on
- 推荐值:on
- 注意事项:
- 启用该参数可以让服务器优先选择更安全的加密算法
- 有助于提高SSL连接的安全性
ssl_min_protocol_version
- 参数说明:设置允许使用的最低SSL协议版本
- 默认值:TLSv1.2
- 推荐值:TLSv1.2或TLSv1.3
- 注意事项:
- 避免使用不安全的SSL协议版本(如TLSv1.0、TLSv1.1)
- 根据客户端支持情况调整
网络安全相关参数
listen_addresses
- 参数说明:设置数据库服务器监听的IP地址
- 默认值:localhost
- 推荐值:根据实际网络环境设置,如'0.0.0.0'(监听所有IP地址)或特定IP地址
- 注意事项:
- 生产环境中建议只监听必要的IP地址
- 避免使用'*',这可能导致安全风险
port
- 参数说明:设置数据库服务器监听的端口号
- 默认值:5432
- 推荐值:建议修改为非默认端口,提高安全性
- 注意事项:
- 修改端口后,客户端连接时需要指定新端口
- 确保防火墙允许新端口的访问
max_connections
- 参数说明:设置数据库允许的最大并发连接数
- 默认值:5000
- 推荐值:根据系统资源和业务需求调整
- 注意事项:
- 过高的设置可能导致系统资源耗尽
- 建议根据实际并发连接需求设置
- 结合连接池使用,提高连接利用率
tcp_keepalives_idle
- 参数说明:设置TCP连接空闲多久后发送第一个keepalive包
- 默认值:7200s(2小时)
- 推荐值:60s-300s
- 注意事项:
- 适当减小该值可以更快检测到失效连接
- 有助于释放无效连接占用的资源
tcp_keepalives_interval
- 参数说明:设置发送keepalive包的时间间隔
- 默认值:75s
- 推荐值:10s-60s
- 注意事项:
- 适当减小该值可以更快检测到失效连接
- 避免设置过小导致网络流量增加
tcp_keepalives_count
- 参数说明:设置发送keepalive包的最大次数
- 默认值:9
- 推荐值:3-5
- 注意事项:
- 适当减小该值可以更快检测到失效连接
- 避免设置过小导致误判有效连接为失效连接
审计相关参数
log_statement
- 参数说明:设置记录哪些SQL语句到日志
- 默认值:none
- 可选值:none, ddl, mod, all
- 推荐值:根据审计需求设置,如ddl或mod
- 注意事项:
- 设置为all会记录所有SQL语句,可能导致日志过大
- 建议根据审计需求选择合适的级别
log_connections
- 参数说明:是否记录客户端连接日志
- 默认值:off
- 推荐值:on(生产环境建议启用)
- 注意事项:
- 启用该参数可以记录所有客户端连接尝试
- 有助于审计和安全分析
log_disconnections
- 参数说明:是否记录客户端断开连接日志
- 默认值:off
- 推荐值:on(生产环境建议启用)
- 注意事项:
- 结合log_connections使用,可以完整记录客户端连接生命周期
- 有助于审计和安全分析
log_line_prefix
- 参数说明:设置日志行前缀格式
- 默认值:%m [%p] %q%u@%d/%h
- 推荐值:%m [%p] %q%u@%d/%h %a
- 注意事项:
- 包含足够的上下文信息,如时间、进程ID、用户、数据库、主机等
- 有助于日志分析和审计
log_hostname
- 参数说明:是否在日志中记录客户端主机名
- 默认值:off
- 推荐值:on
- 注意事项:
- 启用该参数会进行DNS反向解析,可能影响性能
- 有助于审计和安全分析
log_duration
- 参数说明:是否记录每个SQL语句的执行时间
- 默认值:off
- 推荐值:根据审计需求设置
- 注意事项:
- 启用该参数会记录所有SQL语句的执行时间
- 可以结合log_min_duration_statement使用
log_min_duration_statement
- 参数说明:设置记录SQL语句的最小执行时间
- 默认值:-1(不记录)
- 推荐值:1000ms-10000ms(根据性能监控需求调整)
- 注意事项:
- 设为0表示记录所有SQL语句
- 设为-1表示不记录任何SQL语句
- 有助于识别慢查询和性能问题
其他安全相关参数
shared_preload_libraries
- 参数说明:设置预加载的共享库
- 默认值:(空)
- 推荐值:根据需要加载安全相关的扩展
- 注意事项:
- 只加载必要的共享库,避免安全风险
- 定期审查预加载的共享库
session_replication_role
- 参数说明:设置会话的复制角色
- 默认值:origin
- 可选值:origin, replica
- 注意事项:
- 该参数影响触发器和规则的执行
- 用于读写分离场景
check_function_bodies
- 参数说明:是否在创建函数时检查函数体
- 默认值:on
- 推荐值:on
- 注意事项:
- 启用该参数可以在创建函数时检查语法错误
- 有助于防止恶意函数的创建
default_transaction_read_only
- 参数说明:设置默认事务是否为只读
- 默认值:off
- 推荐值:根据业务需求设置,备库可以设置为on
- 注意事项:
- 结合读写分离使用
- 确保备库的数据一致性
参数配置方法
1. 通过配置文件配置
bash
# 修改postgresql.conf文件
vi /data/gaussdb/postgresql.conf
# 添加或修改参数配置
ssl = on
ssl_cert_file = '/path/to/server.crt'
ssl_key_file = '/path/to/server.key'
listen_addresses = '0.0.0.0'
port = 15432
password_encryption = scram-sha-256
# 重启数据库使配置生效
gs_ctl restart -D /data/gaussdb2. 通过SQL命令配置
sql
-- 查看当前参数值
SHOW ssl;
SHOW password_encryption;
-- 修改参数值(需要超级用户权限)
ALTER SYSTEM SET ssl = 'on';
ALTER SYSTEM SET password_encryption = 'scram-sha-256';
-- 重新加载配置(不需要重启数据库)
SELECT pg_reload_conf();3. pg_hba.conf配置
bash
# 修改pg_hba.conf文件
vi /data/gaussdb/pg_hba.conf
# 添加或修改认证规则
host all all 192.168.1.0/24 md5
host replication all 192.168.1.0/24 md5
# 重新加载配置(不需要重启数据库)
SELECT pg_reload_conf();安全参数最佳实践
1. 定期审查和更新参数
- 定期审查安全相关参数配置
- 及时更新参数以应对新的安全威胁
- 跟进GaussDB官方的安全建议
2. 遵循最小权限原则
- 只授予必要的权限给用户
- 限制数据库管理员的数量
- 定期审查用户权限
3. 启用SSL加密
- 在生产环境中启用SSL
- 使用安全的加密算法和协议版本
- 定期更新SSL证书
4. 配置适当的认证方式
- 避免使用trust认证方式
- 优先使用scram-sha-256加密密码
- 配置pg_hba.conf,限制访问来源
5. 启用审计日志
- 记录所有连接和断开连接事件
- 记录DDL和重要的DML操作
- 记录慢查询
- 定期审查审计日志
6. 限制网络访问
- 只监听必要的IP地址和端口
- 使用防火墙限制访问
- 考虑使用私有网络
7. 定期更新数据库版本
- 及时应用安全补丁
- 跟进GaussDB的安全更新
- 定期升级数据库版本
常见问题(FAQ)
Q1: 如何选择合适的密码加密方式?
A1: 建议使用scram-sha-256加密方式,因为它比md5更安全。scram-sha-256使用加盐哈希和迭代计算,提供更好的安全性,能够抵御彩虹表攻击和密码破解。
Q2: 启用SSL会影响数据库性能吗?
A2: 启用SSL会带来一定的性能开销,主要体现在加密和解密过程中。但在现代硬件上,这种开销通常很小,对于大多数应用来说可以接受。考虑到安全性的提升,建议在生产环境中启用SSL。
Q3: 如何限制数据库的访问来源?
A3: 可以通过以下方式限制数据库的访问来源:
- 配置listen_addresses参数,只监听必要的IP地址
- 在pg_hba.conf中配置允许访问的IP地址范围
- 使用防火墙限制访问数据库端口的IP地址
Q4: 如何确保审计日志的安全性?
A4: 确保审计日志安全性的措施包括:
- 限制审计日志文件的访问权限
- 定期备份审计日志
- 加密存储敏感的审计日志
- 定期审查审计日志,及时发现安全问题
Q5: 如何处理旧密码的加密方式?
A5: 修改password_encryption参数后,只有新创建或修改的密码会使用新的加密方式。对于旧密码,可以通过以下方式处理:
- 要求用户修改密码,使用新的加密方式
- 编写脚本批量更新用户密码
Q6: 如何验证SSL连接是否正常工作?
A6: 可以通过以下方式验证SSL连接:
- 使用psql命令连接数据库,加上sslmode=require参数
- 查看数据库日志,确认SSL连接信息
- 使用pg_stat_ssl视图查看SSL连接状态
Q7: 如何优化审计日志的性能?
A7: 优化审计日志性能的措施包括:
- 合理设置log_min_duration_statement,只记录重要的SQL语句
- 避免记录过多的细节
- 使用合适的日志旋转策略,避免日志文件过大
- 考虑使用外部日志管理系统
Q8: 如何应对SQL注入攻击?
A8: 应对SQL注入攻击的措施包括:
- 使用参数化查询,避免直接拼接SQL语句
- 限制数据库用户的权限
- 启用审计日志,及时发现异常查询
- 定期进行安全审计和渗透测试
