disable_set_password 0.0.1

This Release
disable_set_password 0.0.1
Date
Status
Stable
Abstract
disable CREATE/ALTER USER ... PASSWORD for non encrypted password
Released By
pifor
License
PostgreSQL
Resources
Special Files
Tags

Extensions

disable_set_password 0.0.1
disable CREATE/ALTER USER ... PASSWORD for non encrypted password

README

disable_set_password

disable_set_password is a PostgreSQL module which forbids usage of clear password in CREATE USER and ALTER USER statements. This is a workaround for PostgreSQL default behavior that might display non encrypted passwords in PostgreSQL logs for example if log_statement is set to àll.

Note that disable_set_password is not an extension because it does not install any SQL object: it only loads new C routines in the PostgreSQL server.

When disable_set_passwordreports an error, log_min_messages is temporarily changed to avoid PostgreSQL to log the error message with the corresponding password.

Installation

Compiling, Installing and testing with PGXS

This module can be built using the standard PGXS infrastructure for example with pgenv :

git clone https://github.com/pierreforstmann/disable_set_password.git
cd disable_set_password
export USE_PGXS=1
make
make install

This module must be loaded at server level with shared_preload_libraries parameter:

shared_preload_libraries = 'disable_set_password'

Validated PostgreSQL versions

This extension has been validated with PostgreSQL 14, 15, 16, 17, and 18.

Examples

pierre=# create user test password 'abc123';
ERROR:  CREATE USER ... PASSWORD is not allowed with non encrypted password.
pierre=# alter user test password 'abc123';
ERROR:  ALTER USER ... PASSWORD is not allowed with non encrypted password: try \password.

You can still create accounts without passwords and use psql \password command to change password: (provided that pg_hba.conf allows local connections in trust mode):

pierre=# create user test;
CREATE ROLE
pierre=# 
$ psql -U test postgres
psql (18.6)
Type "help" for help.

postgres=> \password
Enter new password for user "test": 
Enter it again: 
postgres=>