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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/83505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言学习-->编译器安装

Go语言学习–&#xff1e;编译器安装 Go采用的是UTF-8编码的文本文件存放源代码&#xff0c;理论上使用任何一款文本编辑器都可以做Go语言开发。这里推荐使用VS Code和Goland。 VS Code是微软开源的编辑器&#xff0c;而Goland是jetbrains出品的付费IDE。我们这里使用VS Code …

基于Android的一周穿搭APP的设计与实现 _springboot+vue

开发语言&#xff1a;Java框架&#xff1a;springboot AndroidJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat12开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.6 系统展示 APP登录 A…

井字棋——ai PK you

挑战人工智能&#xff0c;体验经典井字棋的对决&#xff01;AI 拥有强大的逻辑计算能力&#xff0c;每一步都经过精准推演。你能战胜它吗&#xff1f;还是会被 AI 彻底碾压&#xff1f; 特点&#xff1a; 智能 AI&#xff0c;难度可调 极简界面&#xff0c;快速上手 实时胜负…

关于easyx头文件

一、窗口创建 &#xff08;1&#xff09;几种创建方式 #include<easyx.h>//easyx的头文件 #include<iostream> using namespace std;int main() {//创建一个500*500的窗口//参数为&#xff1a;长度&#xff0c;宽度&#xff0c;是否显示黑框&#xff08;无参为不…

【学习记录】Django Channels + WebSocket 异步推流开发常用命令汇总

文章目录 &#x1f4cc; 摘要&#x1f9f0; 虚拟环境管理✅ 创建虚拟环境✅ 删除虚拟环境✅ 激活/切换虚拟环境 &#x1f6e0;️ Django 项目管理✅ 查看 Django 版本✅ 创建 Django 项目✅ 创建 Django App &#x1f4ac; Channels 常用操作✅ 查看 Channels 版本 &#x1f50…

Java线程状态及其流转

在Java编程中&#xff0c;线程是一种重要的并发实体。为了更好地理解和管理多线程应用程序&#xff0c;我们需要清楚线程的不同状态及其流转机制。本文将详细介绍Java中线程的几种主要状态以及它们之间的转换关系。 一、线程状态概述 Java线程的生命周期有多个状态&#xff0…

LabVIEW双光子显微镜开发

基于LabVIEW 开发高性能双光子显微镜系统&#xff0c;聚焦于生物样本深层成像与纳米材料三维表征。实现了超快激光控制、多维数据采集与实时图像重建。系统采用飞秒激光光源与高精度振镜扫描模块&#xff0c;结合 LabVIEW 的 FPGA 实时控制能力&#xff0c;可对活体组织、荧光纳…

数据库操作-MySQL-4(JDBC编程)

JDBC&#xff1a;通过Java代码操作mysql数据库&#xff0c;数据库会提供一些API供我们调用 MySQL、Oracle、等API有差异&#xff0c;但是Java统一了所有接口&#xff0c;即JDBC&#xff1b; 原始api-驱动包&#xff08;类似转接头&#xff09;-统一的api-Java 驱动包&#xff1…

windows修改跃点数调整网络优先级

Windows有两个网卡&#xff0c;一个有线网卡&#xff0c;一个无线网卡&#xff0c;通过修改跃点数来调整优先使用的网卡&#xff0c;这种只是众多设置方式中的其中一种设置方式 文档编写时间&#xff1a;2025年6月 1.打开电脑的网络连接 cmd--ncpa.cpl 在cmd中运行ncpa.cpl可…

实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.1 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第10章拟合回归模型10.9节思考题10.1 R语言解题。主要涉及线性回归、回归的显著性、回归系数的置信区间。 vial <- seq(1, 10, 1) Viscosity <- c(160,171,175,182,184,181,188,19…

【深入 LangChain 的 Model I/O】提示设计、模型调用与输出解析全解析

目录 什么是 Model I/O&#xff1f; 一、提示模板&#xff08;PromptTemplate&#xff09; 1.1 什么是提示模板&#xff1f; 1.2 常见提示模板类型 二、模型调用&#xff08;Model Predict&#xff09; 三、输出解析&#xff08;Output Parser&#xff09; 综合示例&…

OD 算法题 B卷【跳格子2】

文章目录 跳格子2 跳格子2 小明和朋友玩跳格子游戏&#xff0c;有n个连续格子组成的圆圈&#xff0c;每个格子有不同的分数&#xff0c;小朋友可以选择从任意格子起跳&#xff0c;但是不能跳连续的格子&#xff0c;不能回头跳&#xff0c;也不能超过一圈&#xff0c;给定一个代…

客户线索商机怎么管?客户线索商机管理工具哪个好?

做销售、搞运营的朋友肯定都有过这种烦恼&#xff1a;每天收到海量客户线索&#xff0c;却不知道从哪条开始跟进&#xff1b;试了好几个管理工具&#xff0c;要么功能太复杂&#xff0c;要么用起来不趁手。其实选对客户线索商机管理工具&#xff0c;就像找到靠谱的 “销售小助手…

008房屋租赁系统技术揭秘:构建智能租赁服务生态

房屋租赁系统技术揭秘&#xff1a;构建智能租赁服务生态 在房地产租赁市场日益活跃的当下&#xff0c;房屋租赁系统成为连接房东与租客的重要数字化桥梁。该系统集成用户管理、房屋信息等多个核心模块&#xff0c;面向管理员、房东和用户三类角色&#xff0c;通过前台展示与后…

SpringBoot 系列之集成 RabbitMQ 实现高效流量控制

系列博客专栏&#xff1a; JVM系列博客专栏SpringBoot系列博客 Spring Boot 2.2.1 集成 RabbitMQ 实现高效流量控制 在分布式系统中&#xff0c;消息队列是实现异步通信、解耦服务的重要组件。RabbitMQ 作为一款成熟的开源消息队列&#xff0c;广泛应用于各类项目中。本文将…

新视讯影视官网入口,影视动漫在线播放网站

新视讯影视是一个免费为广大追剧迷提供在线播放服务的影视平台&#xff0c;深受众多影视爱好者的喜爱。它涵盖了大量免费的VIP电视剧资源、最新上映的大片、好看的综艺节目以及动漫视频&#xff0c;是一个播放速度快、资源多的免费影视网站。用户无需注册或登录&#xff0c;即可…

【使用】【经验】docker 清理未使用的镜像的命令

docker images prune在 Docker 中清理未使用的镜像&#xff08;包括悬空镜像和完全未被引用的镜像&#xff09;&#xff0c;可以使用以下命令&#xff1a; 1. ​删除所有悬空镜像​&#xff08;推荐常用&#xff09; docker image prune​悬空镜像 (dangling images)​​ 是指…

OpenCV CUDA模块图像处理------图像融合函数blendLinear()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数执行 线性融合&#xff08;加权平均&#xff09; 两个图像 img1 和 img2&#xff0c;使用对应的权重图 weights1 和 weights2。 融合公式…

【Typst】6.布局函数

概述 上节我们介绍了文档结构元素的函数&#xff0c;本节介绍一些控制布局使用的函数&#xff0c;掌握他们之后你可以更进一步的控制页面元素的布局。 系列目录 1.Typst概述2.Typst标记语法和基础样式3.Typst脚本语法4.导入、包含和读取5.文档结构元素与函数6.布局函数 对齐…

【音视频】FFmpeg 编码H265

一、概述 实现了读入本地yuv文件&#xff0c;通过libx265编码为H265格式&#xff0c;并存储到本地文件中 二、实现流程 准备文件 在build路径下准备yuv文件 在项目中添加文件参数&#xff0c;输出为h265文件&#xff0c;使用libx265编码 初始化解码器 通过传进来的libx265…