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

Windows PSQL command line: is there a way to allow for passwordless login?

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

谢谢!


有两种方法:

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

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

1
localhost:5432:postgres:postgres:12345

我检查了这个并且效果很好(对我来说),但是不要使用127.0.0.1)。


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

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

1
host     ALL     ALL     127.0.0.1/32    trust

然后,连接

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


我知道这是一个老问题,但对于看起来像我的人来说,很难找到适合Windows的解决方案。把它粘在.bat文件中它会起作用(至少对我而言)。将director更改为postres目录,将环境变量PHPASSWORD执行copy命令设置为csv文件,然后清除环境变量,然后返回根目录。

1
2
3
4
5
6
7
8
9
10
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:\

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

  • 使用相同的名称创建本地或域用户帐户和PostgreSQL登录。

  • pg_ident.conf中,创建一个映射:

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

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

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

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

    1
    setspn -S POSTGRES/serverfqdn username
  • 现在,您可以使用指定的用户名登录Windows并运行psql.exe等,无需密码。


    我在这个链接上找到了另一个有用的解决方案。它基本上将PGPASSWORD设置在命令的开头,如下所示:

    1
    PGPASSWORD=PASSWORD psql YOUR_CODE

    脚步:

    First Enviroment Var PGPASSWORD

    C: Windows system32>设置PGPASSWORD = clave

    之前

    psql -d basededatos -U usuario

    准备,