3.3.4.5. 更改密码
密码是镜像配置的一部分,因此唯一支持的为数据库用户(POSTGRESQL_USER
)和 postgres 管理员用户更改密码的方法是分别更改环境变量 POSTGRESQL_PASSWORD
和 POSTGRESQL_ADMIN_PASSWORD
。
您可以通过在 web 控制台中查看 pod 或部署配置,或通过 CLI 列出环境变量来查看当前的密码:
$ oc set env pod <pod_name> --list
通过 SQL 语句或者通过环境变量更改数据库密码会导致变量中保存的值与实际密码不匹配。每当数据库容器启动时,它会将密码重置至环境变量中存储的值。
要更改这些密码,使用 oc set env
命令为相关的部署配置更新一个或多个所需的环境变量。如果多个部署配置使用这些环境变量,例如从模板创建应用程序时,您必须更新每个部署配置上的变量,以便密码可在所有方面同步。这可以在同一命令中完成:
$ oc set env dc <dc_name> [<dc_name_2> ...] \ POSTGRESQL_PASSWORD=<new_password> \ POSTGRESQL_ADMIN_PASSWORD=<new_admin_password>
根据您的应用程序,应用程序的其它部分可能还会有其他密码的环境变量,它们也应该更新以匹配。例如,前端 pod 中可能会有一个更通用的 DATABASE_USER
变量,该变量应该与数据库用户的密码匹配。确保每个应用程序正在同步所有必需的环境变量,否则您的 pod 可能无法在触发时重新部署。
如果您 配置更改触发器,更新环境变量会触发数据库服务器的重新部署。否则,您必须手动启动新的部署以应用密码更改。
要验证新密码是否有效,首先请打开一个远程 shell 会话到正在运行的 PostgreSQL pod:
$ oc rsh <pod>
在 bash shell 中验证数据库用户的新密码:
bash-4.2$ PGPASSWORD=<new_password> psql -h postgresql $POSTGRESQL_DATABASE $POSTGRESQL_USER -c "SELECT * FROM (SELECT current_database()) cdb CROSS JOIN (SELECT current_user) cu"
如果正确修改了密码,您应该可以看到类似如下的表:
current_database | current_user ------------------+-------------- default | django (1 row)
在 bash shell 中验证 postgres 管理员用户的新密码:
bash-4.2$ PGPASSWORD=<new_admin_password> psql -h postgresql $POSTGRESQL_DATABASE postgres -c "SELECT * FROM (SELECT current_database()) cdb CROSS JOIN (SELECT current_user) cu"
如果正确修改了密码,您应该可以看到类似如下的表:
current_database | current_user ------------------+-------------- default | postgres (1 row)