如何在维护脚本中包含用户“postgres”的密码?

如何在维护脚本中包含用户“postgres”的密码?

我正在设置一个 cron 作业来对 postgresql 数据库进行一些例行维护。脚本如下:

#!/bin/sh

dbname="dbname"
username="postgres"
psql -d $dbname -U $username << EOF
delete from links_link where submitted_on > now() - interval'4 days';
EOF

但是,当通过 crontab 运行时,这会失败,因为我没有提供用户的密码postgres

我的问题是:如何在 shell 脚本中包含用户 postgres 的密码?这样可以让我快速启动并运行。其次,如何通过不必在脚本中明确添加密码来提高安全性?如果有人以前设置过这种东西,非常欢迎分享他们的经验。提前致谢。

答案1

您可能想要切换到(或允许)ident auth,然后创建一个具有相同名称的本地系统用户。然后,您只需以该用户的身份运行该脚本,它就会以相同的用户身份登录到 postgres。

https://www.postgresql.org/docs/9.0/static/auth-methods.html
https://www.postgresql.org/docs/9.0/static/auth-pg-hba-conf.html

因此在 pg_hba.conf 中类似这样的内容:

本地数据库名称某个用户标识

然后重新启动 postgres,您就可以 su - someuser 并运行脚本。这比“local all all tr​​ust”更安全,后者是默认设置,允许所有本地用户无条件连接到任何数据库。

答案2

看看这里的类似帖子:Postgresql:使用密码编写 psql 执行脚本

总体上可以接受的答案(可能适用于或不适用于您的 Postgres 版本)是使用 PGPASSWORD 环境变量,如下所示:

PGPASSWORD=[your password] psql -Umyuser < myscript.sql

编辑:似乎您尝试过但不起作用。您看过我发送的链接了吗?有几个选项,请查看配置文件的资源pg_hba.confhttps://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html,或者查看.pgpass文件:https://www.postgresql.org/docs/9.3/static/libpq-pgpass.html

如果您尝试使用pg_hba.conf,则似乎使用auth-method带有trust正确配置的用户的,您将为脚本允许访问,如下所示:

当指定信任身份验证时,PostgreSQL 假定任何可以连接到服务器的人都有权使用他们指定的任何数据库用户名(甚至是超级用户名)访问数据库。当然,在数据库和用户列中设置的限制仍然适用。仅当对与服务器的连接具有足够的操作系统级保护时才应使用此方法。

相关内容