PostgreSQL数据库连接时,如何不在命令行指定密码?

一、概述

  PostgreSQL数据库的连接,分本地连接和远程连接两种方式,本地连接使用socket套接字协议进行连接;在命令行中加上-h参数代表远程连接。
  本地连接和远程连接是否需要指定用户密码,取决于基于主机认证配置文件pg_hba.conf的配置,你可以通过在postgresql数据库服务端的pg_hba.conf中添加一条trust条目,然后就可以实现无密码连接数据库,对于某些用户,这是不安全的。所以对于某些用户的连接,密码的指定是必不可少的一部分,出于安全的考虑,你也许不想在命令行中显示的指定用户密码,也不想每次连接时提示你输入用户密码,那么该如何通过其他方式指定用户密码呢?本文以远程连接为例分享三种指定命令的方法。

二、指定用户密码

1.测试环境准备

  这里有两台机器:10.0.0.100(PostgreSQL服务器)、10.0.0.11(客户端)
  创建测试用户并配置pg_hba.conf文件:

# 1.创建用户
postgres=# create user test password 'test123';
CREATE ROLE

# 2.配置pg_hba.conf
[postgres@alldb /opt/software/pg14/data]$ vim pg_hba.conf
host    all             test            10.0.0.11/32            md5
[postgres@alldb /opt/software/pg14/data]$ pg_ctl reload 
server signaled
[postgres@alldb /opt/software/pg14/data]$ echo $PGDATA
/opt/software/pg14/data

2.使用环境变量PGPASSWORD指定密码

  测试步骤如下:
  未配置PGPASSWORD环境变量之前:

[postgres@PG1 ~]$ psql -U test -d postgres -h 10.0.0.100 -p 5432
Password for user test: 
# 即使没有指定-W选项,也会提示你输入用户密码

  配置环境变量:

[postgres@PG1 ~]$ export PGPASSWORD=test123
[postgres@PG1 ~]$ psql -U test -d postgres -h 10.0.0.100 -p 5432
psql (13.1, server 14.2)

# 连接时无需输入密码

3.使用.pgpass文件指定密码

# 1.取消环境变量PGPASSWORD的设置
[postgres@PG1 ~]$ unset PGPASSWORD
[postgres@PG1 ~]$ echo $PGPASSWORD

# 2.在用户家目录下,创建并编辑.pgpass文件
[postgres@PG1 ~]$ vim .pgpass
#hostname:port:database:username:password
10.0.0.100:5432:postgres:test:test123

[postgres@PG1 ~]$ chmod 0600 .pgpass
[postgres@PG1 ~]$ psql -U test -d postgres -h 10.0.0.100 -p 5432
psql (13.1, server 14.2)
WARNING: psql major version 13, server major version 14.
         Some psql features might not work.
Type "help" for help.

postgres=> quit

4.使用服务文件.pg_service.conf指定密码

# 1.注释上一步的配置信息
[postgres@PG1 ~]$ vim .pgpass 
#hostname:port:database:username:password
#10.0.0.100:5432:postgres:test:test123

# 2.在用户家目录下创建并编辑.pg_service.conf配置文件
[postgres@PG1 ~]$ vim .pg_service.conf
[zbservice]
host=10.0.0.100
port=5432
dbname=postgres
user=test
password=test123

# 3.配置环境变量PGSERVICE,并连接
[postgres@PG1 ~]$ export PGSERVICE=zbservice
[postgres@PG1 ~]$ psql
psql (13.1, server 14.2)
WARNING: psql major version 13, server major version 14.
         Some psql features might not work.
Type "help" for help.

postgres=> 


# 4.如果不配置PGSERVICE环境变量,可以使用如下方式连接:
[postgres@PG1 ~]$ unset PGSERVICE
[postgres@PG1 ~]$ echo $PGSERVICE

[postgres@PG1 ~]$ psql service=zbservice
psql (13.1, server 14.2)
WARNING: psql major version 13, server major version 14.
         Some psql features might not work.
Type "help" for help.

postgres=> 

  使用这种方法,还可以简化命令,避免每次连接时输入很多选项。


免责声明:

1、本站资源由自动抓取工具收集整理于网络。

2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

5、如果您喜欢本资源,请您支持作者,购买正版内容。

6、资源失效,请下方留言,欢迎分享资源链接

文章评论

0条评论