postgresql – 使用psql命令运行批处理文件,而不需要密码

postgresql – 使用psql命令运行批处理文件,而不需要密码,第1张

概述我试图使用批处理脚本来执行这个psql命令: psql --host=localhost --dbname=<dbname> --port=<Port Number> --username=<dbuser> --file=C:\PSQL_Script.txt --output=C:\PSQL_Output.txt 问题是每当我执行批处理脚本时都要求密码。如何通过批处理文件进行密码参数? 我试图使用批处理脚本来执行这个psql命令:
psql --host=localhost --dbname=<dbname> --port=<Port Number>     --username=<dbuser> --file=C:\Psql_Script.txt --output=C:\Psql_Output.txt

问题是每当我执行批处理脚本时都要求密码。如何通过批处理文件进行密码参数?

关于无密码登录的问题不断d出。继续阅读,最好的选择是最后的。但是让我们首先澄清几件事情。

只能静音密码请求

如果您的问题只是密码提示,您可以将其静音。我引用the manual here:

-w
--no-password

Never issue a password prompt. If the server requires password authentication and
a password is not available by other means such as
a .pgpass file,the connection attempt will fail. This option can be
useful in batch jobs and scripts where no user is present to enter a password. (…)

你可能不需要密码

通常这是不必要的。默认数据库超级用户postgres通常对应于同名的系统用户。如果在pg_hba.conf文件中设置了authentication method peer或IDent,则从该帐户运行psql不需要密码。你可能有这样的一行:

local    all    postgres    peer

通常也是:

local    all    all         peer

这意味着,每个本地用户都可以登录到具有相同名称的数据库用户的所有数据库,而无需密码。
然而,这里有一个常见的误解。 Quoting again:

This method is only supported on local connections.

大胆强调我的
您正在连接到本地主机,这不是“本地连接”,即使它具有单词“本地”。这是一个到127.0.0.1的TCP / IP连接。 Wikipedia on localhost:

On modern computer systems,localhost as a hostname translates to an
IPv4 address in the 127.0.0.0/8 (loopback) net block,usually 127.0.0.1,or ::1 in IPv6.

本地连接的简单解决方案

从psql调用中省略参数-h。再次报价the manual on psql

If you omit the host name,psql will connect via a Unix-domain socket
to a server on the local host,or via TCP/IP to localhost on machines
that don’t have Unix-domain sockets.

视窗

…没有Unix域套接字,从本地开始的pg_hba.conf行不适用于windows。在windows上,默认情况下通过localhost连接,这使我们重新开始。

如果您的安全要求较为松散,则可以通过localhost信任所有连接:

host    all    all    127.0.0.1/32     trust

我只会用远程连接断开调试。对于更多的安全性,您可以在windows上使用SSPI authentication。将此行添加到pg_hba.conf中用于“本地”连接:

host    all    all    127.0.0.1/32     sspi

如果您确实需要密码

您可以设置一个环境变量,但这是不鼓励的,特别是对于windows。 The manual:

PGPASSWORD behaves the same as the 07007 connection
parameter. Use of this environment variable is not recommended
for security reasons,as some operating systems allow non-root
users to see process environment variables via ps; instead
consIDer using the ~/.pgpass file (see 07008).

The manual on 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 file,而不是将密码放入脚本文件。
阅读short chapter in the manual carefully.特别是请注意这里…

A host name of localhost matches both TCP (host name localhost) and Unix domain socket (pghost empty or the default socket directory) connections coming from the local machine.

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

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

在windows机器上查找文件:

C:\documents and Settings\My_windows_User_name\Application Data\postgresql
总结

以上是内存溢出为你收集整理的postgresql – 使用psql命令运行批处理文件,而不需要密码全部内容,希望文章能够帮你解决postgresql – 使用psql命令运行批处理文件,而不需要密码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1170919.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存