我正在设置一个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的密码? 这会让我起来,跑得快。 其次,如何通过不必在脚本中明确添encryption码来提高安全性? 如果有人以前设置过这种东西,他们的经验是最受欢迎的。 提前致谢。
您可能希望切换到(或允许)ident auth,然后使用相同的名称创build本地系统用户。 然后,您可以以该用户的身份运行该脚本,并使用该用户login到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里有这样的东西:
本地dbname someuser标识
然后重新启动postgres,你可以su – someuser并运行脚本。 这比“本地所有信任”更安全一些,这是默认的,并允许所有本地用户无条件地连接到任何数据库。
看看这里的一个类似的post: Postgresql:脚本psql执行与密码
总体接受的答案(可能会或可能不适用于您的Postgres版本)是使用PGPASSWORD环境variables,如下所示:
PGPASSWORD=[your password] psql -Umyuser < myscript.sql
编辑:似乎就像你试过,这没有奏效。 你看过我发送的链接吗? 有几个声明的选项,请检查configurationpg_hba.conf文件的资源: https : //www.postgresql.org/docs/current/static/auth-pg-hba-conf.html ,或者查看.pgpass文件: https : .pgpass
如果您尝试使用pg_hba.conf ,那么看起来使用trust的auth-method和正确configuration用于脚本的用户将被允许访问,如下所述:
当指定信任authentication时,PostgreSQL假设任何能够连接到服务器的人都有权使用他们指定的任何数据库用户名(即使是超级用户名)来访问数据库。 当然,数据库和用户列中的限制仍然适用。 只有在服务器连接有足够的操作系统级保护时才能使用此方法。