Postgresql配置客户端身份验证

本主题说明如何为 Greenplum 数据库配置客户端连接和身份验证。

当一个 Greenplum 数据库系统第一次初始化时,系统包含一个预定义的超级用户角色。该角色将与初始化 Greenplum 数据库系统的操作系统用户同名。这个角色被称为gpadmin。默认情况下,系统配置为仅允许从gpadmin角色到数据库的本地连接。如果您想允许任何其他角色连接,或者如果您想允许来自远程主机的连接,您必须配置 Greenplum 数据库以允许此类连接。本节说明如何配置客户端连接和对 Greenplum 数据库的身份验证。

允许连接到 Greenplum 数据库

客户端访问和身份验证由标准 PostgreSQL 基于主机的身份验证文件 pg_hba.conf 控制。有关此文件的详细信息,请参阅PostgreSQL 文档中的 pg_hba.conf 文件

在 Greenplum 数据库中,主实例的 pg_hba.conf 文件控制客户端对您的 Greenplum 数据库系统的访问和身份验证。Greenplum 数据库段也有 pg_hba.conf 文件,但这些文件已经正确配置为只允许来自主主机的客户端连接。段从不接受外部客户端连接,因此无需更改pg_hba.conf段上的文件。

pg_hba.conf 文件的一般格式是一组记录,每行一个。Greenplum 数据库忽略空行和#注释字符之后的任何文本。一条记录由许多由空格或制表符分隔的字段组成。如果字段值被引用,则字段可以包含空格。记录不能跨行继续。每个远程客户端访问记录具有以下格式:

host   database   role   address   authentication-method

每个 UNIX 域套接字访问记录都采用以下格式:

local   database   role   authentication-method

下表描述了每个字段的含义。

Field Description
local 匹配使用 UNIX 域套接字的连接尝试。如果没有这种类型的记录,则不允许 UNIX 域套接字连接。
host 匹配使用 TCP/IP 进行的连接尝试。listen_addresses除非使用适当的服务器配置参数值启动服务器,否则无法进行远程 TCP/IP 连接。
hostssl 匹配使用 TCP/IP 进行的连接尝试,但仅当使用 SSL 加密进行连接时。必须在服务器启动时通过设置ssl服务器配置参数启用 SSL。
hostnossl 匹配通过不使用 SSL 的 TCP/IP 进行的连接尝试。
database 指定此记录匹配的数据库名称。该值all指定它匹配所有数据库。可以通过用逗号分隔多个数据库名称来提供它们。可以通过在文件名前加上 . 来指定包含数据库名称的单独文件@
role 指定此记录匹配的数据库角色名称。该值all指定它匹配所有角色。如果指定的角色是一个组,并且您希望包含该组的所有成员,请在角色名称前加上+. 可以通过用逗号分隔多个角色名称来提供它们。可以通过在文件名前加上 . 来指定包含角色名称的单独文件@
address 指定此记录匹配的客户端计算机地址。该字段可以包含 IP 地址、IP 地址范围或主机名。IP 地址范围使用标准数字表示法指定范围的起始地址,然后是斜杠 ( /) 和 CIDR 掩码长度。掩码长度表示必须匹配的客户端 IP 地址的高位位数。在给定的 IP 地址中,其右侧的位应为零。/IP 地址、和 CIDR 掩码长度之间不得有任何空格。以这种方式指定的 IPv4 地址范围的典型示例172.20.143.89/32适用于单个主机、172.20.143.0/24小型网络或10.6.0.0/16大型网络。IPv6 地址范围可能类似于::1/128单个主机(在本例中为 IPv6 环回地址)或fe80::7a31:c1ff:0000:0000/96小型网络。0.0.0.0/0代表所有 IPv4 地址,并::0/0代表所有 IPv6 地址。要指定单个主机,请对 IPv4 使用 32 的掩码长度或对 IPv6 使用 128 的掩码长度。在网络地址中,不要省略尾随零。以 IPv4 格式给出的条目将仅匹配 IPv4 连接,而以 IPv6 格式给出的条目将仅匹配 IPv6 连接,即使表示的地址在 IPv4-in-IPv6 范围内。笔记:如果主机系统 C 库不支持 IPv6 地址,则 IPv6 格式的条目将被拒绝。如果指定了主机名(不是 IP 地址或 IP 范围的地址被视为主机名),则将该名称与客户端 IP 地址的反向名称解析的结果进行比较(例如,反向 DNS 查找,如果使用 DNS)。主机名比较不区分大小写。如果匹配,则对主机名执行前向名称解析(例如,前向 DNS 查找),以检查它解析到的任何地址是否等于客户端 IP 地址。如果两个方向都匹配,则认为该条目匹配。一些主机名数据库允许将一个 IP 地址与多个主机名相关联,但操作系统在被要求解析 IP 地址时只返回一个主机名。使用的主机名pg_hba.conf必须是客户端 IP 地址的地址到名称解析返回的主机名,否则该行将不被视为匹配。当在 中指定主机名时pg_hba.conf,您应该确保名称解析相当快。设置本地名称解析缓存(例如nscd. 此外,您可以启用服务器配置参数log_hostname以在日志中查看客户端主机名而不是 IP 地址。
IP-address IP-mask 这些字段可用作 CIDR 地址表示法的替代项。不是指定掩码长度,而是在单独的列中指定实际掩码。例如,255.0.0.0表示 IPv4 CIDR 掩码长度为 8,255.255.255.255表示 CIDR 掩码长度为 32。
authentication-method 指定连接时要使用的身份验证方法。Greenplum 支持PostgreSQL 9.4支持的认证方法。

注意:对于更安全的系统,请考虑从 pg_hba.conf文件中删除使用信任身份验证的远程连接的记录。信任身份验证授予可以连接到服务器的任何用户使用他们指定的任何角色访问数据库。对于本地 UNIX 套接字连接,您可以安全地用 ident 身份验证替换信任身份验证。您还可以对本地和远程 TCP 客户端使用 ident 身份验证,但客户端主机必须运行 ident 服务,并且您必须信任该机器的完整性。

编辑 pg_hba.conf 文件

最初,该pg_hba.conf文件为 gpadmin 用户设置了丰富的权限,而对其他 Greenplum 数据库角色没有数据库访问权限。您需要编辑该pg_hba.conf文件以允许用户访问数据库并保护 gpadmin 用户。考虑删除具有信任身份验证的条目,因为它们允许任何有权访问服务器的人连接到他们选择的任何角色。对于本地(UNIX 套接字)连接,使用 ident 身份验证,这要求操作系统用户匹配指定的角色。对于本地和远程 TCP 连接,身份验证需要客户端的主机运行缩进服务。您可以在 master 主机上安装 ident 服务,然后对本地 TCP 连接使用 ident 身份验证,例如127.0.0.1/28. 对远程 TCP 连接使用 ident 身份验证不太安全,因为它要求您信任客户端主机上 ident 服务的完整性。

此示例显示如何编辑主服务器的 pg_hba.conf 文件,以允许远程客户端使用加密密码身份验证从所有角色访问所有数据库。

编辑 pg_hba.conf

  1. 在文本编辑器中打开文件 $MASTER_DATA_DIRECTORY/pg_hba.conf。

  2. 为要允许的每种连接类型在文件中添加一行。记录是按顺序读取的,因此记录的顺序很重要。通常,较早的记录将具有紧密的连接匹配参数和较弱的身份验证方法,而较晚的记录将具有较宽松的匹配参数和更强的身份验证方法。例如:

    # allow the gpadmin user local access to all databases
    # using ident authentication
    local   all   gpadmin   ident         sameuser
    host    all   gpadmin   127.0.0.1/32  ident
    host    all   gpadmin   ::1/128       ident
    # allow the 'dba' role access to any database from any
    # host with IP address 192.168.x.x and use md5 encrypted
    # passwords to authenticate the user
    # Note that to use SHA-256 encryption, replace md5 with
    # password in the line below
    host    all   dba   192.168.0.0/32  md5
    # allow all roles access to any database from any
    # host and use ldap to authenticate the user. Greenplum role
    # names must match the LDAP common name.
    host    all   all   192.168.0.0/32  ldap ldapserver=usldap1 ldapport=1389 ldapprefix="cn=" ldapsuffix=",ou=People,dc=company,dc=com"
    
  3. 保存并关闭文件。

  4. 重新加载 pg_hba.conf 配置文件以使您的更改生效:

    $ gpstop -u
    

注意:请注意,您还可以通过设置对象权限来控制数据库访问,如管理对象权限中所述。pg_hba.conf 文件只控制谁可以启动数据库会话以及如何验证这些连接。

限制并发连接

Greenplum 数据库基于每个连接分配一些资源,因此建议设置允许的最大连接数。

要限制 Greenplum 数据库系统的活动并发会话数,您可以配置max_connectionsserver 配置参数。这是一个本地参数,意味着您必须在postgresql.confmaster、standby master和每个segment实例(primary和mirror)的文件中设置它。on segment的推荐值max_connections是 master 上的值的 5-10 倍。

设置时max_connections,还必须设置从属参数max_prepared_transactions。此值必须至少与max_connectionsmaster 上的值一样大,并且段实例应设置为与 master 相同的值。

例如:

  • $MASTER_DATA_DIRECTORY/postgresql.conf(包括备用主控):

    max_connections=100
    max_prepared_transactions=100
    
  • 对于SEGMENT_DATA_DIRECTORY/postgresql.conf所有段实例:

    max_connections=500
    max_prepared_transactions=100
    

以下步骤使用 Greenplum 数据库实用程序设置参数值gpconfig

有关信息gpconfig,请参阅Greenplum 数据库实用程序指南

更改允许的连接数

  1. 以 Greenplum 数据库管理员身份登录到 Greenplum 数据库主主机并获取文件$GPHOME/greenplum_path.sh

  2. 设置max_connections参数的值。此gpconfig命令将段上的值设置为 1000,将主站上的值设置为 200。

    $ gpconfig -c max_connections -v 1000 -m 200
    

    段上的值必须大于主节点上的值。on segment的推荐值max_connections是 master 上的值的 5-10 倍。

  3. 设置max_prepared_transactions参数的值。此gpconfig命令在主节点和所有段上将值设置为 200。

    $ gpconfig -c max_prepared_transactions -v 200
    

    的值max_prepared_transactions必须大于或等于max_connectionsmaster 上的值。

  4. 停止并重新启动您的 Greenplum 数据库系统。

    $ gpstop -r
    
  5. gpconfig -s您可以使用该选项检查主节点和段上的参数值。此gpconfig命令显示max_connections参数的值。

    $ gpconfig -s max_connections
    

注意:提高这些参数的值可能会导致 Greenplum 数据库请求更多的共享内存。为了减轻这种影响,请考虑减少其他与内存相关的参数,例如gp_cached_segworkers_threshold.

加密客户端/服务器连接

为客户端连接到 Greenplum 数据库启用 SSL 以加密通过客户端和数据库之间的网络传递的数据。

Greenplum 数据库对客户端和主服务器之间的 SSL 连接具有原生支持。SSL 连接可以防止第三方窥探数据包,还可以防止中间人攻击。每当客户端连接通过不安全的链接时都应使用 SSL,并且无论何时使用客户端证书身份验证都必须使用 SSL。

在 SSL 模式下启用 Greenplum 数据库需要以下项目。

  • OpenSSL 安装在客户端和主服务器主机(主服务器和备用主服务器)上。

  • 应该为master主机和备用master主机正确生成SSL文件server.key(服务器私钥)和server.crt(服务器证书)。

    • 不应使用密码保护私钥。服务器不会提示输入私钥的密码,如果需要,Greenplum 数据库启动失败并出现错误。
    • 在生产系统上,主控主机和备用主控主机应该有一个密钥和证书对,主控主机和备用主控主机的主题 CN(Common Name)。自签名证书可用于测试,但在生产中应使用证书颁发机构 (CA) 签名的证书,以便客户端可以验证服务器的身份。可以使用全局或本地 CA。如果所有客户端都是组织本地的,则建议使用本地 CA。
  • 确保 Greenplum 数据库可以访问 server.key 和 server.crt,以及任何额外的身份验证文件,例如root.crt(对于受信任的证书颁发机构)。当以 SSL 模式启动时,Greenplum 数据库主服务器会查找 server.key 和 server.crt。默认情况下,如果文件不在主数据目录 ( $MASTER_DATA_DIRECTORY) 中,Greenplum 数据库不会启动。此外,如果您使用其他 SSL 身份验证文件,例如root.crt(受信任的证书颁发机构),这些文件必须位于主控主机上。

    如果Greenplum数据库主镜像启用了SSL客户端认证,SSL认证文件必须同时在master主机和备用master主机上,并且不应该放在默认目录下$MASTER_DATA_DIRECTORY。启用主镜像时,initstandby操作会将主服务器的内容$MASTER_DATA_DIRECTORY和不正确的 SSL 密钥复制到备用主服务器,证书文件(主文件,而不是备用主文件)将阻止备用主服务器启动。

    postgresql.conf您可以使用参数sslcertsslkeysslrootcert和为 SSL 服务器文件的位置指定不同的目录sslcrl。有关参数的详细信息,请参阅《安全配置指南》中的SSL 客户端认证

Greenplum 数据库可以在启用 SSL 的情况下启动,方法是在 master 和备用 master 主机上ssl=on的文件中设置服务器配置参数。postgresql.confgpconfig命令设置参数:

gpconfig -c ssl -m on -v off

设置参数需要重新启动服务器。此命令重新启动系统:gpstop -ra.

创建不带密码的自签名证书仅用于测试

要为服务器创建快速自签名证书以进行测试,请使用以下 OpenSSL 命令:

# openssl req -new -text -out server.req

输入提示要求的信息。请务必将本地主机名输入为Common Name。挑战密码可以留空。

该程序将生成一个受密码保护的密钥,并且不接受长度少于四个字符的密码。

要将此证书用于 Greenplum 数据库,请使用以下命令删除密码:

# openssl rsa -in privkey.pem -out server.key
# rm privkey.pem

在提示解锁现有密钥时输入旧密码。

然后,输入以下命令将证书转换为自签名证书,并将密钥和证书复制到服务器将查找它们的位置。

# openssl req -x509 -in server.req -text -key server.key -out server.crt

最后,使用以下命令更改密钥的权限。如果权限比这些限制更少,服务器将拒绝该文件。

# chmod og-rwx server.key

有关如何创建服务器私钥和证书的更多详细信息,请参阅OpenSSL 文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容