Mohammad, Please find below

PostgreSQL 17 does not provide comprehensive, built-in enterprise password 
policy enforcement out of the box. Core PostgreSQL deliberately delegates 
advanced identity and credential lifecycle management to external identity 
providers or specialized extensions.

Password Complexity & Min Length - Partial / Minimal - Not natively 
configurable in core SQL syntax. Without modules, passwords of any length or 
composition are accepted.

Password Expiration - Partial - Supported via the VALID UNTIL 'timestamp' 
clause during CREATE ROLE or ALTER ROLE. However, there is no automatic 
expiration interval
(e.g., forcing a rotation every 90 days); administrators must explicitly set a 
static date for each role.

Password History & Reuse Prevention - No - Core PostgreSQL does not store 
previous password hashes or maintain password history. A user can cycle back to 
an old password immediately.

Account Lockout on Failed LoginsNoFailed authentication attempts do not trigger 
an automatic account lockout.

Capabilities and Limitations of passwordcheck

The passwordcheck module is a sample contrib library included with PostgreSQL 
distributions that hooks into check_password_hook.

     *
Enforces basic complexity: requires passwords to contain a mix of letters and 
non-letters and rejects passwords identical to the username or reversed 
username.
     *
In PostgreSQL 17, it enforces a hard-coded minimum length of 8 characters (the 
configurable passwordcheck.min_password_length parameter was introduced in 
PostgreSQL 18).
     *
Can optionally link to CrackLib, but this requires rebuilding the module from 
source due to licensing.
     *
It does not manage password expiration intervals, enforce password rotation 
policies, maintain password history, or prevent password reuse.
     *
It has no awareness of authentication events, meaning it cannot track failed 
logins or perform account lockouts.
     *
It only evaluates passwords sent in clear text during CREATE ROLE or ALTER ROLE 
statements; pre-hashed passwords (such as SCRAM-SHA-256 strings generated by 
client tools) bypass passwordcheck completely.

PostgreSQL Extensions
If you must enforce policies within local database accounts, you will need 
third-party extensions:

  *
credcheck / password_profile: Specialized extensions that implement password 
history tracking, reuse blocking, minimum change intervals, and automatic 
failed-attempt lockouts via PostgreSQL's internal C hooks (check_password_hook 
and ClientAuthentication_hook).
  *
auth_delay (Bundled Contrib): Adds a configurable millisecond delay (e.g., 
500ms–2000ms) on failed logins to slow down brute-force attacks, though it does 
not lock the account.

Regards
Yuvaraj Ganapathy
+1 214-460-3006 (Mobile)
________________________________
From: Mohammad Abu Ata <[email protected]>
Sent: Monday, October 26, 2026 05:43
To: [email protected] <[email protected]>
Cc: Abdelrahman Mansour <[email protected]>; Ahmad Y Al Kandari 
<[email protected]>; Mahmoud Al-Muhtaseb <[email protected]>
Subject: PostgreSQL 17 — Native Password Policy Support


Hello PostgreSQL Community,

We are evaluating PostgreSQL 17 for enterprise use. Could you please confirm 
whether PostgreSQL provides built-in password policy enforcement without 
third-party extensions?

Specifically, we need to know whether PostgreSQL natively supports:
- Password complexity and minimum length
- Password expiration
- Password history and prevention of password reuse
- Account lockout after repeated failed login attempts

We are aware of the `passwordcheck` module. Does it provide these capabilities, 
or are additional extensions or external authentication systems required?

Thank you for your clarification.

Best Regards,

Mohammad Abuata
Senior Software Engineer

[Logo]<https://urldefense.com/v3/__https://www.leading-point.com/__;!!GiDqg7uCaixV!ShbeL6Ho5P9W8jo2ueG-2mCc9iVLOUp8M1Ljk2qqGFmjUnl8fcND7MK63ASYPFvT1h2TQhbO-5z_RWQ0v2jVFokgAwd2$>

Leading Point Software

90, Wasfi At-Tall Street, Amman

T: +96265604808<tel:+96265604808>

M: +962797639855<tel:+962797639855>

M: +96879101447<tel:+962797639855>

www.leading-point.com<https://urldefense.com/v3/__http://www.leading-point.com/__;!!GiDqg7uCaixV!ShbeL6Ho5P9W8jo2ueG-2mCc9iVLOUp8M1Ljk2qqGFmjUnl8fcND7MK63ASYPFvT1h2TQhbO-5z_RWQ0v2jVFk7Z4NES$>

[Facebook 
icon]<https://urldefense.com/v3/__https://www.facebook.com/LeadingPoint/__;!!GiDqg7uCaixV!ShbeL6Ho5P9W8jo2ueG-2mCc9iVLOUp8M1Ljk2qqGFmjUnl8fcND7MK63ASYPFvT1h2TQhbO-5z_RWQ0v2jVFj2DmDH1$>
   [LinkedIn icon] 
<https://urldefense.com/v3/__https://www.linkedin.com/company/leading-point/__;!!GiDqg7uCaixV!ShbeL6Ho5P9W8jo2ueG-2mCc9iVLOUp8M1Ljk2qqGFmjUnl8fcND7MK63ASYPFvT1h2TQhbO-5z_RWQ0v2jVFhbqOIfe$>
    [Twitter icon] 
<https://urldefense.com/v3/__https://twitter.com/leadingpointcom__;!!GiDqg7uCaixV!ShbeL6Ho5P9W8jo2ueG-2mCc9iVLOUp8M1Ljk2qqGFmjUnl8fcND7MK63ASYPFvT1h2TQhbO-5z_RWQ0v2jVFp8bMaYA$>
    [instagram icon] 
<https://urldefense.com/v3/__https://www.instagram.com/leadingpoint/__;!!GiDqg7uCaixV!ShbeL6Ho5P9W8jo2ueG-2mCc9iVLOUp8M1Ljk2qqGFmjUnl8fcND7MK63ASYPFvT1h2TQhbO-5z_RWQ0v2jVFmdXbKFt$>

[Banner]<https://urldefense.com/v3/__https://www.leading-point.com/__;!!GiDqg7uCaixV!ShbeL6Ho5P9W8jo2ueG-2mCc9iVLOUp8M1Ljk2qqGFmjUnl8fcND7MK63ASYPFvT1h2TQhbO-5z_RWQ0v2jVFokgAwd2$>

Reply via email to