设置客户端连接PostgreSQL不需要手动密码

本文介绍三种远程连接PostgreSQL数据库时避免密码输入提示的方法:设置环境变量PGPASSWORD、创建.pgpass密码文件及修改服务器端pg_hba.conf配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平常工作中,有时需要远端连接 PostgreSQL 数据库做些维护,例如远端备份等;如果备份脚本写在远端机器,备份的时候会弹出密码输入提示,那么脚本就不能后台执行,这里总结了几种不弹出密码输入提示的方法。


--测试环境
目标库IP:  192.168.1.25/5432 ; 数据库: Mydb ;用户名:postgres
客户端IP:  192.168.1.26

--在 192.168.1.26  连接数据库 Mydb , 弹出密码提示
postgres@linux-> psql -h 192.168.1.25 -p 5432 Mydb postgres
Password for user postgres:

 

方法一:设置环境变量 PGPASSWORD   

PGPASSWORD  是 PostgreSQL 系统环境变量,在客户端设置这后,那么在客户端连接远端数据库时,将优先使用这个密码。


--测试
postgres@linux-> export PGPASSWORD=mypassword                

postgres@linux-> psql -h 192.168.1.25 -p 5432 Mydb postgres
psql (8.4.4)
Type "help" for help.                         
                                                      
Mydb=> \q             

     备注:设置环境变量  PGPASSWORD ,连接数据库不再弹出密码输入提示。 但是从安全性方面考虑,这种方法并不推荐。


方法二:设置 .pgpass 密码文件
      
通过在客户端 /home/postgres 目录下创建隐藏文件 .pgpass ,从而避免连接数据库时弹出密码输入提示。

--创建密码文件 .pgpass ( on 客户端 )                              
vi /home/postgres/.pgpass      
                                    
--格式                                                              
hostname:port:database:username:password                            
                                                                    
--范例                                                              
192.168.1.25:5432:Mydb:postgres:mypassword                                  
                                                                    
--权限                                                              
Chmod 600 .pgpass                  

--连接测试
postgres@linux-> psql -h 192.168.1.25 -p 5432 Mydb postgres

psql (8.4.4)
Type "help" for help.                         
                                                      
Mydb=>

      备注:在/home/postgres 目录创建了密码文件 .pgpass 文件后,并正确配置连接信息,那么客户端连接数据时会优先使用 .pgass文件, 并使用匹配记录的密码,从而不跳出密码输入提示,这种方法比方法一更安全,所以推荐使用创建 .pgpass 文件方式。                                

                              
方法三:修改服务器端 pg_hba.conf

修改认证文件 $PGDATA/pg_hba.conf, 添加以下行, 并 reload使配置立即生效。
    
host    Mydb         postgres            192.168.0.0/24           trust

[postgres@linux]$ pg_ctl reload -D $PGDATA / service postgresql reload
server signaled

--服务器端 pg_hba.conf 的配置
# IPv4 local connections:
host    all             all                 127.0.0.1/32               trust
host    Mydb        postgres       192.168.0.0/24           trust
host    all             all                  0.0.0.0/0                    md5

--客户端再次连接测试
postgres@linux-> psql -h 192.168.1.25 -p 5432 Mydb postgres

psql (8.4.4)
Type "help" for help.    

Mydb=> \q

     备注:修改服务端 pg_hba.conf 并 reload 后,不再弹出密码输入提示。

 

引用官方说明文档:

用户家目录中的 .pgpass 或者 PGPASSFILE 引用的文件是一个可包含口令的文件。如果连接要求口令(并且没有用其它方法声明口令),那么可以用它。在 Microsoft Windows 上,文件名字是 %APPDATA%\postgresql\pgpass.conf (这里的 %APPDATA% 指用户配置里的 Application Data 子目录)。

这个文件应该有下面这样的格式行:

hostname:port:database:username:password

头四个字段每个都可以是一个文本值,或者 *,它匹配所有的东西。第一个匹配当前连接参数的口令行的口令域将得以使用。(因此,如果你使用了通配符,那么应该把最具体的记录放在前面。)如果记录包含 : 或者 \ ,应该用 \ 逃逸。一个 localhost 的主机名匹配来自本机的 host(TCP)和 local (Unix 域套接字)。

.pgpass 的权限必须不允许任何全局或者同组的用户访问;我们可以用命令 chmod 0600 ~/.pgpass 实现这个目的。如果权限比这个松,这个文件将被忽略。(不过目前在 Microsoft Windows 上没有检查这个文件的权限。)

### PostgreSQL 客户端下载与使用教程 #### 一. PostgreSQL 客户端概述 PostgreSQL 提供多种客户端工具用于连接和操作数据库。这些工具可以分为两类:命令行工具和图形化工具。 常见的命令行工具有 `psql`,它是 PostgreSQL 的默认交互式终端程序[^1]。对于需要更直观的操作体验的用户,可以选择安装第三方图形化客户端工具,比如 **pgAdmin** 或者通过 Python 库如 psycopg2 实现编程访问[^3]。 --- #### 二. 下载并安装 PostgreSQL 官方客户端 官方推荐的方式是从 PostgreSQL 官网获取最新版本的客户端软件包: 1. 访问官方网站 [https://www.postgresql.org/download/](https://www.postgresql.org/download/) 并选择适合您操作系统平台的链接。 2. 对于 Windows 用户,可以直接下载带有图形界面安装向导的一体化安装包;Linux 和 macOS 用户则可以通过包管理器或者源码编译方式完成安装。 例如,在 Ubuntu 上运行以下命令即可快速安装基础组件以及 psql 工具: ```bash sudo apt update && sudo apt install postgresql-client ``` --- #### 三. 配置环境变量以便全局调用 为了方便随时调用 `psql` 等命令行工具,请确认已将其路径添加到系统的 PATH 变量中。通常情况下,默认安装会自动处理此设置。如果没有生效,则手动编辑 `.bashrc` 文件(或其他 shell 初始化脚本),追加如下内容: ```bash export PATH=$PATH:/usr/lib/postgresql/<version>/bin/ source ~/.bashrc ``` 替换 `<version>` 为您实际安装的具体版本号。 --- #### 四. 使用 psql 连接到数据库实例 启动 psql 后可执行 SQL 查询语句以及其他元指令。基本语法结构如下所示: ```bash psql -h 主机地址 -p 端口号 -U 用户名 -d 数据库名称 ``` 假设目标是一个本地部署的标准配置服务,那么最简单的形式应该是这样的: ```bash psql -U postgres -d postgres ``` 如果遇到权限验证错误提示 “FATAL: Ident authentication failed”,可能是因为当前用户的认证方法未被允许。此时需调整服务器端配置文件 `/etc/postgresql/[version]/main/pg_hba.conf` 中对应条目改为支持密码校验模式 (`md5`) 而是依赖 ident 协议: ``` local all postgres md5 host all all 127.0.0.1/32 md5 ``` 保存修改之后重启服务使更改立即生效: ```bash sudo service postgresql restart ``` --- #### 五. 图形化客户端——pgAdmin 的介绍与应用 除了上述提到的基础命令外,还有许多优秀的可视化应用程序可供选用,其中最为知名的就是 pgAdmin 。该产品仅功能强大而且易于上手,特别适用于初学者学习阶段或是日常维护工作场景下频繁使用的场合。 要获得最新的稳定发行版,请前往其官网页面 [https://www.pgadmin.org/download/](https://www.pgadmin.org/download/) 查找针对同 OS 版本优化后的分发包进行独立安装过程指导说明文档阅读完毕后再继续下一步骤动作之前先备份好重要数据以防万一丢失可恢复情况发生哦! 一旦成功装载完成后打开主窗口界面上就会看到创建新连接选项卡位置所在处点击进入填写必要参数字段值提交建立关联关系即刻享受便捷高效的服务啦! --- #### 六. 利用 Vert.x MySQL/PostgreSQL 客户端实现异步通信 如果您正在开发基于 Java 或 Kotlin 的微服务架构项目,并希望集成高效的事件驱动框架解决方案的话,妨考虑一下来自 Eclipse 组织旗下的开源项目 —— Vert.x 。它内置了专门面向这两种主流关系型存储引擎设计出来的专用模块能够很好地满足实时响应需求的同时还兼顾性能表现优异的特点[^2]。 下面给出一段简单示例代码展示如何初始化一个 PostgreSQL 数据池对象并通过查询接口检索记录列表返回给前端显示出来: ```java import io.vertx.core.Vertx; import io.vertx.sqlclient.PoolOptions; import io.vertx.sqlclient.SqlClient; public class Main { public static void main(String[] args) { PoolOptions options = new PoolOptions() .setMaxSize(5); SqlClient client = PgPool.pool( Vertx.vertx(), new JsonObject().put("url", "jdbc:postgresql://localhost/testdb") .put("user", "postgres") .put("password", "<your_password>"), options); String sqlQuery = "SELECT * FROM users"; client.query(sqlQuery).execute(ar -> { if (ar.succeeded()) { RowSet<Row> rows = ar.result(); System.out.println(rows.toJson()); } else { Throwable error = ar.cause(); System.err.println(error.getMessage()); } }); } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值