PostgreSQL数据库用户认证

合集下载

PostgreSQL数据库介绍

PostgreSQL数据库介绍

PostgreSQL数据库介绍PostgreSQL是一种功能强大的关系型数据库管理系统(RDBMS),它采用了开源的方式进行开发和维护。

由于它的稳定性、安全性和可扩展性,PostgreSQL已成为最受欢迎的开源数据库之一、本文将从数据库概述、特点、架构、应用领域和优势等方面对PostgreSQL进行详细介绍。

一、概述PostgreSQL是一个高度模块化的数据库系统,它支持SQL语言,具有ACID(原子性、一致性、隔离性和持久性)事务,并具有复杂的查询、并发控制和储存优化功能。

它的目标是成为一个功能完善、兼容性良好且具有高可靠性的数据库管理系统。

二、特点1. 多版本并发控制:PostgreSQL支持多个事务并发进行操作,具有高并发性能。

它采用多版本并发控制(MVCC)技术来处理并发访问问题,确保事务的正确性和一致性。

2. 对象关系性:PostgreSQL支持复杂的数据类型,如数组、JSON、XML等。

它还提供了表继承、视图、触发器和存储过程等高级特性,能够灵活地处理复杂的数据模型。

3. 扩展性:PostgreSQL具有可扩展的体系结构,可以实现水平和垂直扩展。

它支持分区表、并行查询和复制等特性,能够应对大规模数据和高负载的情况。

4. 安全性:PostgreSQL具有强大的安全性功能,支持通过用户名和密码、客户端证书、多种加密算法等方式进行身份验证和数据加密。

它还提供了访问控制列表(ACL)、行级安全性和安全沙箱等特性,确保数据的安全性和隐私性。

5. 可扩展的生态系统:PostgreSQL拥有庞大的开发社区,提供了丰富的第三方插件和扩展,可以满足各种特定需求。

它还与许多编程语言和开发工具进行了集成,提供了便捷的开发和管理接口。

三、架构PostgreSQL的架构主要分为后台进程和前台连接两部分。

后台进程包括主进程(会监听数据库连接)和多个工作进程(每个进程处理一个数据库连接),用于处理数据库的各种操作。

设置CA证书来强化PostgreSQL的安全性的教程-电脑资料

设置CA证书来强化PostgreSQL的安全性的教程-电脑资料

设置CA证书来强化PostgreSQL的安全性的教程-电脑资料这篇文章主要介绍了设置CA证书来强化PostgreSQL的安全性的教程,主要用到了CA私钥,需要的朋友可以参考下在经历了多次的摸索实验后我终于成功地实现了SSL证书认证的功能,因此我想这次我要把这些步骤记录下来供日后查阅,。

出于安全和方便的原因,我要在一台单独的专用机器上签署客户的证书,这台机器也称为证书授证中心(CA)。

这让我们在授权新的客户端时不必先登录到PostgreSQL服务器然后再签署证书或者修改pg_hba.conf。

我们要创建一个特殊的数据库组,叫sslcertusers。

这个组里的所有用户都可以通过由CA签署的证书进行连接。

在下面的例子中,请将"trustly"替换成你的公司名或组织名。

所有的命令都是基于Ubuntu Linux 12.04 LTS。

设置CACA应该是一台离线的处于高度安全环境中的计算机。

生成CA私钥sudo openssl genrsa -des3 -out /etc/ssl/private/trustly-ca.key 2048sudo chown root:ssl-cert /etc/ssl/private/trustly-ca.keysudo chmod 640 /etc/ssl/private/trustly-ca.key 生成CA证书sudo openssl req -new -x509 -days 3650 \\-subj ‘/C=SE/ST=Stockholm/L=Stockholm/O=Trustly/CN=trustly‘ \ \-key /etc/ssl/private/trustly-ca.key \\-out /usr/local/share/ca-certificates/trustly-ca.crtsudo update-ca-certificates配置PostgreSQL服务器生成PostgreSQL服务器私钥# Remove default snakeoil certssudo rm /var/lib/postgresql/9.1/main/server.keysudo rm /var/lib/postgresql/9.1/main/server.crt# Enter a passphrasesudo -u postgres openssl genrsa -des3 -out /var/lib/postgresql/9.1/main/server.key 2048# Remove the passphrasesudo -u postgres openssl rsa -in /var/lib/postgresql/9.1/main/server.key -out /var/lib/postgresql/9.1/main/server.keysudo -u postgres chmod 400 /var/lib/postgresql/9.1/main/server.key生成PostgreSQL服务器证书签署请求(CSR)sudo -u postgres openssl req -new -nodes -key /var/lib/postgresql/9.1/main/server.key -days 3650 -out /tmp/server.csr -subj ‘/C=SE/ST=Stockholm/L=Stockholm/O=Trustly/CN=postgres ‘用CA私钥签署PostgreSQL服务器证书请求sudo openssl req -x509 \\-key /etc/ssl/private/trustly-ca.key \\-in /tmp/server.csr \\-out /var/lib/postgresql/9.1/main/server.crtsudo chown postgres:postgres /var/lib/postgresql/9.1/main/server.crt 创建根(root)证书=PostgreSQL服务器证书+CA证书sudo -u postgres sh -c ‘cat /var/lib/postgresql/9.1/main/server.crt /etc/ssl/certs/trustly-ca.pem > /var/lib/postgresql/9.1/main/root.crt‘sudo cp /var/lib/postgresql/9.1/main/root.crt /usr/local/share/ca-certificates/trustly-postgresql.crtsudo update-ca-certificates 授权访问CREATE GROUP sslcertusers;ALTER GROUP sslcertusers ADD USER joel; # /etc/postgresql/9.1/main/pg_hba.conf:hostssl nameofdatabase +sslcertusers 192.168.1.0/24 cert clientcert=1 重启PostgreSQLsudo service postgresql restartPostgreSQL客户端设置从PostgreSQL服务器上复制根证书mkdir ~/.postgresqlcp /etc/ssl/certs/trustly-postgresql.pem ~/.postgresql/root.crt生成PostgreSQL客户端私钥openssl genrsa -des3 -out ~/.postgresql/postgresql.key 1024 # If this is a server, remove the passphrase:openssl rsa -in ~/.postgresql/postgresql.key -out ~/.postgresql/postgresql.key 生成PostgreSQL客户端证书签署请求并签署# Replace "joel" with username:openssl req -new -key ~/.postgresql/postgresql.key -out ~/.postgresql/postgresql.csr -subj‘/C=SE/ST=Stockholm/L=Stockholm/O=Trustly/CN=joel‘sud o openssl x509 -req -in ~/.postgresql/postgresql.csr -CA /etc/ssl/certs/trustly-ca.pem -CAkey /etc/ssl/private/trustly-ca.key -out ~/.postgresql/postgresql.crt -CAcreateserialsudo chown joel:joel -R ~/.postgresqlsudo chmod 400 -R ~/.postgresql/postgresql.key。

pgpool pgpool_authentication_method -回复

pgpool pgpool_authentication_method -回复

pgpool pgpool_authentication_method -回复题目:深入探究Pgpool的身份验证方法引言:Pgpool是一个流行的开源连接池和负载均衡工具,尤其为PostgreSQL数据库提供了高可用性和性能的增强功能。

其中的身份验证方法是确保用户安全访问数据库的重要组成部分。

在本文中,我们将一步一步地探讨Pgpool的身份验证方法,并深入了解如何在配置Pgpool时选择正确的身份验证方法,以满足用户的需求。

第一部分:了解Pgpool的身份验证方法1. "trust"身份验证方法:- 描述:此身份验证方法允许任何用户通过身份验证,并且不需要密码。

- 适用场景:仅在特定安全环境下使用,例如测试或内部网络,不建议在生产环境中使用。

2. "reject"身份验证方法:- 描述:该身份验证方法拒绝所有用户的登录尝试。

- 适用场景:在特殊情况下,如进行维护期间,防止用户对数据库进行访问。

3. "md5"身份验证方法:- 描述:当用户登录时,Pgpool将提取其提供的密码,并使用MD5算法对其进行哈希,然后与存储在配置文件中的哈希进行比较。

- 适用场景:在需要密码保护的生产环境中使用,提供适度的安全性。

4. "password"身份验证方法:- 描述:此身份验证方法要求用户在登录时输入密码。

Pgpool将检查输入的密码是否与存储在配置文件中的密码匹配。

- 适用场景:在需要更高安全性的生产环境中使用。

5. "pam"身份验证方法:- 描述:使用PAM(Pluggable Authentication Modules)机制对用户进行身份验证,以允许外部身份验证方法如LDAP或Active Directory。

- 适用场景:当需要与现有身份验证系统集成时使用。

第二部分:配置Pgpool验证方法1. 编辑pgpool.conf文件:- 在配置文件中,找到参数“authentication_method”。

postgres 认证流程

postgres 认证流程

postgres 认证流程
PostgreSQL是一种开源的关系型数据库管理系统,它支持多种认证流程来确保只有授权用户可以访问数据库。

下面将介绍PostgreSQL认证流程的主要步骤。

首先,在进行认证之前,需要在PostgreSQL中创建一个数据库角色(role)。

角色可以是超级用户、普通用户或者是组的成员。

每个角色都有一个唯一的用户名和密码,用于进行身份验证。

其次,一旦用户提交登录请求,PostgreSQL会根据认证配置文件中的规则进行身份验证。

认证配置文件通常位于数据库服务器的配置文件夹中,具体的位置取决于系统的设置。

PostgreSQL支持多种认证方法,包括trust、reject、md5等。

其中,trust方法是一种不需要密码的认证方式,只要连接请求来自可信任的IP地址,就会被自动接受。

reject方法则完全拒绝连接请求,而md5方法是一种常用的密码验证方式,它使用基于加密的MD5算法对密码进行加密,并与数据库中的保存的密码进行匹配。

在md5认证方式中,用户在连接时需要提供用户名和密码。

数据库服务器会将用户提供的密码与数据库中保存的密码进行比对,如果匹配成功,则认证通过,否则认证失败。

除了以上的身份验证方法,还可以使用其他的认证插件,如GSSAPI,SSPI,LDAP等。

这些插件提供了额外的身份验证选项,可以根据具体需求进行配置。

总结来说,PostgreSQL的认证流程包括创建角色、选择认证方法、比对密码等步骤。

通过这些步骤,可以确保只有授权用户能够成功登录和访问数据库,提高了数据库的安全性和可靠性。

腾讯云数据库 PostgreSQL 操作指南说明书

腾讯云数据库 PostgreSQL 操作指南说明书

云数据库 PostgreSQL操作指南产品⽂档【版权声明】©2013-2023 腾讯云版权所有本⽂档著作权归腾讯云单独所有,未经腾讯云事先书⾯许可,任何主体不得以任何形式复制、修改、抄袭、传播全部或部分本⽂档内容。

【商标声明】及其它腾讯云服务相关的商标均为腾讯云计算(北京)有限责任公司及其关联公司所有。

本⽂档涉及的第三⽅主体的商标,依法由权利⼈所有。

【服务声明】本⽂档意在向客户介绍腾讯云全部或部分产品、服务的当时的整体概况,部分产品、服务的内容可能有所调整。

您所购买的腾讯云产品、服务的种类、服务标准等应由您与腾讯云之间的商业合同约定,除⾮双⽅另有约定,否则,腾讯云对本⽂档内容不做任何明⽰或模式的承诺或保证。

⽂档⽬录操作指南实例管理实例⽣命周期设置实例维护时间调整实例配置变更可⽤区设置销毁实例恢复实例下线实例重启实例升级实例升级内核⼩版本只读实例只读实例概述管理只读实例 RO 组剔除策略和负载均衡帐号管理数据库权限概述⽤户与权限操作数据库优化慢查询分析错误⽇志参数管理设置实例参数参数值限制备份与恢复备份数据下载备份克隆实例⾃动备份设置在云服务器上恢复 PostgreSQL 数据删除备份查看备份空间设置备份下载规则插件管理插件概述⽀持插件⽀持插件版本概览PostgreSQL 9.3 ⽀持插件PostgreSQL 9.5 ⽀持插件PostgreSQL 10 ⽀持插件PostgreSQL 11 ⽀持插件PostgreSQL 12 ⽀持插件PostgreSQL 13 ⽀持插件PostgreSQL 14 ⽀持插件pgAgent 插件跨库访问位图计算 pg_roaringbitmap 插件定时任务 pg_cron 插件⽹络管理⽹络管理概述修改⽹络开启外⽹地址访问管理访问管理概述授权策略语法可授权的资源类型控制台⽰例数据加密透明数据加密概述开启透明数据加密安全组管理安全组关联实例⾄安全组监控与告警监控功能告警功能标签标签概述编辑标签操作指南实例管理实例⽣命周期最近更新时间:2021-07-06 10:55:18云数据库 PostgreSQL 实例有诸多状态,不同状态下实例可执⾏的操作不同。

PostgreSQL-Linux数据库基线

PostgreSQL-Linux数据库基线
检查结果
截图
加固方案
1.备份数据库pg_hba.conf配置文件,用数据库的系统账户执行“cp -a /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf.bak”
2. 编辑pg_hba.conf配置文件,配置安全合理的认证方式.
postgres为数据库实例名,即可修改配置值为info
修改后对新会话生效,当前连接会话不生效
编码
PostgreSQL-11
名称
日志的开头记录内容配置
权重
3
检测方法
1.使用psql工具或pgAdmin工具连接到数据库
2.登录成功后执行“show log_line_prefix;”
合规判定条件
1.当结果不为空时合规,表示会记录产生该条日志的信息
编码
PostgreSQL-4
名称
账户验证超时配置
权重
1
检测方法
1.使用psql工具或pgAdmin工具连接到数据库
2.登录成功后执行“show authentication_timeout;”
合规判定条件
1.当结果小于等于60时合规,表示验证超过60秒则超时关闭
2.当结果大于60时不合规
检查结果
截图
2.编辑配置文件,找到max_connections所在的行,并修改配置值为500,即可配置最大连接数为500
3.重启数据库后生效
编码
PostgreSQL-9
名称
日志记录信息格式配置
权重
3
检测方法
1.使用psql工具或pgAdmin工具连接到数据库
2.登录成功后执行“show log_error_verbosity;”

PostgreSQL修改设置数据库的默认用户以及权限.

PostgreSQL修改设置数据库的默认用户以及权限.

PostgreSQL修改设置数据库的默认⽤户以及权限.1. 登录PG数据库.psql -U postgres界⾯效果为:[root@centos76 ~]# psql -U postgrespsql (10.7)Type "help"for help.postgres=#其实这⾥⾯有⼀个主意事项. psql 的命令执⾏其实是在环境变量⾥⾯的我这边使⽤的是rpm ⽅式安装的pg 数据库.2. 简单说⼀下pgsql 的相关命令使⽤反斜线作为命令前缀.退出 \q列出所有的数据库 \l更改当前连接的数据库 \c详细的帮助信息为:postgres=# \?General\copyright show PostgreSQL usage and distribution terms\crosstabview [COLUMNS] execute query and display results in crosstab\errverbose show most recent error message at maximum verbosity\g [FILE] or ; execute query (and send results to file or |pipe)\gexec execute query, then execute each value in its result\gset [PREFIX] execute query and store results in psql variables\gx [FILE] as \g, but forces expanded output mode\q quit psql\watch [SEC] execute query every SEC secondsHelp\? [commands] show help on backslash commands\? options show help on psql command-line options\? variables show help on special variables\h [NAME] help on syntax of SQL commands, * for all commandsQuery Buffer\e [FILE] [LINE] edit the query buffer (or file) with external editor\ef [FUNCNAME [LINE]] edit function definition with external editor\ev [VIEWNAME [LINE]] edit view definition with external editor\p show the contents of the query buffer\r reset (clear) the query buffer\s [FILE] display history or save it to file\w FILE write query buffer to fileInput/Output\copy ... perform SQL COPY with data stream to the client host\echo [STRING] write string to standard output\i FILE execute commands from file\ir FILE as \i, but relative to location of current script\o [FILE] send all query results to file or |pipe\qecho [STRING] write string to query output stream (see \o)Conditional\if EXPR begin conditional block\elif EXPR alternative within current conditional block\else final alternative within current conditional block\endif end conditional blockInformational(options: S = show system objects, + = additional detail)\d[S+] list tables, views, and sequences\d[S+] NAME describe table, view, sequence, or index\da[S] [PATTERN] list aggregates\dA[+] [PATTERN] list access methods\db[+] [PATTERN] list tablespaces\dc[S+] [PATTERN] list conversions\dC[+] [PATTERN] list casts\dd[S] [PATTERN] show object descriptions not displayed elsewhere \dD[S+] [PATTERN] list domains\ddp [PATTERN] list default privileges\dE[S+] [PATTERN] list foreign tables\det[+] [PATTERN] list foreign tables\des[+] [PATTERN] list foreign servers\deu[+] [PATTERN] list user mappings\dew[+] [PATTERN] list foreign-data wrappers\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions\dF[+] [PATTERN] list text search configurations\dFd[+] [PATTERN] list text search dictionaries\dFp[+] [PATTERN] list text search parsers\dFt[+] [PATTERN] list text search templates\dg[S+] [PATTERN] list roles\di[S+] [PATTERN] list indexes\dl list large objects, same as \lo_list\dL[S+] [PATTERN] list procedural languages\dm[S+] [PATTERN] list materialized views\dn[S+] [PATTERN] list schemas\do[S] [PATTERN] list operators\dO[S+] [PATTERN] list collations\dp [PATTERN] list table, view, and sequence access privileges\drds [PATRN1 [PATRN2]] list per-database role settings\dRp[+] [PATTERN] list replication publications\dRs[+] [PATTERN] list replication subscriptions\ds[S+] [PATTERN] list sequences\dt[S+] [PATTERN] list tables\dT[S+] [PATTERN] list data types\du[S+] [PATTERN] list roles\dv[S+] [PATTERN] list views\dx[+] [PATTERN] list extensions\dy [PATTERN] list event triggers\l[+] [PATTERN] list databases\sf[+] FUNCNAME show a function's definition\sv[+] VIEWNAME show a view's definition\z [PATTERN] same as \dpFormatting\a toggle between unaligned and aligned output mode\C [STRING] set table title, or unset if none\f [STRING] show or set field separator for unaligned query output \H toggle HTML output mode (currently off)\pset [NAME [VALUE]] set table output option(NAME := {border|columns|expanded|fieldsep|fieldsep_zero| footer|format|linestyle|null|numericlocale|pager|pager_min_lines|recordsep|recordsep_zero|tableattr|title|tuples_only|unicode_border_linestyle|unicode_column_linestyle|unicode_header_linestyle})\t [on|off] show only rows (currently off)\T [STRING] set HTML <table> tag attributes, or unset if none\x [on|off|auto] toggle expanded output (currently off)Connection\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}connect to new database (currently "postgres")\conninfo display information about current connection\encoding [ENCODING] show or set client encoding\password [USERNAME] securely change the password for a user Operating System\cd [DIR] change the current working directory\setenv NAME [VALUE] set or unset environment variable\timing [on|off] toggle timing of commands (currently off)\! [COMMAND] execute command in shell or start interactive shell Variables\prompt [TEXT] NAME prompt user to set internal variable\set [NAME [VALUE]] set internal variable, or list all if no parameters\unset NAME unset (delete) internal variableLarge Objects\lo_export LOBOID FILE\lo_import FILE [COMMENT]\lo_list\lo_unlink LOBOID large object operations3. 具体命令就是展⽰所有数据库\l效果为:gscloud=# \lList of databasesName | Owner | Encoding | Collate | Ctype | Access privileges---------------+---------------+----------+-------------+-------------+---------------------------------GSCloud1903 | GSCloud1903 | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/GSCloud1903 + | | | | | GSCloud1903=CTc/GSCloud1903展⽰所有⽤户\dggscloud=# \dgList of rolesRole name | Attributes | Member of---------------+------------------------------------------------------------+-----------GSCloud1903 | Superuser, Replication | {}创建⽤户create role zhaobsh;设置密码alter role zhaobsh with password 'Test6530';or\password zhaobsh修改属主alter database "GSCloud1903" owner to zhaobsh;增加权限grant all on database "GSCloud1903" to zhaobsh;设置是 supseruser 以及登录权限alter user zhaobsh superuser login。

PostgreSQL的配置文件及用户权限

PostgreSQL的配置文件及用户权限

PostgreSQL的配置文件及用户权限作者:小P来自:摘要:为了能够远程修改和维护PostgreSQL数据库,我们会涉及到配置文件和用户权限的问题,本文主要介绍了如何配置PostgreSQL的主要配置文件,修改用户权限,使我们能够远程打开数据库;目录1. 修改配置文件;1.1 postgresql.conf;1.2 pg_hba.conf;1.3 重新启动postgresql服务器;2. 配置用户权限;2.1 创建一个用户;2.2 创建一个数据库data1,属主为test1;2.3 创建一个数据表;2.4 修改数据表的属主;3. 关于本文;4. 更新日志;5. 参考文档;6. 相关文档;+++++++++++++++++++++++++++++++++++++++++++正文+++++++++++++++++++++++++++++++++++++++++++为了能远程使用postgresql数据库,比如说我要在网络上另外一台Windows电脑上使用pgAdmin3来管理使用该Postgresql服务器,您就需要进行一些修改,这些修改主要包括两方面的修改:一是修改Postgresql的两个配置文件,二是修改数据库的一些用户权限;1. 修改配置文件;注:记得修改任何东西之前都需要备份一下;1.1 postgresql.conf;首先我们需要修改Postgresql的配置文件postgresql.conf,该文件在数据目录/etc/postgresql/8.2/main/下,终端下执行:root@xiaop-laptop:/home/xiaop# vim /etc/postgresql/8.2/main/postgresql.conf将其中的一句:listen_address=’localhost’前面的注释#去掉,并把’localhost’该为’*’;1.2 pg_hba.conf;然后我们再来修改Postgresql的配置文件pg_hba.conf,该文件在数据目录/etc/postgresql/8.2/main/下,终端下执行root@xiaop-laptop:/home/xiaop# vim /etc/postgresql/8.2/main/pg_hba.conf在文件后面加一句:host all all 192.168.1.0/24 password这句的意思是:同网络中192.168.1.*的机器可以以密码的形式使用所有的数据库。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PostgreSQL数据库用户认证作者:小P来自:摘要:为了保证PostgreSQL数据库的安全性,我们需要对访问数据库的用户进行身份验证,本文介绍了有关于PostgreSQL数据库的用户认证的基本知识;目录1. pg_hba.conf 文件;1.1 各个字段的含义;1.2 authentication-method(认证方法);1.3 示例 ;2. 认证方法;2.1. 信任认证;2.2. 口令认证;2.3. Kerberos 认证;2.4. 基于 Ident 的认证;2.4.1. 透过 TCP/IP 的身份认证;2.4.2. 透过本地套接字的身份认证;2.4.3. Ident 映射;2.5 一个 pg_ident.conf 文件例子;2.6 PAM 认证;3. 认证问题;4. 关于本文;5. 更新日志;6. 参考文档;7. 相关文档;+++++++++++++++++++++++++++++++++++++++++++正文+++++++++++++++++++++++++++++++++++++++++++当一个客户端应用与数据库服务器进行联接时,它声明它将以哪个PostgreSQL 用户的名称进行联接,就象我们登录一台Unix 计算机一样.在SQL 环境里,活跃的数据库用户名决定数据库对象的各种访问。

因此,实际上我们要限制的是用户可以联接的数据库; 认证是数据库服务器建立客户端应用的标识,然后通过一些手段判断是否允许此客户端应用(或者运行这个客户端应用的用户)与它所要求的用户名进行联接的过程; PostgreSQL 提供多种不同的客户端认证方式.认证某个特定客户端联接所使用的方法可以通过基于(客户端)的主机地址,数据库和用户的方式进行选择;一些认证方法还允许你通过用户名进行限制; PostgreSQL 用户名在逻辑上是和服务器运行的操作系统用户名相互独立的.如果某个服务器的所有用户在那台服务器机器上也有帐号,那么给数据库用户赋与操作系统用户名是有意义的.不过,一个接收远程访问的服务器很有可能有许多没有本地帐号的用户,因而在这种情况下数据库用户和操作系统用户名之间不必有任何联系;1. pg_hba.conf 文件;客户端认证是由数据目录里的文件pg_hba.conf 控制的,比如: /etc/postgresql/8.2/main/pg_hba.conf (hba 的意思是host-based authentication:基于主机的认证.)在initdb初始化数据目录的时候,它会安装一个缺省的文件; 文件pg_hba.conf 的常用格式是一套记录,每行一条。

空白行行被忽略,井号( "#" )开头的注释也被忽略。

一条记录是由若干用空格和/或tab 分隔的字段组成。

如果字段用引号包围,那么它可以包含空白.记录不能夸行存在; 每条记录声明一种联接类型,一个客户端IP 地址范围(如果和联接类型相关的话),一个数据库名,一个用户名字,以及对匹配这些参数的联接使用的认证方法.匹配联接类型,客户端地址和联接企图请求的数据库名和用户名的第一条记录将用于执行认证.这个处理过程没有"跨越"或者"回头"的说法∶如果选择了一条记录而且认证失败,那么将不考虑后面的记录.如果没有匹配的记录,那么访问将被拒绝.每条记录可以下面三种格式之一: local database userauthentication-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]1.1 各个字段的含义;local这条记录匹配通过Unix 域套接字进行的联接企图.没有这种类型的记录,就不允许Unix 域套接字的联接。

host这条记录匹配通过TCP/IP 网络进行的联接尝试.请注意,除非服务器是带着-i 选项或者打开了postgresql.conf 里面的tcpip_socket 配置参数集启动的,否则TCP/IP 联接是被禁止掉的.hostssl这条记录匹配通过在TCP/IP 上进行的SSL 联接企图.host 记录可以匹配SSL 和非SSL 的联接企图,但hostssl 记录需要SSL 联接。

要使用这个选项,制作服务器的时候必须打开SSL 支持.而且在服务器启动的时候,必须打开在postgresql.conf里的ssl选项。

database声明记录所匹配的数据库。

值all 表明该记录匹配所有数据库,值sameuser表示如果被请求的数据库和请求的用户同名,则匹配。

samegroup 表示请求的用户必须是一个与数据库同名的组中的成员。

在其他情况里,这就是一个特定的PostgreSQL 的名字。

我们可以通过用逗号分隔的方法声明多个数据库。

一个包含数据库名的文件可以通过对该文件前缀@ 来声明.该文件必需和pg_hba.conf 在同一个目录;user为这条记录声明所匹配的PostgreSQL用户.值all 表明它匹配于所有用户.否则,它就是特定PostgreSQL 用户的名字.多个用户名可以通过用逗号分隔的方法声明.组名字可以通过用+ 做组名字前缀来声明.一个包含用户名的文件可以通过在文件名前面前缀@ 来声明.该文件必需和pg_hba.conf 在同一个目录;IP-addressIP-mask这两个字段包含标准的点分十进制表示的IP地址/掩码值。

(IP地址只能用数字的方式声明,而不能用域名或者主机名。

)它们俩放在一起,声明了这条记录匹配的客户机的IP 地址。

准确的逻辑是(actual-IP-address xor IP-address-field) and IP-mask-field 对于要匹配的记录必需为零.(当然,IP地址是可以欺骗的,但是这个考虑在PostgreSQL 的范围之外。

)这些域只适用于host 和hostssl 记录;1.2 authentication-method(认证方法);trust无条件地允许联接.这个方法允许任何可以与PostgreSQL 数据库联接的用户以他们期望的任意PostgreSQL 数据库用户身份进行联接,而不需要口令。

reject联接无条件拒绝.常用于从一个组中"过滤"某些主机.md5要求客户端提供一个MD5 加密的口令进行认证.这个方法是允许加密口令存储在pg_shadow里的唯一的一个方法.crypt类似md5 方法,只是用的是老式的crypt 加密认证,用于7.2 以前的客户端.对于7.2 以及以后的客户端,我们建议使用md5.password和"md5"一样,但是口令是以明文形式在网络上传递的.我们不应该在不安全的网络上使用这个方式;krb4用Kerberos V4 认证用户.只有在进行TCP/IP 联接的时候才能用;krb5用Kerberos V5 认证用户.只有在进行TCP/IP 联接的时候才能用;ident获取客户的操作系统名(对于TCP/IP 联接,用户的身份是通过与运行在客户端上的ident 服务器联接进行判断的,对于本地联接,它是从操作系统获取的。

)然后检查一下,看看用户是否允许以要求的数据库用户进行联接,方法是参照在ident 关键字后面声明的映射;如果你使用了sameuser 映射,那么假设用户名是相等的。

如果没有声明这个关键字,则在与pg_hba.conf 同目录的pg_ident.conf 文件中找出映射名。

如果这个文件里包含一条记录标识着ident提供的用户名和请求的PostgreSQL 用户名的映射,那么联接被接受;对于本地联接,只有在系统支持Unix域套接字信任证的情况下才能使用(目前是Linux,FreeBSD,NetBSD,OpenBSD,和BSD/OS);pam使用操作系统提供的可插入的认证模块服务(Pluggable Authentication Modules)(PAM)来认证;1.3 示例;因为认证时系统是为每个联接请求顺序检查pg_hba.conf 里的记录的,所以这些记录的顺序是非常关键的.通常,靠前的记录有比较严的联接匹配参数和比较弱的认证方法,而靠后的记录有比较松的匹配参数和比较严的认证方法.比如,我们一般都希望对本地TCP 联接使用trust 认证,而对远端的TCP 联接要求口令.在这种情况下我们将trust 认证方法用于来自127.0.0.1 的联接,这条记录将出现在允许更广泛的客户端IP 地址的使用口令认证的记录前面; 注: 不要禁止超级用户访问template1 数据库。

各种工具命令都需要访问template1; 在启动和postmaster 收到SIGHUP 信号的时候,系统都会重新装载pg_hba.conf 文件.如果你在活跃的系统上编辑了该文件,你就需要用kill 向postmaster 发一个SIGHUP信号,好让它重新读取该文件; 下面是pg_hba.conf 的一个例子:# 允许在本机上的任何用户使用 Unix 域套接字(本地连接的缺省)# 以任何身份联接任何数据库### TYPE DATABASE USER IP-ADDRESS IP-MASK METHODlocal all all trust# 和上面相同,但是使用的是自环的(loopback)TCP/IP 连接## TYPE DATABASE USER IP-ADDRESS IP-MASK METHODhost all all 127.0.0.1 255.255.255.255 trust# 同样,但用的是 Unix-套接字联接local all all trust# 允许 IP 地址为 192.168.93.x 的任何主机与数据库# "template1" 相连,用与他们在自己的主机上相同 ident 的用户名标识他自己# (通常是他的 Unix 用户名)# TYPE DATABASE USER IP-ADDRESS IP-MASK METHODhost template1 all 192.168.93.0 255.255.255.0 ident sameuser# 允许来自主机 192.168.12.10 的用户与 "template1" 数据库联接,# 只要该用户提供了在正确的口令.# TYPE DATABASE USER IP-ADDRESS IP-MASK METHODhost template1 all 192.168.12.10 255.255.255.255 md5# 如果前面没有其它 "host" 行,那么下面两行将拒绝所有来自# 192.168.54.1 的联接请求 (因为前面的记录先匹配# 但是允许来自互联网上其它任何地方的有效的 Kerberos V5 认证的联接# 零掩码表示不考虑主机 IP 的任何位.因此它匹配任何主机:# TYPE DATABASE USER IP-ADDRESS IP-MASK METHODhost all all 192.168.54.1 255.255.255.255 rejecthost all all 0.0.0.0 0.0.0.0 krb5# 允许来自 192.168.x.x 的任何用户与任意数据库联接,只要他们通过 ident 检查# 但如果 ident 说该用户是 "bryanh" 而他要求以 PostgreSQL 用户 "guest1" 联接,# 那么只有在 `pg_ident.conf' 里有 "omicron" 的映射,说 "bryanh" 允许以# "guest1" 进行联接时才真正可以进行联接.## TYPE DATABASE USER IP-ADDRESS IP-MASK METHODhost all all 192.168.0.0 255.255.0.0 ident omicron# 如果下面是用于本地联接的仅有的三行,那么它们将允许本地用户# 只和它们自己的数据库联接(数据库名和用户名同名),# 只有管理员和组"support"里的成员例外,他们可以联接到任何数据库。

相关文档
最新文档