Windows PSQL 命令行:有没有办法允许无密码登录?

问题描述 投票:0回答:10

我的目标是能够在不提示输入密码的情况下启动命令。有什么办法可以从Windows命令行实现这一点吗?在 Linux 中,我觉得我可以将密码发送到标准输入或其他东西,但我不确定是否可以在 Windows 中执行此操作。

谢谢!

windows postgresql
10个回答
30
投票

有两种方法:

  • 设置环境变量 PGPASSWORD 例如
    set PGPASSWORD=yoursecretpassword
  • 使用密码文件
    %APPDATA%\postgresql\pgpass.conf
    ,如文档
  • 中所述

在密码文件(我的位置是 C:\Users\Grzesiek\AppData\Roaming\postgresql\pgpass.conf)中使用以 doc 格式指定的密码。例如,要在本地 5432 服务器上以角色 postgres 连接数据库 postgres,请添加:

localhost:5432:postgres:postgres:12345

我检查了这个,它运行良好(对我来说),但不要使用 127.0.0.1)。


14
投票

另一个方便的选项(特别是如果您的 PG 服务器在您自己的客户端计算机上运行,并且这不会给您带来任何安全问题)是允许在服务器中无需密码登录(“信任”身份验证模式)。

例如,

pg_hba.conf
(在您的 DATA 目录中,典型位置:
C:\Program Files\PostgreSQL\9.0\data\
)中的这一行无需密码即可从本地计算机授予访问权限。

host     all     all     127.0.0.1/32    trust

然后,连接

  psql.exe -h 127.0.0.1 -U postgres -w [YOUR_DB_NAME]

5
投票

我知道这是一个老问题,但对于像我一样的人来说,很难找到适用于 Windows 的解决方案。将其保存在 .bat 文件中,它将起作用(至少对我来说是这样)。将director更改为postres目录,设置环境变量

PGPASSWORD
执行复制命令到csv文件,然后清除环境变量,然后返回根目录。

cd C:\Program Files\PostgreSQL\9.5\bin\

set PGPASSWORD=yourpassword


psql -d databasename -U yourusername -w -c "\COPY (select * from yourtable) TO 'c:/Users/yourdirectory/yourcsvfilename.csv' DELIMITER '|' CSV HEADER;"

set PGPASSWORD=

cd c:\

3
投票

我意识到这个问题现在有点老了,但我相信有一种更好的方法可以在 Windows 上安全、无密码地登录 PostgreSQL - SSPI

  1. 创建本地或域用户帐户并使用相同的名称登录 PostgreSQL。

  2. pg_ident.conf
    中,创建映射:

    # MAPNAME   SYSTEM-USERNAME      PG-USERNAME
    SSPI        username@AUTHORITY   loginname
    

    username 替换为 Windows 用户名(这是域帐户的

    sAMAccountName
    属性),并将 AUTHORITY 替换为计算机名称或短域名。如果您不确定使用什么AUTHORITY,请检查 PostgreSQL 日志文件。对于本地帐户,这将是计算机名称;对于域帐户,它可能是短域名。最后,将 loginname 替换为 PostgreSQL 登录名(为了减少混淆,我建议 usernameloginname 使用相同的名称)。

  3. pg_hba.conf
    中,允许登录;例如:

    # TYPE   DATABASE   USER        ADDRESS        METHOD
    host     all        loginname   127.0.0.1/32   sspi map=SSPI
    host     all        loginname   ::1/128        sspi map=SSPI
    
  4. 如果是域帐户,请为其设置SPN;例如:

    setspn -S POSTGRES/serverfqdn username
    

现在您可以使用指定的用户名登录Windows并运行

psql.exe
等,无需密码。


1
投票

对于那些不需要 .pgpass 文件并希望在单个命令行实例中执行的人来说,这是另一种选择。

set "PGPASSWORD=yourpass" && createdb -h localhost -p 5432 -U postgres new_db_name

我参考了几乎所有与命令行相关的解决方案,最后在 Windows 11 中设置时将

"
包裹在 PGPASSWORD=yourpass 周围。


0
投票

步骤:

第一个环境变量 PGPASSWORD

C:\Windows\system32>设置 PGPASSWORD=clave

之前

psql -d basedatos -U usuario

准备好了,


0
投票

我让它在 Postgres 15 中工作:

psql -U postgres -h 127.0.0.1 -p 54322 -f some_file password=postgres

J


0
投票

如果您能够使用 Powershell,则可以内联设置环境变量,类似于 bash。

这应该有效:

$Env:PGPASSWORD='your-pass'; psql -U postgres

请注意设置变量和实际命令之间的分号,这很重要,因为它们是内联命令,但是两个单独的命令。


0
投票

在Windows下的cmd中你可以输入以下内容:

echo localhost:5432:*:postgres:12345>> %APPDATA%\postgresql\pgpass.conf

(“>>”之前没有任何空格!)

pgpass.conf 的格式是:

hostname:port:database:username:password

前四个字段中的每一个都可以是文字值,或 *,可匹配任何内容


-3
投票

我在此链接上找到了另一个对我有用的有用解决方案。它基本上将

PGPASSWORD
设置在命令的开头,如下所示:

PGPASSWORD=PASSWORD psql YOUR_CODE
© www.soinside.com 2019 - 2024. All rights reserved.