为了账号安全,请及时绑定邮箱和手机立即绑定

使用不带密码的psql命令运行批处理文件

使用不带密码的psql命令运行批处理文件

qq_笑_17 2019-08-19 16:45:58
使用不带密码的psql命令运行批处理文件我试图psql使用批处理脚本执行此命令:psql --host=localhost --dbname=<dbname> --port=<Port Number>      --username=<dbuser> --file=C:\PSQL_Script.txt --output=C:\PSQL_Output.txt问题是每次执行批处理脚本时都要求输入密码。如何通过批处理文件密码参数?
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

继续阅读,最好的选择。但我们首先澄清一些事情。

只有静音密码请求

如果您的问题只是密码提示,您可以将其静音。我在这里引用手册:

-w
--no-password

永远不要发出密码提示。如果服务器需要密码验证,并且其他方式(例如.pgpass文件)无法使用密码,则连接尝试将失败。此选项在没有用户输入密码的批处理作业和脚本中非常有用。(......)

您可能不需要密码

通常这是不必要的。默认数据库超级用户postgres通常对应于同名的系统用户。psql如果使用身份验证方法peeridentpg_hba.conf文件中设置,则从此帐户运行不需要密码。你可能有这样的一行:

local    all    postgres    peer

通常还有:

local    all    all         peer

这意味着,每个本地用户都可以作为没有密码的同名数据库用户登录到所有数据库。
但是,这里存在一种常见的误解。再次引用:

仅在本地连接上支持此方法。

大胆强调我的。
您正在连接localhost,这不是“本地连接”,即使它中包含“本地”一词。它是到127.0.0.1的TCP / IP连接。localhost上的维基百科:

在现代计算机系统上,localhost作为主机名127.0.0.0/8,通常127.0.0.1::1在IPv6中转换为(环回)网络块中的IPv4地址。

本地连接的简单解决方案

省略该参数-hpsql调用。再次引用手册psql

如果省略主机名,psql将通过Unix域套接字连接 到本地主机上的服务器,或通过TCP / IP连接到localhost没有Unix域套接字的机器上。

视窗

...没有Unix域套接字,pg_hba.conf开头的行local不适用于Windows。在Windows上localhost,默认情况下连接通过,这将我们带回到开始。

如果您的安全要求不严格,您可以通过localhost以下方式信任所有连接:

host    all    all    127.0.0.1/32     trust

我只会关闭远程连接进行调试。为了更安全,您可以在Windows上使用SSPI身份验证。将此行添加到pg_hba.conf“本地”连接:

host    all    all    127.0.0.1/32     sspi

如果你确实需要密码

可以设置环境变量,但不建议这样做,尤其是对于Windows。手册:

PGPASSWORD行为与密码连接参数相同。出于安全原因,不建议使用此环境变量,因为某些操作系统允许非root用户通过ps查看进程环境变量; 而是考虑使用该~/.pgpass文件(参见第32.15节)。

手册psql

conninfo字符串是指定连接参数的替代:

 $ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"

或者使用URI代替数据库名称:

 $ psql postgresql://myuser:secret_pw@localhost:5432/mydb?sslmode=require

密码文件

但通常最好设置一个.pgpass文件,而不是将密码放入脚本文件中。
请仔细阅读本手册中的简短章节。特别要注意这里......

主机名localhost匹配来自本地计算机的TCP(主机名localhost)和Unix域套接字(pghost空或默认套接字目录)连接。

确切的路径取决于系统。此文件可以存储多个角色和端口组合(数据库集群)的密码:

localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd...

Windows机器上查找以下文件:

%APPDATA%\postgresql\pgpass.conf

%APPDATA%通常解析为:C:\Documents and Settings\My_Windows_User_Name\Application Data\


查看完整回答
反对 回复 2019-08-19
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

我有同样的问题:

psql -hlocalhost -d<myDB> -U<myUser>

总是提示我输入密码。正如@Erwin解释的那样,因为它-hlocalhost是通过TCP连接而不是通过Unix域套接字(基于Unix的操作系统)。所以,即使您已将自己配置local为受信任的:

local   all    all                     trust

它仍然会提示输入密码。因此,为了配置-hlocalhost通过TCP工作,我必须配置hostfor localhost地址,如下所示:

host    all    all    127.0.0.1/32     trust
host    all    all    ::1/128          trust

但这对我不起作用。我必须做的是将两者结合起来:

host    all    all    localhost        trust

一些额外的读数:


查看完整回答
反对 回复 2019-08-19
  • 3 回答
  • 0 关注
  • 1098 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信