导语

PostgreSQL 用户密码的设定通常有两种。

一是创建用户时直接指定用户密码。

create user shawnyan password 'test';

二是创建用户后更新用户密码。

alter user shawnyan password 'test';

PostgreSQL 将用户信息存储在系统表 pg_catalog.pg_authid 中。

select rolname as user, left(rolpassword,20) as passwd
from pg_catalog.pg_authid
where rolname = 'shawnyan';
   user   |        passwd
----------+----------------------
 shawnyan | SCRAM-SHA-256$4096:E
(1 row)

接下来将基于 PostgreSQL 16.2 介绍扩展 pgpasswd

postgres=# select version();
                                                      version
-------------------------------------------------------------------------------------------------------------------
 PostgreSQL 16.2-ShawnYan on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.4.1 20230605 (Red Hat 11.4.1-2), 64-bit
(1 row)

pgpasswd

类似于 Linux 中的 passwd 命令,使用 pgpasswd 可以从 Linux 命令行更改 PostgreSQL 帐户密码,无需输入任何 SQL 语句。

pgpasswd 是 PostgreSQL 扩展和独立可执行文件(无需在数据库中安装任何内容,无需运行 CREATE EXTENSION)。

下载源码:

git clone https://github.com/shawn0915/pgpasswd.git

目录结构比较简洁:

[postgres@rocky9 pgpasswd]$ ls
LICENSE  Makefile  META.json  pgpasswd.c  README.md

直接编译安装即可:

[postgres@rocky9 pgpasswd]$ make
gcc -I/opt/pgsql/include -I/opt/pgsql/include/server -c pgpasswd.c -Wall
gcc -I/opt/pgsql/include -L/opt/pgsql/lib -lpq -o pgpasswd pgpasswd.o
[postgres@rocky9 pgpasswd]$ make install
install    pgpasswd /opt/pgsql/bin

可以看到将编译好的二进制文件 pgpasswd 安装到了 bin 目录下。

使用方式:

需要指定参数 -U 需要修改密码的用户名, -h 数据库连接地址, -p 数据库端口, -d postgres 系统库。
可以加 -v 参数打印更多信息。

[postgres@rocky9 ~]$ pgpasswd -U shawnyan -h 127.1 -p 5432 -d postgres -v
Password:
PG libpq version: 160002
conninfo: user=shawnyan host=127.1 port=5432 dbname=postgres password=test  
PG server version: 160002
New password:
Confirm new password:
stmt=ALTER USER shawnyan PASSWORD 'test1' 
Password changed.

用新密码测试连接:

[postgres@rocky9 ~]$ psql -U shawnyan -h 127.1
Password for user shawnyan: 
psql (16.2-ShawnYan)
Type "help" for help.

postgres=> 

到此,PG 扩展 pgpasswd 介绍到这里,欢迎“品尝”。

-- END --

本文由mdnice多平台发布


严少安
6 声望3 粉丝

DBA