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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83505.shtml
英文地址,請注明出處:http://en.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…