使用 SQL 脚本和环境变量在 Postgres 中安全地创建角色

Eug*_*lik 2 passwords postgresql

将密码安全地传递到 Postgres SQL 脚本以创建 DB ROLE 的最佳方法是什么?

Eug*_*lik 7

在开发自动化 Postgres 架构部署期间,我尝试找到安全创建 dbuser 密码、将其传递给部署脚本并将其存储在秘密管理器中的方法,无论是哪一种。

最难的部分是 SQL 脚本中环境变量的传递和使用。我发现的方式看起来不错而且相当安全。

使用 openssl 生成的密码:

export ROLE_PASSWORD=$(openssl rand -base64 12)
Run Code Online (Sandbox Code Playgroud)

psql命令如下:

psql -v password_to_save=$ROLE_PASSWORD -a -h localhost -d postgres -U postgres -f test.sql
Run Code Online (Sandbox Code Playgroud)

SQL 脚本:

\set ON_ERROR_STOP on
-- \echo :password_to_save

CREATE ROLE dbuser WITH
    LOGIN
    NOSUPERUSER
    NOCREATEDB
    NOCREATEROLE
    NOINHERIT
    NOREPLICATION
    CONNECTION LIMIT -1
    PASSWORD :'password_to_save';
Run Code Online (Sandbox Code Playgroud)

结果,密码在实施过程中一直受到保护。