Socket
Book a DemoInstallSign in
Socket

pg-password-util

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pg-password-util

Client-side encoding of PostgreSQL user passwords for use in CREATE USER and ALTER USER

latest
Source
npmnpm
Version
1.0.0
Version published
Maintainers
1
Created
Source

pg-password-util

NPM

Overview

Utility library for password encoding for PostgreSQL.

This solves the problem of plaintext passwords appearing in server logs by replacing:

ALTER USER app PASSWORD 'Super Duper Secret!'

With the password encoded client side:

ALTER USER app PASSWORD 'SCRAM-SHA-256$4096:M1A3zTFR9TzaX5NuvytilQ==$TZtMCtrZ8wkkZVkS7vursem77PsBqthl8GqkPohscJw=:POfEEJ9BOrm6upeAFKU3awWqMg+kKYXyPOG5E5tuhJc='

That hashed value does not contain the plaintext of the password and matches how PostgreSQL stores the value in pg_shadow.

Install

$ npm install pg-password-util

Dependencies

The only direct dependency is pg-format used to escape literals and identifiers.

The ALTER USER helpers accept a client argument that must provide the same signature as pg.Client (i.e. the client from the pg node-postgres driver). It's not a direct dependency of this module though.

Features

  • Encoding passwords using SCRAM-SHA-256 (recommended)
  • Encoding passwords using md5 (for legacy systems)
  • Generating SQL to change a user's password
  • Inferring the password_encryption from the target database

Usage

Generate SQL for an ALTER USER to change a password

import { genAlterUserPasswordSql } = require('pg-password-util');

const sql = genAlterUserPasswordSql({
    username: 'app',
    password: 'my-new-secret-password',
    passwordEncryption: 'scram-sha-256',
});

Generate encoded password for use in a custom CREATE USER statement

import { encodeScramSha256 } = require('pg-password-util');
import * as pgFormat from 'pg-format';

const encodedPassword = encodeScramSha256({
    password: 'my-new-secret-password',
    iterations: 10000,
});
const sql = pgFormat('CREATE USER app PASSWORD %L LOGIN', encodedPassword);

Change a user's password

import { alterUserPassword } = require('pg-password-util');

// client is a pg.Client
await alterUserPassword(client, {
    username: 'app',
    password: 'my-new-secret-password',
});

Building and Testing

To build the module run:

$ make

Testing requires a PostgreSQL database. You can start one in the foreground via:

$ bin/postgres-server

Then, to run the tests run:

$ make test

License

ISC. See the file LICENSE.

Keywords

pg

FAQs

Package last updated on 05 Jan 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.