用psql命令连接远程的Postgresql数据库时,在命令中不能传密码,只能连接后,再按照提@H_301_20@弹出密码输入提示输入密码(这一点感觉很别扭,在MysqL上就可以在命令中传入密码),如果这样的话就涉及到和服务器的交互过程(或者称之为会话)。如下所示,输入命令后提示你输入密码:
eg:在 192.168.1.22 连接数据库ZY-BigData,弹出密码提示
[zhu@localhost ~]$psql -h 192.168.8.22 -p 5432 -U postgresql -d ZY-BigData
Password for user postgresql:
一、测试环境说明
Postgresql 数据库所在主机IP: 192.168.1.22、端口号:5432 待连接数据库名: ZY-BigData
客户端IP: 192.168.1.169
二、解决方法
方法一:设置环境变量 PGPASSWORD
1.设置环境变量PGPASSWORD :
PGPASSWORD 是 Postgresql 系统环境变量,在客户端设置这后,那么在客户端连接远端数据库时,将优先使用这个密码。
eg:
[zhu@localhost ~]$ export PGPASSWORD=123456[zhu@localhost ~]$ psql -h 192.168.8.22 -p 5432 -U postgresql -d ZY-BigData
psql (9.3.2)
Type "help" for help.
ZY-BigData=#
注意:设置环境变量 PGPASSWORD ,连接数据库不再弹出密码输入提示。 但是从安全性方面考虑,这种方法并不推荐,
2.在客户端设置.pgpass密码文件:
通过在客户端 /home/postgres 目录下创建隐藏文件 .pgpass ,从而避免连接数据库时弹出密码输入提示。
--创建密码文件 .pgpass ( on 客户端 )
vi /home/postgres/.pgpass
--格式
hostname:port:database:username:password
--范例
192.168.1.22:5432:ZY-BigData:postgresql:123456
--设置权限
Chmod 600 .pgpass
备注:在/home/postgres 目录创建了密码文件 .pgpass 文件后,并正确配置连接信息,那么客户端连接数据时会优先使用 .pgass文件, 并使用匹配记录的密码,从而不跳出密码输入提示,这种方法比方法一更安全,所以推荐使用创建 .pgpass 文件方式。
修改认证文件 $PGDATA/pg_hba.conf,添加以下行, 并 reload使配置立即生效。
host ZY-BigData postgresql 192.168.8.169/32 trust
reload使生效:pg_ctl reload -D $PGDATA
服务端 pg_hba.conf 的配置参考:
# IPv4 local connections:
@H_301_20@host all all 0.0.0.0/32 trust
host all all 127.0.0.1/32 trust
host ZY-BigData postgresql 192.168.8.169/32 trust
host all all 0.0.0.0/0 md5