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 加密和网络隔离一起使用。

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

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

相关文章

MyBatis中的@Param注解-如何传入多个不同类型的参数

mybatis中参数识别规则 默认情况下,MyBatis 会按照参数位置自动分配名称:param1, param2, param3, ...或者 arg0, arg1。 // Mapper 接口方法 User getUserByIdAndName(Integer id, String name); 以上接口在XML中只能通过param1或者arg0这样的方式来引用,可读性差。 &l…

DIFY教程第一集:安装Dify配置环境

一、Dify的介绍 https://dify.ai/ Dify 是一款创新的智能生活助手应用&#xff0c;旨在为您提供便捷、高效的服务。通过人工智能技术&#xff0c; Dify 可以实现语音 助手、智能家居控制、日程管理等功能&#xff0c;助您轻松应对生活琐事&#xff0c;享受智慧生活。简约的…

5、Rag基础:RAG 专题

RAG 简介 什么是检索增强生成? 检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。大型语言模型(LLM)用海量数据进行训练,使用数十亿个参数为回答问题、翻译语言和完成句子等任务生成原始输出。在 LLM 本就强…

GAMES202-高质量实时渲染(homework1)

目录 Homework1shadow MapPCF(Percentage Closer Filter)PCSS(Percentage Closer Soft Shadow) GitHub主页&#xff1a;https://github.com/sdpyy1 作业实现:https://github.com/sdpyy1/CppLearn/tree/main/games202 Homework1 shadow Map 首先需要完成MVP矩阵的构造&#xf…

JDK(Ubuntu 18.04.6 LTS)安装笔记

一、前言 本文与【MySQL 8&#xff08;Ubuntu 18.04.6 LTS&#xff09;安装笔记】同批次&#xff1a;先搭建数据库&#xff0c;再安装JDK&#xff0c;后面肯定就是部署Web应用&#xff1a;典型的单机部署。“麻雀虽小五脏俱全”&#xff0c;善始善终&#xff0c;还是记下来吧。…

软件测试之接口测试常见面试题

一、什么是(软件)接口测试? 接口测试&#xff1a;是测试系统组件间接口的一种测试方法 接口测试的重点&#xff1a;检查数据的交换&#xff0c;数据传递的正确性&#xff0c;以及接口间的逻辑依赖关系 接口测试的意义&#xff1a;在较早期开展&#xff0c;在软件开发的同时…

Lua 第11部分 小插曲:出现频率最高的单词

在本章中&#xff0c;我们要开发一个读取并输出一段文本中出现频率最高的单词的程序。像之前的小插曲一样&#xff0c;本章的程序也十分简单但是也使用了诸如迭代器和匿名函数这样的高级特性。 该程序的主要数据结构是一个记录文本中出现的每一个单词及其出现次数之间关系的表。…

软件项目进度管理活动详解

目录 1. 活动定义&#xff08;Activity Definition&#xff09; 2. 活动排序&#xff08;Activity Sequencing&#xff09; 3. 活动资源估算&#xff08;Activity Resource Estimating&#xff09; 4. 活动历时估算&#xff08;Activity Duration Estimating&#xff09; …

docker 国内源和常用命令

Ubuntu | Docker Docs 参考docker官方安装docker # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt…

身份与访问管理(IAM):零信任架构下的认证授权技术与实战

身份与访问管理&#xff08;IAM&#xff09;&#xff1a;零信任架构下的认证授权技术与实战 在网络安全防御体系中&#xff0c;身份与访问管理&#xff08;Identity and Access Management, IAM&#xff09;是守护数字资产的“数字门禁系统”。随着远程办公和多云架构的普及&a…

Maven进阶知识

一、Maven 坐标 &#xff08;一&#xff09;概念 在 Maven 中坐标是构件的唯一标识&#xff0c;其元素包括 groupId、artifactId、version、packaging、classifier。其中 groupId、artifactId、version 是必定义项&#xff0c;packaging 默认为 jar。 &#xff08;二&#x…

网络原理 ——TCP 协议

TCP 报文结构 TCP 头部 20字节&#xff08;无选项&#xff09;&#xff0c;关键字段&#xff1a; 字段长度&#xff08;bit&#xff09;说明源端口16发送方端口目的端口16接收方端口序列号&#xff08;seq&#xff09;32数据字节的编号确认号&#xff08;ack&#xff09;32期…

C#使用sftp远程拷贝文件

需要下载 的包&#xff1a;Core.Renci.SshNet 下载依赖包的时候需要注意版本&#xff0c;高版本的.net环境不支持会用不了&#xff0c;我用的.net5,所以下载的2021.10.2 功能的核心式创建一个SftpClient&#xff0c;并传入所需要的参数&#xff1a;远程IP地址&#xff0c;端口…

文本预处理(NLTK)

1. 自然语言处理基础概念 1.1 什么是自然语言处理 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于…

socket编程基础

上一篇 --- 网络基础概念&#xff08;下&#xff09;https://blog.csdn.net/Small_entreprene/article/details/147320155?fromshareblogdetail&sharetypeblogdetail&sharerId147320155&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link 理…

CSS 解决手机浏览器默认行为(点击出现蓝色背景)

最近写了一个 Web 应用&#xff0c;可以兼容手机端和PC端&#xff0c;在PC端调试的时候没有发现这个问题&#xff0c;但是在手机上或者PC浏览器改成手机模式进行调试的时候就会出现下面这个场景&#xff1a; 这是两个 div&#xff0c;点击的时候&#xff0c;会出现一个蓝色的背…

多模态大语言模型arxiv论文略读(三十八)

Tables as Texts or Images: Evaluating the Table Reasoning Ability of LLMs and MLLMs ➡️ 论文标题&#xff1a;Tables as Texts or Images: Evaluating the Table Reasoning Ability of LLMs and MLLMs ➡️ 论文作者&#xff1a;Naihao Deng, Zhenjie Sun, Ruiqi He, A…

聊聊Spring AI Alibaba的YuQueDocumentReader

序 本文主要研究一下Spring AI Alibaba的YuQueDocumentReader YuQueDocumentReader community/document-readers/spring-ai-alibaba-starter-document-reader-yuque/src/main/java/com/alibaba/cloud/ai/reader/yuque/YuQueDocumentReader.java public class YuQueDocument…

OCR定制识别:解锁文字识别的无限可能

OCR 定制识别是什么&#xff1f; OCR&#xff0c;即光学字符识别&#xff08;Optical Character Recognition&#xff09; &#xff0c;它就像是一个神奇的 “文字翻译器”&#xff0c;能把图片里的文字转化成计算机可编辑的文本。比如&#xff0c;你扫描一份纸质文档成图片&am…

麒麟系统(基于Ubuntu)上使用Qt编译时遇到“type_traits文件未找到”的错误

在麒麟系统&#xff08;基于Ubuntu&#xff09;上使用Qt编译时遇到“type_traits文件未找到”的错误&#xff0c;通常是由于C标准库头文件缺失或项目配置问题导致的。以下是逐步解决方案&#xff1a; 1. 安装C标准库和开发工具 确保系统已安装完整的开发工具链和标准库&#…