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

PostgreSQL的扩展 passwordcheck

PostgreSQL的扩展 passwordcheck

passwordcheck 是 PostgreSQL 内置的一个密码复杂度检查扩展,用于强制实施基本的密码策略。

一、扩展概述

  • 功能:在创建或修改用户密码时检查密码复杂度
  • 目的:防止使用过于简单的密码
  • 适用版本:PostgreSQL 9.1+
  • 检查内容
    • 密码长度
    • 是否包含数字和字母
    • 是否与用户名相同
    • 基本字典检查

二、安装与启用

1. 安装方法

-- 安装扩展(需要超级用户权限)
CREATE EXTENSION passwordcheck;-- 验证安装
SELECT * FROM pg_available_extensions WHERE name = 'passwordcheck';

2. 配置参数

postgresql.conf 中可配置:

# 最小密码长度(默认8)
passwordcheck.min_length = 10# 是否要求混合大小写(默认off)
passwordcheck.mixed_case = on# 是否要求数字(默认on)
passwordcheck.require_digit = on

三、密码策略检查内容

  1. 基本规则

    • 密码长度 ≥ 8字符(可配置)
    • 不能与用户名相同
    • 不能包含用户名
  2. 复杂度要求

    • 至少包含1个字母和1个数字
    • 可选:要求大小写混合
    • 检查常见弱密码(如’password’、'123456’等)
  3. 错误示例

    -- 密码太短
    ALTER USER test WITH PASSWORD 'abc123';
    -- 错误: password is too short-- 密码与用户名相同
    CREATE USER demo WITH PASSWORD 'demo';
    -- 错误: password must not contain user name
    

四、生产环境配置建议

1. 推荐配置

# postgresql.conf
passwordcheck.min_length = 12
passwordcheck.mixed_case = on
passwordcheck.require_digit = on
passwordcheck.special_chars = on  # 如扩展支持

2. 自定义字典检查

  1. 创建自定义字典文件:

    echo -e "company\n2023\nqwerty" > /etc/postgresql/common_passwords.txt
    chown postgres:postgres /etc/postgresql/common_passwords.txt
    
  2. 修改扩展代码(需要重新编译):

    // 在passwordcheck.c中添加自定义字典路径
    #define CUSTOM_DICT_FILE "/etc/postgresql/common_passwords.txt"
    

五、扩展限制与解决方案

现有限制

  1. 仅在校验密码更改时生效
  2. 检查规则相对简单
  3. 不支持正则表达式等复杂规则

增强方案

方案1:使用pgcrypto扩展+触发器

CREATE OR REPLACE FUNCTION check_password_complexity()
RETURNS event_trigger AS $$
BEGINIF tg_tag = 'ALTER ROLE' THEN-- 从pg_event_trigger_ddl_commands()获取密码-- 添加自定义复杂度检查逻辑END IF;
END;
$$ LANGUAGE plpgsql;CREATE EVENT TRIGGER enforce_password_policy 
ON ddl_command_end 
WHEN TAG IN ('ALTER ROLE') 
EXECUTE FUNCTION check_password_complexity();

方案2:集成CrackLib

  1. 安装依赖:

    apt-get install libcrack2-dev  # Debian/Ubuntu
    yum install cracklib-devel     # RHEL/CentOS
    
  2. 修改passwordcheck.c使用CrackLib:

    #include <crack.h>// 在检查函数中添加
    if (FascistCheck(password, CRACKLIB_DICTPATH) != NULL) {errmsg("password fails dictionary check");
    }
    

六、与认证延迟结合使用

# 组合安全配置示例# passwordcheck
passwordcheck.min_length = 10
passwordcheck.mixed_case = on# auth_delay
auth_delay.milliseconds = 3000
auth_delay.failure_count = 5# pg_hba.conf
hostssl all all all scram-sha-256

七、企业级密码策略实现

对于需要符合合规性要求(如PCI DSS、GDPR)的环境:

  1. 使用LDAP集成

    # postgresql.conf
    pam_service_name = 'postgresql-ldap'# /etc/pam.d/postgresql-ldap
    auth required pam_ldap.so
    password required pam_cracklib.so retry=3 minlen=15 difok=3
    
  2. 商业扩展方案

    • Cybertec Passwordcheck Plus
    • EnterprisedB Advanced Password Policy

八、监控与审计

  1. 记录密码更改事件

    CREATE TABLE password_change_audit (username text,change_time timestamp,client_ip text
    );CREATE OR REPLACE FUNCTION log_password_change()
    RETURNS event_trigger AS $$
    BEGININSERT INTO password_change_auditVALUES (current_user, now(), inet_client_addr());
    END;
    $$ LANGUAGE plpgsql;CREATE EVENT TRIGGER password_audit
    ON ddl_command_end WHEN TAG IN ('ALTER ROLE')
    EXECUTE FUNCTION log_password_change();
    
  2. 定期检查弱密码

    # 使用pg_shadow和自定义检查脚本
    psql -c "SELECT usename FROM pg_shadow" | while read user; doif check_weak_password.sh $user; thenecho "Weak password found for $user"fi
    done
    

passwordcheck 提供了基础的密码策略实施能力,对于大多数环境已经足够。对于更高安全要求的场景,建议通过自定义扩展或集成外部认证系统来增强功能。

相关文章:

  • 【开源工具】超全Emoji工具箱开发实战:Python+PyQt5打造跨平台表情管理神器
  • SOC-ESP32S3部分:27-设备OTA
  • Ethernet/IP转DeviceNet网关:驱动大型矿山自动化升级的核心纽带
  • 【C++高级主题】多重继承下的类作用域
  • LeetCode第245题_最短单词距离III
  • 超临界二氧化碳再热再压缩布雷顿循环建模与先进控制
  • 704. 二分查找 (力扣)
  • 力扣HOT100之多维动态规划:1143. 最长公共子序列
  • 批量大数据并发处理中的内存安全与高效调度设计(以Qt为例)
  • 总览四级考试
  • Mac电脑_钥匙串操作选项变灰的情况下如何删除?
  • KEYSIGHT是德科技 E5063A 18G ENA系列网络分析仪
  • 电工基础【5】简单的电路设计接线实操
  • Python趣学篇:Pygame重现经典打砖块游戏
  • 微软Build 2025:Copilot Studio升级,解锁多智能体协作未来
  • Kotlin List 操作全面指南
  • 实现购物车微信小程序
  • Blocked aria-hidden on an element because its descendant retained focus.
  • 【Node.js 深度解析】npm install 遭遇:npm ERR! code CERT_HAS_EXPIRED 错误的终极解决方案
  • 美尔斯通携手北京康复辅具技术中心开展公益活动,科技赋能助力银龄健康管理
  • 网站图片如何做水印/精品成品网站源码
  • 外贸网站模板哪里下载/推广的软件
  • 做网站免费搭建/石家庄百度seo代理
  • 赣州培训学做网站/知名品牌营销案例100例
  • 郑州网站建设及托管/全国疫情最新名单
  • 在屈臣氏做网站运营/青岛网站建设方案优化