PostgreSQL数据库远程连接功能的开启

需要修改连个配置文件,默认位于 安装目录的data子文件夹下。

1.postgresql.conf

修改成监听所有ip地址的连接请求,如下:

listen_addresses = '*'  www.2cto.com

2.pg_hda.conf

在末尾的地方添加一行,如下:

host    all         all         0.0.0.0/0      md5

关于pg_hda.conf的配置参数的解释:

当一个客户端应用与数据库服务器进行联接时,它声明它将以哪个 PostgreSQL 用户的名称进行联接, 就象我们登录一台 Unix 计算机一样。在 SQL 环境里, 活跃的数据库用户名决定数据库对象的各种访问权限。因此,实际上我们要限制的是用户可以联接的数据库。

认证 是数据库服务器建立客户端的标识, 然后通过一些手段判断是否允许此客户端应用(或者运行这个客户端应用的用户)与它所要求的用户名进行联接的过程。

PostgreSQL 提供多种不同的客户端认证方式。认证某个特定客户端联接所使用的方法可以通过基于(客户端)的主机地址,数据库和用户的方式进行选择; 一些认证方法还允许你通过用户名进行限制。

PostgreSQL 用户名在逻辑上是和服务器运行的操作系统用户名相互独立的。 如果某个服务器的所有用户在那台服务器机器上也有帐号, 那么给数据库用户赋与操作系统用户名是有意义的。不过, 一个接收远程访问的服务器很有可能有许多没有本地操作系统帐号的用户, 因而在这种情况下数据库用户和操作系统用户名之间不必有任何联系。

pg_hba.conf 文件

客户端认证是由一个配置文件控制的,通常其文件名是 pg_hba.conf, 存放在数据库集群的数据目录里。 (HBA 的意思是 host-based authentication:基于主机的认证。) 在initdb初始化数据目录的时候,它会安装一个缺省的文件。 不过我们也可以把认证配置文件放在其它地方;参阅 hba_file 配置参数。  www.2cto.com

文件 pg_hba.conf 的常用格式是一套记录, 每行一条。空白行行被忽略,井号( # )开头的注释也被忽略。 一条记录是由若干用空格和/或 tab 分隔的字段组成。 如果字段用引号包围,那么它可以包含空白。记录不能跨行存在。

每条记录声明一种联接类型,一个客户端 IP 地址范围(如果和联接类型相关的话),一个数据库名,一个用户名字, 以及对匹配这些参数的联接使用的认证方法。 第一条匹配联接类型,客户端地址和联接企图请求的数据库名和用户名的记录将用于执行认证。 这个处理过程没有"跨越"或者"回头"的说法:如果选择了一条记录而且认证失败, 那么将不考虑后面的记录。如果没有匹配的记录,那么访问将被拒绝。

每条记录可以下面七种格式之一

local      database  user  authentication-method  [authentication-option]

host       database  user  CIDR-address  authentication-method  [authentication-option]

hostssl    database  user  CIDR-address  authentication-method  [authentication-option]

hostnossl  database  user  CIDR-address  authentication-method  [authentication-option]

host       database  user  IP-address  IP-mask  authentication-method  [authentication-option]

hostssl    database  user  IP-address  IP-mask  authentication-method  [authentication-option]

hostnossl  database  user  IP-address  IP-mask  authentication-method  [authentication-option]

各个字段的含义如下:

local

这条记录匹配通过 Unix 域套接字进行的联接企图。 没有这种类型的记录,就不允许 Unix 域套接字的联接。

host

这条记录匹配通过 TCP/IP 进行的联接尝试。 host 记录匹配 SSL 和非 SSL 的连接请求。

注意: 除非服务器带着合适的 listen_addresses 配置参数值启动,否则将不可能进行远程的 TCP/IP 连接, 因为缺省的行为是只监听本地自环地址 localhost 的连接。

hostssl

这条记录匹配使用 TCP/IP 的 SSL 联接企图。 但必须是使用 SSL 加密的联接。

要使用这个选项,制作服务器的时候必须打开 SSL 支持。而且在服务器启动的时候, 必须SSL选项通过配置选项ssl打开。

hostnossl

这个记录与 hostssl 有着正相反的逻辑: 它只匹配那些在 TCP/IP 上不使用 SSL 的连接请求。

database

声明记录所匹配的数据库。值 all 表明该记录匹配所有数据库, 值 sameuser表示如果被请求的数据库和请求的用户同名,则匹配。 samegroup 表示请求的用户必须是一个与数据库同名的组中的成员。 在其他情况里,这就是一个特定的 PostgreSQL 的名字。 我们可以通过用逗号分隔的方法声明多个数据库。 一个包含数据库名的文件可以通过对该文件前缀 @ 来声明。  www.2cto.com

user

为这条记录声明所匹配的PostgreSQL用户。值 all 表明它匹配于所有用户。 否则,它就是特定 PostgreSQL 用户的名字。多个用户名可以通过用逗号分隔的方法声明。组名字可以通过用 + 做组名字前缀来声明。 一个包含用户名的文件可以通过在文件名前面前缀 @ 来声明。该文件必需和 pg_hba.conf 在同一个目录。

CIDR-address

声明这条记录匹配的客户端机器的 IP 地址范围。它包含一个标准的点分十进制的 IP 地址和一个 CIDR 掩码长度。 (IP 地址只能用数值声明,不能用域或者主机名。) 掩码长度表示客户端 IP 地址必须匹配的高位二进制位数。 在给出的 IP 地址里,这个长度的右边的二进制位必须为零。 在 IP 地址,/,和 CIDR 掩码长度之间不能有空白。

典型的 CIDR 地址是 172.20.143.89/32,这表明一个主机, 或者 172.20.143.0/24 表示一个网络。 要声明单个主机,给 IPv4 地址声明 CIDR 掩码 32,给 IPv6 地址声明 128。

以 IPv4 格式给出的 IP 地址会匹配那些拥有对应地址的 IPv6 连接,比如 127.0.0.1 将匹配 IPv6 地址 ::ffff:127.0.0.1。 一个以 IPv6 格式给出的记录将只匹配 IPv6 连接,即使对应的地址在 IPv4-in-IPv6 范围内。请注意如果系统的 C 库不支持 IPv6 地址,那么 IPv6 的格式将被拒绝。

这个域只适用于 host,hostssl 和 hostnossl 记录。

IP-address

IP-mask

这些方法可以用于作为 CIDR-address 表示法的替补。 它不是声明掩码的长度,而是在另外一个字段里声明实际的掩码。 比如,255.0.0.0 表示 IPv4 CIDR 掩码长度 8,而 255.255.255.255 表示 CIDR 掩码长度 32。 同样的匹配逻辑将用于一个点分的 IP-mask。

这些字段只适用于 host, hostssl, 和 hostnossl 记录。

authentication-method(认证方法)

声明通过这条记录联接的时候使用的认证方法。 可能的选择在下面简介,

trust

无条件地允许联接。这个方法允许任何可以与PostgreSQL 数据库服务器联接的用户以他们期望的任意 PostgreSQL 数据库用户身份进行联接,而不需要口令。

reject

联接无条件拒绝。常用于从一个组中"过滤"某些主机。

md5

要求客户端提供一个 MD5 加密的口令进行认证。

crypt

要求客户端提供一个 crypt() 加密的口令用于认证。 7.2 以前的客户端只能支持 crypt。 对于 7.2 以及以后的客户端,我们建议使用 md5。

password

要求客户端提供一个未加密的口令进行认证。 因为口令是以明文形式在网络上传递的, 所以我们不应该在不安全的网络上使用这个方式。  www.2cto.com

krb4

用 Kerberos V4 认证用户。只有在进行 TCP/IP 联接的时候才能用。  (译注:Kerberos,"克尔波洛斯",故希腊神话冥王哈得斯的多头看门狗。 Kerberos 是 MIT 开发出来的基与对称加密算法的认证协议和/或密钥交换方法。 其特点是需要两个不同用途的服务器,一个用于认证身份, 一个用于通道两端用户的密钥交换。同时 Kerberos 对网络时间同步要求比较高,以防止回放攻击,因此通常伴随 NTP 服务。)

krb5

用 Kerberos V5 认证用户。只有在进行 TCP/IP 联接的时候才能用。  (译注:Kerberos V5 是上面 V4 的改良,主要是不再依赖 DES 算法, 同时增加了一些新特性。)

ident

获取客户的操作系统名(对于 TCP/IP 联接,用户的身份是通过与运行在客户端上的 ident 服务器联接进行判断的,对于本地联接,它是从操作系统获取的。) 然后检查一下,看看用户是否允许以要求的数据库用户进行联接, 方法是参照在 ident 关键字后面声明的映射。

pam

使用操作系统提供的可插入的认证模块服务 (Pluggable Authentication Modules) (PAM)来认证。

authentication-option

这个可选的字段的含义取决与选择的认证方法。细节在下面。

用 @ 构造包含的文件是当作一列名字读取的, 这些名字可以用空白或者逗号分隔。注释用 # 引入, 就像在 pg_hba.conf 里那样,允许嵌套 @ 构造。 除非跟在 @ 后面的文件名是一个绝对路径,否则被当作与包含该文件的目录相对的路径。

因为认证时系统是为每个联接请求顺序检查 pg_hba.conf 里的记录的,所以这些记录的顺序是非常关键的。 通常,靠前的记录有比较严的联接匹配参数和比较弱的 认证方法,而靠后的记录有比较松的匹配参数和比较严的认证方法。 比如,我们一般都希望对本地 TCP/IP 联接使用 trust 认证, 而对远端的 TCP/IP 联接要求口令。在这种情况下我们将 trust 认证方法用于来自 127.0.0.1 的联接,这条记录将出现在允许更广泛的客户端 IP 地址的使用口令认证的记录前面。

在启动和主服务器进程( postmaster )收到SIGHUP 信号的时候, 系统都会重新装载 pg_hba.conf 文件。 如果你在活跃的系统上编辑了该文件,你就需要用 kill 向 postmaster 发一个 SIGHUP信号,好让它重新读取该文件。

在 pg_hba.conf 记录的一些例子。 阅读下文理解不同认证方法的细节。

pg_hba.conf 记录的例子  www.2cto.com

# 允许在本机上的任何用户使用 Unix 域套接字(本地连接的缺省)

# 以任何身份联接任何数据库

#

#

# TYPE  DATABASE    USER        CIDR-ADDRESS           METHOD

local   all         all                                trust

# 和上面相同,但是使用的是自环的(loopback)TCP/IP 连接

#

# TYPE  DATABASE    USER        CIDR-ADDRESS           METHOD

host         all    all         127.0.0.1/32           trust

# 和上面一行相同,但是用的是独立的掩码字段

#

# TYPE  DATABASE    USER        IP-ADDRESS          METHOD

host    all         all         127.0.0.1     255.255.255.255     trust

# 允许 IP 地址为 192.168.93.x 的任何主机与数据库

# "template1" 相连,用与他们在自己的主机上相同 ident 的用户名标识他自己

# (通常是他的 Unix 用户名)

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

host    template1   all         192.168.93.0/24       ident sameuser

# 允许来自主机 192.168.12.10 的用户与 "template1" 数据库联接,

# 只要该用户提供了在正确的口令。

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

host    template1   all         192.168.12.10/32      md5

# 如果前面没有其它 "host" 行,那么下面两行将拒绝所有来自

# 192.168.54.1 的联接请求 (因为前面的记录先匹配),

# 但是允许来自互联网上其它任何地方的有效的 Kerberos 5 认证的联接

# 零掩码表示不考虑主机 IP 的任何位。因此它匹配任何主机:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

host    all         all         192.168.54.1/32       reject

host    all         all         0.0.0.0/0             krb5

# 允许来自 192.168.x.x 的任何用户与任意数据库联接,只要他们通过 ident 检查

# 但如果 ident 说该用户是 "bryanh" 而他要求以 PostgreSQL 用户 "guest1" 联接,

# 那么只有在 `pg_ident.conf' 里有 "omicron" 的映射,说 "bryanh" 允许以

#  "guest1" 进行联接时才真正可以进行联接。  www.2cto.com

#

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

host    all         all         192.168.0.0/16        ident omicron

# 如果下面是用于本地联接的仅有的三行,那么它们将允许本地用户

# 只和它们自己的数据库联接(数据库名和用户名同名),

# 只有管理员和组"support"里的成员例外,他们可以联接到任何数据库。

# 文件 $PGDATA/admins 列出了那些允许与所有数据库联接的用户名。

# 在所有情况下都需要口令。

#

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

local   sameuser    all                               md5

local   all         @admins                           md5

local   all         +support                          md5

# 上面最后两行可以合起来写成一行

local   all         @admins,+support                  md5

# 数据库字段也可以使用列表和文件名,但组不行:

local   db1,db2,@demodbs  all                         md5

转载于:https://www.cnblogs.com/blue-Wind/p/7485803.html

PostgreSQL数据库远程连接功能的开启相关推荐

  1. c远程连接mysql数据库_MySQL数据库远程连接开启方法

    第一中方法:比较详细 以下的 文章 主要介绍的是 MySQL 数据库 开启远程连接的时机操作流程,其实开启MySQL 数据库远程连接的实际操作步骤并不难,知识方法对错而已,今天我们要向大家描述的是My ...

  2. IDEA2019 Java连接PostgreSQL数据库实现基础功能增删改查

    IDEA2019 Java连接PostgreSQL数据库实现基础功能增删改查 注意: 每个方法对应单个java类,可以自行进行整理汇总到一个类中 一.Java通过JDBC连接到PostgreSQL数据 ...

  3. centos6安装mysql并远程连接_如何开启phpstudy中mysql的远程连接

    phpstudy是一款非常方便的php集成环境,许多人会使用它作为PHP网站的实验环境.phpstudy中也集成了Mysql数据库,那么集成环境中的mysql数据库如何才能远程连接呢? 通常情况下,实 ...

  4. Linux中的MySql数据库远程连接

    Linux中的MySql数据库远程连接 rpm–qa |grep mysql安装了以下的包: mysql-libs-5.1.71-1.el6.x86_64 mysql-connector-java-5 ...

  5. 结合批处理功能,配置SQL Server 2005,使其打开远程连接功能

    参考微软这篇 如何配置 SQL Server 2005 以允许远程连接的文章,http://support.microsoft.com/kb/914277#top 我结合批命令,可以实现一站式配置 S ...

  6. vs2019使用sqlite数据库远程连接linux

    vs2019使用sqlite数据库远程连接linux 一.sqlite3添加到目录 二.添加依赖库 三.测试 一.sqlite3添加到目录 将两个sqlite3头文件放入目录中 二.添加依赖库 打开项 ...

  7. python postgresql跨数据库查询_python访问PostgreSQL数据库之连接库Psycopg2

    python访问PostgreSQL数据库之连接库Psycopg2 作者:佣工7001 由于要在python访问PostgreSQL数据库,需要一个符合DB-API的连接库.通过搜索,锁定两个候选库: ...

  8. MySQL数据库远程连接很慢的解决方案

    MySQL数据库远程连接很慢的解决方案 参考文章: (1)MySQL数据库远程连接很慢的解决方案 (2)https://www.cnblogs.com/zsg88/p/9197407.html 备忘一 ...

  9. ORCAL数据库远程连接是报:12170连接超时错误解决办法

    ORCAL数据库远程连接是报:12170连接超时错误解决办法 问题: 今天在进行数据库连接时发现报了12170错误,通过查找资料原来是服务器防火墙的问题 解决方法: 因为我是把数据库部署到虚拟机上的, ...

最新文章

  1. 算法炒房三月亏20多亿!房地产巨头大翻车:房价水太深,AI根本把握不住
  2. [转]JavaScript代码收集
  3. 电脑安装python为什么不能用-python安装后不能运行怎么办
  4. 文巾解题 13. 罗马数字转整数
  5. 软件工程第一周-评论三部软件作品
  6. python条件语句函数_python sum 函数中可以使用条件语句吗
  7. 上传RNA-seq数据到NCBI GEO数据库
  8. python能做什么excel-python处理excel总结
  9. mongodb常用操作——命令行
  10. 分享刚学会的安装手机浏览器的实用插件tampermonkey方法
  11. 网站的PV是什么意思
  12. 网络音乐是时候该聊聊“大数据”了
  13. USACO 2021-2022 December Contest Bronze 题解
  14. ssm毕设项目小型超市货物仓储管理系统w8wry(java+VUE+Mybatis+Maven+Mysql+sprnig)
  15. 计算机无法找到网络打印机,为何搜索不到局域网打印机_解决win7找不到网络打印机的问题...
  16. 详解OpenCV的椭圆曲线点坐标近似计算函数ellipse2Poly()
  17. bios中 启动首选项 找不到固态硬盘
  18. 修改主分区表给U盘分区
  19. DM数据库的启停以及数据库状态检查
  20. 多可知识管理系统三大特色

热门文章

  1. Table隔行变色的JavaScript代码
  2. 合租房资金管理系统--会议纪要
  3. 算法总结8—非负矩阵因式分解
  4. Windows CE的学习路线
  5. 理解物体检测中的Objectness
  6. CVPR 2019 神奇的超分辨率算法DPSR:应对图像模糊降质
  7. 语义分割江湖的那些事儿——从旷视说起
  8. 【OpenCV】OpenCV函数精讲之 -- Mat和IplImage之间的相互装换(OpenCV2.0和OpenCV3.0)
  9. 一文带你纵览 200+ 大规模机器学习研究
  10. 《Python编程从入门到实践》记录之input()函数