当前位置: 首页 > news >正文

PostgreSQL的扩展 credcheck

PostgreSQL的扩展 credcheck

credcheck 是 PostgreSQL 的一个安全扩展,专门用于强制实施密码策略和凭证检查,特别适合需要符合安全合规要求的数据库环境。

一、扩展概述

1. 主要功能

  • 强制密码复杂度要求
  • 防止使用常见弱密码
  • 密码过期策略实施
  • 密码重复使用检查
  • 登录失败尝试限制

2. 适用场景

  • 需要符合 PCI DSS、HIPAA 等安全标准的系统
  • 多用户数据库环境
  • 高安全性要求的应用

二、安装与配置

1. 安装

下载网址 https://github.com/HexaCluster/credcheck/tags

在这里插入图片描述

-- 从源码安装(需PostgreSQL开发包)
cd credcheck
make && make install-- 然后连接到目标数据库执行
CREATE EXTENSION credcheck;white=# \dxList of installed extensionsName        | Version |   Schema   |                              Description                               
--------------------+---------+------------+------------------------------------------------------------------------credcheck          | 3.0.0   | public     | credcheck - postgresql plain text credential checkerpg_bulkload        | 3.1.21  | public     | pg_bulkload is a high speed data loading utility for PostgreSQLpg_dirtyread       | 2       | public     | Read dead but unvacuumed rows from tablepg_repack          | 1.5.0   | public     | Reorganize tables in PostgreSQL databases with minimal lockspg_stat_statements | 1.10    | public     | track planning and execution statistics of all SQL statements executedpgstattuple        | 1.5     | public     | show tuple-level statisticsplpgsql            | 1.0     | pg_catalog | PL/pgSQL procedural language
(7 rows)

2. 基本配置

-- 查看当前配置
white=# select name,setting from pg_settings where name like '%credcheck%';name                 | setting 
--------------------------------------+---------credcheck.auth_delay_ms              | 0credcheck.encrypted_password_allowed | offcredcheck.max_auth_failure           | 0credcheck.no_password_logging        | oncredcheck.password_contain           | credcheck.password_contain_username  | oncredcheck.password_ignore_case       | offcredcheck.password_min_digit         | 0credcheck.password_min_length        | 1credcheck.password_min_lower         | 0credcheck.password_min_repeat        | 0credcheck.password_min_special       | 0credcheck.password_min_upper         | 0credcheck.password_not_contain       | credcheck.password_reuse_history     | 0credcheck.password_reuse_interval    | 0credcheck.password_valid_max         | 0credcheck.password_valid_until       | 0credcheck.reset_superuser            | offcredcheck.username_contain           | credcheck.username_contain_password  | oncredcheck.username_ignore_case       | offcredcheck.username_min_digit         | 0credcheck.username_min_length        | 1credcheck.username_min_lower         | 0credcheck.username_min_repeat        | 0credcheck.username_min_special       | 0credcheck.username_min_upper         | 0credcheck.username_not_contain       | credcheck.whitelist                  | credcheck.whitelist_auth_failure     | 
(31 rows)

三、核心功能使用

1. 密码复杂度检查

-- 创建用户时自动检查密码
CREATE ROLE secure_user WITH LOGIN PASSWORD 'Weak123';-- 会抛出错误如:
-- ERROR: password failed dictionary check
-- 或 ERROR: password is too simple

2. 密码历史记录

-- 启用密码历史记录
ALTER SYSTEM SET credcheck.enable_password_history = on;
SELECT pg_reload_conf();-- 修改密码时会检查历史记录
ALTER ROLE existing_user WITH PASSWORD 'NewPass123';
-- 如果与最近5次密码重复会报错

3. 登录失败限制

-- 查看失败尝试记录
SELECT * FROM credcheck.failed_login_attempts;-- 手动解锁被锁账户
SELECT credcheck.unlock_account('locked_user');

四、高级配置选项

1. 自定义字典检查

-- 指定自定义字典文件路径
UPDATE credcheck.pwquality_settings 
SET dict_file = '/path/to/custom_wordlist.txt';-- 重新加载配置
SELECT credcheck.reload_settings();

2. 密码过期策略

-- 设置密码有效期90天
UPDATE credcheck.pwquality_settings
SET password_max_age = '90 days';-- 强制下次登录修改密码
ALTER ROLE critical_user WITH PASSWORD 'TempPass123' VALID UNTIL 'now';

3. 例外配置

-- 对特定角色豁免检查
INSERT INTO credcheck.pwquality_exceptions (rolname, setting, value)
VALUES ('service_account', 'min_length', '8');

五、监控与维护

1. 监控视图

-- 查看密码状态
SELECT * FROM credcheck.password_status;-- 检查即将过期的密码
SELECT rolname, password_age 
FROM credcheck.password_status 
WHERE password_age > (SELECT password_max_age FROM credcheck.pwquality_settings) * 0.9;

2. 定期维护

-- 清理旧的失败尝试记录
DELETE FROM credcheck.failed_login_attempts 
WHERE attempt_time < now() - interval '30 days';-- 更新字典文件后重新加载
SELECT credcheck.reload_dictionary();

六、安全最佳实践

  1. 结合pg_hba.conf

    # 在pg_hba.conf中限制连接方式
    hostssl all all 0.0.0.0/0 md5 clientcert=1
    
  2. 与pgcrypto集成

    -- 存储加密后的密码历史
    CREATE TABLE encrypted_password_history AS
    SELECT rolname, pgp_sym_encrypt(password, 'encryption_key')
    FROM credcheck.password_history;
    
  3. 审计日志

    -- 记录密码变更事件
    ALTER SYSTEM SET log_statement = 'ddl';
    

七、故障排除

常见问题解决

  1. 扩展无法加载

    # 检查PostgreSQL日志
    tail -n 50 /var/log/postgresql/postgresql-*.log# 确认.so文件在正确位置
    find /usr/lib/postgresql -name "credcheck*"
    
  2. 策略不生效

    -- 检查是否冲突的配置
    SHOW credcheck.enable_password_check;-- 确认配置已重载
    SELECT pg_reload_conf();
    
  3. 性能问题

    -- 对大用户表创建索引
    CREATE INDEX ON credcheck.password_history (rolname, change_time);
    

credcheck 扩展为 PostgreSQL 提供了企业级的密码策略管理能力,合理配置可以显著提升数据库认证安全性,建议结合其他安全措施如 SSL 加密和网络隔离一起使用。

相关文章:

  • 犬鼻子检测数据集VOC+YOLO格式6808张1类别近距离拍摄
  • 云原生课程-Docker
  • NLP预处理:如何 处理表情符号
  • Linux操作系统从入门到实战(四)Linux基础指令(下)
  • Hyper-V安装Win10系统,报错“No operating system was loaded“
  • 初识数据结构——二叉树从基础概念到实践应用
  • 量子纠缠式架构:当微服务同时存在于所有节点时,CAP定理是否依然成立?
  • 来自B站-AI匠的“RAG的prompt设计指南“的部分截图
  • python+flask+flask-sockerio,部署后sockerio通信异常
  • 大语言模型架构基础与挑战
  • layui获取无法获取表单数据,data.field一直为空
  • WPF使用SQLite与JSON文本文件结合存储体侧平衡数据的设计与实现
  • 泛型的诗意——深入C++模板的艺术与科学(模版进阶)
  • PostSwigger Web 安全学习:CSRF漏洞3
  • 【学习笔记1】一站式大语言模型微调框架LLaMA-Factory
  • C#本地使用离线ocr库识别图片中文本,工具包PaddleOCRSharp
  • Git Bash 下使用 SSH 连接出现 “Software caused connection abort” 问题
  • 从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——概率与统计基础 | 基础概念
  • Spark Streaming实时数据处理实战:从DStream基础到自定义数据源集成
  • 如何避免爬虫因Cookie过期导致登录失效
  • 春暖花开,为何皮肤却闹起了小情绪?
  • 人民日报头版:上海纵深推进浦东高水平改革开放
  • 上海首个航空前置货站落户松江综合保税区,通关效率可提升30%
  • 加拿大温哥华一车辆冲撞人群,造成多人伤亡
  • 青年如何打破“千人一面”,创造属于自己的文化观?
  • 云南鲁甸县一河滩突然涨水致4死,有人在救人过程中遇难