免费预览已结束,剩余44页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
开开放放源源代代码码数数据据库库P Po os st tg gr re eS SQ QL L 的的应应用用 关关键键字字 Lunix PostgreSQL JDBC 主键 外键 PostgreSQL E/R 图 摘摘要要 PostgreSQL 是以加州大学伯克利分校计算机系开发的 POSTGRES 版本 4.2 为基础的对象关系型数据库管理系统 ( ORDBMS)。 POSTGRES 领先的许多概念只是在非常迟的时候才出 现在商业数据库中。 它提供了 SQL92/SQL99 语言的支持以及提 供了许多其他现代特性:复杂查询、触发器、视图、事务完整性、多 版本并发控制。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的:数据类型、函数、操作符、聚集函数、索引方法、过 程语言。 并且,因为许可证的灵活,任何人都可以以任何目的免费使 用,修改,和分发PostgreSQL,不管是私用,商用,还是学术研究 使用。正是在这个基础上我们对PostgreSQL 的代码、功能、规则 及其应用进行了一系列探讨。 Keyword PostgreSQL JDBC Entity-Relationship approach ForeignKey Abstraction PostgreSQL is an object-relational database management system (ORDBMS) based on POSTGRES, Version 4.2, developed at the University of California at Berkeley Computer Science Department. POSTGRES pioneered many concepts that only became available in some commercial database systems much later. It supports SQL92 and SQL99 and offers many modern features: complex queries,triggers,views,transactional integrity, multiversion concurrency control. Also, PostgreSQL can be extended by the user in many ways, for example by adding new :data types,functions ,operators,aggregate functions,index methods,procedural languages. And because of the liberal license, PostgreSQL can be used, modified, and distributed by everyone free of charge for any purpose, be it private, commercial, or academic. Its the foundation that we did some study on postgreSQLs code, functions,rules and its application. 目目 录录 1 1引言引言 POSTGRESQLPOSTGRESQL 简介简介 4 4 第一章第一章 POSTGRESQLPOSTGRESQL 的特点的特点 4 4 第二章第二章 系系统统组组成成6 6 第三章第三章 后端服务器后端服务器8 8 第四章第四章 POSTGRESQLPOSTGRESQL 数据目录和日志文件数据目录和日志文件 9 9 4.1. POSTGRESQL 数据库目录中的部分文件 .9 4.2. POSTGRESQL 日志文件 .9 第五章第五章 POSTGRESQLPOSTGRESQL 实用程序实用程序 1010 5.1 POSTGRESQL 用户实用程序:10 5.2 系统实用程序 .11 第六章第六章 POSTGRESQLPOSTGRESQL 安全性安全性 1212 6.1.安全认证.13 6.2. 用户认证14 6.2.1.Shell 用户 .15 6.2.2.网络用户.15 6.3.访问控制.16 6.3.1. 数据库超级用户16 6.3.2. 访问权限16 6.4 PG_HBA.CONF 文件.16 6.5. 认证方法22 6.5.1 信任认证.22 6.5.2 口令认证.23 6.5.3. Kerberos 认证.24 6.5.4. 基于 Ident 的认证.25 6.5.5 透过 TCP/IP 的身份认证.26 6.5.6 透过本地套接字的身份认证.26 6.5.7. Ident 映射27 6.5.7. PAM 认证27 6.5.8.用 SSL 进行安全的 TCP/IP 联接28 6.6. 认证问题30 结论:结论:3131 参考文献参考文献:3232 附录附录: :3333 引言引言 PostgreSQLPostgreSQL 简介简介 PostgreSQL 是一种复杂的对象-关系型数据库管理系统 ( ORDBMS) ,它采用的是比较经典的 C/S ( client/server)结 构,也就是一个客户端对应一个服务器端守护进程的模式。 PostgreSQL 对接口的支持也是非常丰富的。由数据库服务器提供了 统一的客户端 C 接口,而不同的客户端接口都是源自这个 C 接口,比如 ODBC, JDBC, Python, Perl , Tcl, C/C+, ESQL 等。同时PostgreSQL 拥有极其强大的扩展能力,开发人员可以很 容易地扩展数据类型,内部函数,聚集,操作符等等。因此 PostgreSQL 是目前功能最强大,特性最丰富和最复杂的自由软件数 据库系统。 作为自由软件的PostgreSQL,由于最初的目的是数据库研究, 因此不论在稳定性,性能还是使用方便方面,长期以来一直没有 得到重视,不易胜任中上规模范围内的应用范围的业务。同时还欠缺 一些比较高端的数据库管理系统需要的特性,比如联机热备份,数据 库集群,更优良的管理工具和更加自动化的系统优化功能等提 高数据库性能的机制等。因此我们希望通过对PostgreSQL 开放 源代码的剖析及应用改善其性能,使它能够成为一种优秀的,自由的, 商业数据库的替代产品。 第一章第一章 PostgreSQLPostgreSQL 的特点的特点 PostgreSQL 可以说是最富特色的自由数据库管理系统,甚至我 们也可以说是最强大的自由软件数据库管理系统。事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99, 首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中 有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和 几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很 长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行 控制系统、数据完整性、检查等特性的唯一的一种自由软件的数据库 管理系统。直到最近才有 Inprise 的 InterBase 以及 SAP 等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最 后, PostgreSQL 拥有一支非常活跃的开发队伍,目前的提交人员已 经超过三十人, 而且在许多黑客的努力下,PostgreSQL 的质 量日益提高,也从另外一个侧面上增加了人们使用 PostgreSQL 的信心,毕竟数据库管理系统不能象桌面操作系统那样 一天变 一次还让人觉得挺满意 。 从技术角度来讲,PostgreSQL 采用的是比较经典的 C/S ( client/server)结构,也就是一个客户端对应一个服务器端守护 进程的模式, 这个守护进程分析客户端来的查询请求,生成规划树, 进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客 户端的程序的编写, 由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如 ODBC, JDBC, Python, Perl , Tcl, C/C+, ESQL 等, 同时也 要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支 持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。 首先,早期的 PostgreSQL 继承了几乎所有 Ingres, Postgres, Postgres95 的问题:过于学院味,因为首先它的目的 是数据库研究,因此不论在稳定性, 性能还是使用方便方面,长 期以来一直没有得到重视,直到 PostgreSQL 项目开始以后,情 况才越来越好,目前,PostgreSQL 已经完全可以胜任任何中上规 模范围内的应用范围的业务。目前有报道的生产数据库的大小已经有 TB 级的数据量,已经逼近 32 位计算的极限。 不过学院味也 给 PostgreSQL 带来一个意想不到的好处:大概因为各大学的软硬 件环境差异太大的缘故,它是目前支持平台最多的数据库管理系统的 一种, 所支持的平台多达十几种,包括不同的系统,不同的硬件体 系。至今,它仍然保持着支持平台最多的数据库管理系统的称号。 其次, PostgreSQL 的确还欠缺一些比较高端的数据库管理系统 需要的特性,比如联机热备份,数据库集群,更优良的管理工具和更 加自动化的系统优化功能 等提高数据库性能的机制等。 但是,话说回来,PostgreSQL 拥有极其强大的扩展能力,你 可以很容易地扩展数据类型,内部函数,聚集,操作符等等,而且, 别忘了,你拥有所有的源程序, 理论上你可以做任何你可以做的 事情。因此,很多缺点,在转瞬之间就会消失也是很正常的。 总而言之, PostgreSQL 的特性已经完全可以满足绝大部分用户 的需要,而且其质量和特性仍然在日新月异地进步着,所以, 我们有理由相信在不远的将来,PostgreSQL 肯定能够成为一种 优秀的,自由的,商业数据库的替代产品。 第二章第二章 系系统统组组成成 PostgreSQL 数据库系统环境由3 个主要部分组成,如图1 所示。同一计算机上可以运行多个数据库服务器,每个服务器有一个 称为 Postmaster 的主进程。 Postmaster 进程的主要任务是管理所 有的数据库输入请求,为客户端与一个或多个数据库后端之间建立连 接。对于任何的客户端请求,如果Postmaster 确认该请求具有 合法的访问权限,它就为该请求派生一个称为“Postgres Backend”的后端进程。每一个客户端连接请求都有一个唯一的 Postgres 进程,对数据库的任何操作都有客户端发起。 绝大多数客户端应用程序都是通过客户端接口库与后端 PostgreSQL 进行连接的。客户端接口库包含一组标准的应用程 客户端进程 利用客户端接口 API 发送或接收数据库请求 客户端应用程序 客户端接口库 服务器端进程 派生 Postgres 后端 服务器进程 Postmaster 服务器进程 Postgres 后端进程 发送初始 TCP/IP 连接请求 客户端与特定服务器 持续的 TCP/IP 连接 图 1: PostgreSQL 数据库环境 序接口,这些接口负责与PostgreSQL 进行通信。虽然客户端应用 程序也可以使用TCP/IP 协议直接与PostgreSQL 进行交互,但利 用客户端接口库能更加便利地管理与服务器的连接。与 PostgreSQL 基本软件一起发布的客户端接口库有多种,最常用的一 种称为libpq;另外一种常用的接口是ODBC,在开放源代码社区 可以找到多种免费的ODBC 驱动程序。 PostgreSQL 的体系结构是相当灵活的,它允许数据库管理员使用 不同的技术同时管理运行在同一台计算机上的多个数据库 。另 外,每一个PostgreSQL 安装实例都提供一组标准的配置文件,这组 文件也符合PostgreSQL 数据库格式,通常称为template1。用 户可以对该数据库进行修改,以适用于特定的服务器和特定的应用。 这些配置信息也可以通过createdb 程序,复制到新的数据库中。 第三章第三章 后端服务器后端服务器 为客户端提供请求服务的后端服务器进程Postgre,由多个部 分组成, Postgres 后端服务器的处理过程如图2 所示。各部分之 间通过共享内存以及服务器资源实现彼此之间的通信。每个客户端请 求经过一系列的处理步骤,最终实现与PostgreSQL 数据库之间 的数据交换。Postmaster 始终在一个指定的端口(默认为 5432)监听网络请求,因此客户端应用程序与PostgreSQL 数据 库服务器之间的连接是通过Postmaster 开始建立的。 客户端与特定 Postgres 后 发送初始 TCP/IP 请求 向客户端返回查询数据 端进程的持续连接 派生 Postgre 后端进程 图 2: PostgreSQL 查询请求的处理过程 利用安全配置文件ph_hba.conf, Postmaster 验证对 Postgres 服务器或特定数据库的访问请求是否合法。如果客户请求是 合法的,系统将派生一个特定的Postgres 后端服务器进程,客户 请求将被传递到该进程。客户端与Postgres 后端进程之间的初始 连接只需由Postmaster 进行一次。一旦建立起来了连接, Postgres 后端进程将负责处理其后所有的通信。 第四章第四章 PostgreSQLPostgreSQL 数据目录和日志文件数据目录和日志文件 其数据目录默认为/var/lib/pgsql/data,数据库文件和日志 文件都存储在数据库目录中。 客户端 客户端接口库 Postmaster 服务器进程 验证查询目 获取查询数 标是否存在 传递解析后的查询树 传递查询规划 对查询目标应用已 利用统计数据评估访问 和查询树 定义的转换规则 路径和代价 传递重写过的查询树 解析查询请求 重写系统 规划优化器 查询执行器 PostgreSQL 数据 库、规则、表 4.1.4.1. PostgreSQLPostgreSQL 数据库目录中的部分文件数据库目录中的部分文件 文 件说 明 base/ 此目录包含用户自定义的数据库及预定义的模板数据库 template0 和 template1,每个数据库都拥有自己的子 目录 global/ 此目录包含PostgreSQL 内部控制文件Pg_control, 该文件用于保存事务的检查点、位置跟踪等内容 pg_clog/ 此目录包含当前事务状态,提交或不提交 pg_hba.conf PostgreSQL 用户认证所用的配置文件 pg_iden.conf PostgreSQL 用户 ident 认证所用的用户映射文件 PG_VERSION 此文件包含创建此数据目录的PostgreSQL 版本号 gp_xlog/ 此目录用于存储由WAL(预写式日志,Write-Ahead Logging)生成的日志文件 postgresql.conf 启动 postmaster 时所使用的配置文件 表 1 : 数据库目录 4.2.4.2. PostgreSQLPostgreSQL 日志文件日志文件 PostgreSQL 数据库系统采用WAL(Write-Ahead Logging,预 写式日志 )来实现日志功能,WAL 是一种实现事务日志的标准方法, 其目的是确保在数据库被修改之前,先将修改记录日志。使用 WAL 具有如下优点: ( 1) 用 WAL 可以减少写入磁盘的次数。因为修改数据库的事务在 提交时,只有日志文件需要写入磁盘;在多用户环境里,许多事 务的提交可以由日志文件一次来完成;而且日志文件是顺序写入 的,因此同步日志的空间要小的多。 ( 2) 使用 WAL 可经确保数据的完整性。由于WAL 在对数据库进 行修改之前就修改记录日志,因此在出现崩溃的情况下,我们可 以用日志来恢复数据库。 在 PostgreSQL7.3 中 WAL 是自动启用的,其日志文件默认情况 下存放在PostgreSQL 数据目录的目录中。WAL 日志文件作为一个 文件段的集合来存储,每个段16MB。文件段的名字是自然数。从 0000000000000000 开始。 第五章第五章 PostgreSQLPostgreSQL 实用程序实用程序 5.15.1 PostgreSQLPostgreSQL 用户实用程序用户实用程序: : 程序名称功 能 简 介 createdb 创建一个新的PostgreSQL 数据库,它是客户端程序psql 环境下SQL 语句 CREATEDATABASE 的 shell 脚本封装,二者 功能完全相同 createlang 在指定的PostgreSQL 数据库中添加一种新的编程语言 createuser 创建一个新的PostgreSQL 用户账户,它是客户端程序 psql 环境下SQL 语句 CREATEUSER 的 shell 脚本封装,二者 功能完全相同 dropdb 删除一个现存的PostgreSQL 数据库,它是客户端程序 psql 环境下SQL 语句 DROPDATABASE 的 shell 脚本封装, 二者功能完全相同 droplang 在指定的PostgreSQL 数据库中删除一种编程语言 dropuser 删除一个现存的PostgreSQL 用户账户,它是客户端程序 psql 环境下SQL 语句 DROPUSER 的 shell 脚本封装,二者功 能完全相同 ecpg 一个 SQL 预处理器,用于将SQL 语句嵌入C 程序 pg_dump 将 PostgreSQL 数据库导出到一个脚本文件 pg_dumpall 将所有PostgreSQL 数据库导出到一个脚本文件 pg_restore 从一个由pg_dump 和 pg_dumpall 程序导出的脚本文件中恢复 PostgreSQL 数据库 psql 一个基于命令行的PostgreSQL 交互式客户端程序 vacuumdb 清理和分析一个PostgreSQL 数据库,它是客户端程序 psql 环境下SQL 语句 VACUUM 的 shell 脚步本封装,二者 功能完全相同 表 2: 用户实用程序 用户实用程序有于执行PostgreSQL 数据库的的常规管理操作, 如创建数据库、创建数据库用户等,它们通常都是具有相同功能的SQL 语句的shell 封装腔作势。用户实用程序可以在任何计算机上运行, 连接 PostgreSQL 服务器进行相应操作,与服务器报在位置无关。一 此常用的用户实用程序如上表: 5.25.2 系统实用程序系统实用程序 系统实用程序用于完成与PostgreSQL 数据库系统相关的操 作,如初始化数据库、重置日志等。系统实用程序只能在 PostgreSQL 服务器本机上运行,不能在其他计算机上运行,以下是 一此常用的系统实用程序: P Po os st tg gr re eS SQ QL L 系系统统实实用用程程序序 程序名称功 能 简 介 initdb 创建一个用于存储数据库的PostgreSQL 数据目录,并 创建预定义的模板数据库template0 和 template1, 生成共享目录表catalog;此程序通常只在安装 PostgreSQL 时运行一次或者在需要更改PostgreSQL 数据目录位置时运行 initlocation 创建一个辅助的PostgreSQL 数据库存储区域 ipcclean 从停止的PostgreSQL 服务器中清除共享内存和孤立信号 标志 pg_ctl 启动、停止和重启PostgreSQL 服务 pg_controldata 显示 PostgreSQL 服务的内部控制信息 pg_resetxlog 重置 WAL(Write-Ahead Logging,预写式日志)日志文 件以及PostgreSQL 内部控制文件pg_control 的内容 postgres PostgreSQL 单用户模式的数据库服务 postmaster PostgreSQL 多用户模式的数据库服务 表 3: 系统实用程序 第六章第六章 PostgreSQLPostgreSQL 安全性安全性 PostgreSQL 是一个具有完善安全认证机构的多用户数据库,任何 对它的数据库的访问请求都必须经过它的安全认证之后才能进行。 当一个客户端应用与数据库服务器进行联接时,它声明它将以哪个 PostgreSQL 用户的名称进行联接, 就象我们登录一台 Unix 计算机 一样。在SQL 环境里,活跃的数据库用户名决定数据库对 象的各种访问权限, 因此,实际上我们要限制的是用户可以联接的 数据库。 认证是数据库服务器建立客户端的标识, 然后通过一些手段 判断是否允许此客户端应用(或者运行这个客户端应用的 用户) 与它所要求的用户名进行联接的过程。 PostgreSQL 提供多种不同的客户端认证方式。认证某个特定客 户端联接所使用的方法可以通过基于 (客户端 )的主机地址,数 据库和用户的方式进行选择; 一些认证方法还允许你通过用户名 进行限制。 PostgreSQL 用户名在逻辑上是和 服务器运行的操作系统用 户名相互独立的。 如果某个服务器的所有用户在那台服务器机器上 也有帐号, 那么给数据库用户赋与操作系统用户名是有意义的。不 过, 一个接收远程访问的服务器很有可能有许多没有本地操作系统 帐号的用户, 因而在这种情况下数据库用户和操作系统用户名之间 不必有任何联系。 6.1.6.1.安全认证安全认证 为了保证数据库和核心文件的安全,PostgreSQL 提供了多种 安全认证机制。 ( 1) 数据库文件保护。PostgreSQL 所有的数据库文件都受到 linux 文件和目录保护机制的保护,除了PostgreSQL 超级用户外,其他用户均不能读取。在linux 中, PostgreSQL 默认的数据库文件存放目录是 /var/lib/pgsql。默认情况下,PostgreSQL 的超级用户 的名字为postgres。只有它才能访问/var/lib/pgsql 目录。 PostgreSQL 的所有数据库对象文件都是独立的文件, 并且基本上没有采取任何加密措施。只要权限许可,任何人 都能读取并分析这些文件。因此,PostgreSQL 的数据库 必须妥善保护。需要注意的是Linux 的超级用户也能访 问并操作PostgreSQL 的数据库目录。 ( 2) 网络保护。默认情况下,客户端只能通过一个本地的 UNIX 套接字连接到数据库服务器,而不能通过TCP/IP 套接字连接。必须带-i 选项启动Postmaster 才能允许 非本地的客户端进行数据库连接。在RedHat6.x 或兼容 的 Linux 中,可以修 /etc/rc.d/init.d/postgresql 脚 本文件来允许或禁止网络连接。 ( 3) 限定通过网络连接的主机。可以通过 /var/lib/pgsql/data 中的 pg_hba.conf 文件来限制可 连接客户端的IP 地址或主机名、用户名。当然,也可以通 过其他外部认证软件包来进行客户连接的连接。 ( 4) 用户认证。 PostgreSQL 为每一个用户都赋予了一个用户 名和一个可选的口令。默认情况下,用户对不是由他们创建 的数据库没有写权限。用户可以被赋予组,而且表的访问权 限可以以组为基础进行设置。 6.2.6.2. 用户认证用户认证 用户认证是后端服务器和Postmaster 认定正在请求访问数据 的用户的过程。所有合法的PostgreSQL 用户都登记在pg_user 系统视图中(结构见表1 所示),用户认证工作就是依据这个系统 表的内容来进行的。 表 4 pg_user 系统表的结构 字段名类型意义 usenamename 用户名 usesysidinteger 用户的系统id 号 usecreatedbboolean 创建数据库的权限 usetraceboolean 跟踪权限 usesuperboolean 是否为PostgreSQL 的超级用户 usecatupdboolean passwdboolean 以 “*”表示的用户口令 pg_user 实际上不是一个真正的表,而是pg_shadow 系统表 的一个视图,定义它的命令是: select pg_shadow.usename,pg_shadow.usesysid, pg_shadow.usecreated, pg_shadow.usetrace, pg_shadow.usesuper, pg_shadow.usecatupd, *:text as passwd, pg_shadow.valuntil from pg_shadow; 对用户实际身份的验证可以通过以下两种方式进行。 6.2.1.6.2.1.ShellShell 用户用户 对于 shell 用户,后端数据库服务器进行setuid 调用,将用 户标识转换为用户之前检查用户的有效用户标识号。有效的用户标 识号被当作访问控制检查的基础,不再进行其他的认证。 6.2.2.6.2.2.网络用户网络用户 在网络环境中,任何人都可以访问Postmaster 进程的 TCP 端口。数据库管理员可以配置数据库目录中的 pg_hba.conf 文件, PostgreSQL 的安全验证机构根据这个文件 来验证访问的合法性。 每个正在访问数据库的客户端必须被pg_hba.conf 中的 一条记录涵盖,否则所有从该客户端发来的连接请求都将被拒绝, 错误信息为 “User authentication failed”(用户认证失败) 。 6.3.6.3.访问控制访问控制 Postgres 提供允许用户限制其他用户对他提供的数据的访问的 机制。 6.3.1.6.3.1. 数据库超级用户数据库超级用户 数据库超级用户(也就是说,拥有设置了 pg_user.usesuper 字段的用户)超越下面描述的所有访问控 制,只有两点例外:如果用户没有设置了的 pg_user.usecatupd 字段,则不允许手工更新系统表,第二 点是决不允许删除(或者更改表结构)系统表。 6.3.2.6.3.2. 访问权限访问权限 限制用户对表的读,写和设置规则的的访问权限在 grant/revoke(l) 里描述。 6.3.3.6.3.3.表删除和表结构修改表删除和表结构修改 象 a al lt te er r, d dr ro op p t ta ab bl le e,和 d dr ro op p i in nd de ex x 这样的删除 或者修改现有表的命令只能由表的所有者执行。还有上面提到的, 决不允许对系统表进行这些操作。 6.46.4 pg_hba.confpg_hba.conf 文件文件 客户端认证是由数据目录里的文件pg_hba.conf 控制的,比 如, /usr/local/pgsql/data/pg_hba.conf。 ( HBA 的意思是 host-based authentication:基于主机的认证。) 在 initdb 初始化数据目录的时候,它会 安装一个缺省的文件。 文件 pg_hba.conf 的常用格式是一套记录, 每行一条。空 白行行被忽略,井号( # )开头的注释 也被忽略。一条记录是由 若干用空格和/或 tab 分隔的字段组成。 如果字段用引号包围, 那么它可以包含空白。记录不能夸行存在。 每条记录声明一种联接类型,一个客户端 IP 地址范围 (如果和联接类型相关的话),一个数据库名,一个用户名字, 以及对匹配这些参数的联接使用的认证方法。 第一条匹配联接 类型,客户端地址和联接企图请求的数据库名和用户名的记录 将用于执行认证。这个处理过程没有“跨越 “或者 “回头 “的说法 如果选择了一条记录而且认证失败,那么 将不考虑后面的记录。 如果没有匹配的记录,那么访问将被拒绝。 每条记录可以下面七种格式之一 local database user 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 host database user IP-address/IP-masklen authentication-method authentication-option hostssl database user IP-address/IP-masklen authentication-method authentication-option hostnossl database user IP-address/IP-masklen authentication-method authentication-option P Pg g_ _h hb ba a. .c co on nf f 的的字字段段含含义义 , ,如如下下各各表表 : : 字 段说 明 指明记录所匹配的连接类型,可选的值包括: local 此种类型的记录可以匹配通过Linux 套接字 (Socket)进行的连接尝试。 如果没有该种类型的记录,将不允许通过Linux 套接字的连接。从 数据库服务器本机进行的连接即是通过Linux 套接 字来完成 TYPE host 此种类型的记录可以匹配通过TCP/IP 网络进行的连 接尝试。默认时,TCP/IP 连接是被禁用的,可以通 过编辑postgresql.conf 文件中的 tcpip_socket 选项来启用 hostssl 此种类型的记录可以匹配通过TCP/IP 上进行的 SSL(安全套接字) 连接尝试。Host 记录可以匹配SSL 和非 SSL 的连 接尝试,但hostssl 只能匹配SSL 连接。默认时,SSL 连接也是被禁用的, 可以通过编 辑 postgresql.conf 文件中的ssl 选项来启用 hostnoss l 这个记录类似hostssl,但是作用正相反:它只 匹配那些 不使用 SSL 的连接请求 表 5: pg_hba.conf类型 字 段说 明 指明记录所匹配的数据库,可选的值包括: all 表明该记录匹配所有数据库 sameuser 表明如果被请求的数据库和请求的用户同名,则匹 配 samegroup 表明请求的用户必须是一个与数据库同名的组中的 成员方能匹配 DATABASE 特定的 PostgreSQL 数据库名称 表明该记录匹配指定的PostgreSQL 数据库。可 以通过用逗号(“, ” )分隔的方法来指定多个数 据库,数据库名称也可以来自一个由前缀指明 的包含数据库名称的文件,该文件必须与 pg_hba.conf 在同一个目录下 表 6: pg_hba.conf 数据库 字 段说 明 指明记录所匹配的PostgreSQL 用户,可选的值包括: all 表明该记录匹配所有数据库 USER 表明该记录匹配指定的PostgreSQL 用户。可以 通过用逗号(“, ” ) USER 特定的 PostgreSQL 用户 分隔的方法来指定多个用户,用户名也可以来自一个 由前缀 指明的包含用户名的文件,该文件必须与 pg_hba.conf 在同一个目录下:用户组可以通过用 加号( “+” )作为组名称的前缀来指定 表 7: pg_hba.conf 用户 字 段说 明 IP_SDDRESS IP_MASK 这两个字段包含标准的点分十进制表示的 IP 地 址 /掩码值。 ( IP 地址只能用数字的方式声明,而 不 能用域名或者主机名。) 它们俩放在一起,声明 了 这条记录匹配的客户机的 IP 地址。 准确的逻辑 是 (actual-IP-address xor IP-address- field) and IP-mask-field 对于要匹配的记录必需为零。 以 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-masklen 这个域可以用于作为 IP-mask 表示法的替补。 它是一个整数,声明在掩码中设置的从高向低排的掩码 位数。 这个数值必须介于 0 和 32 (对应 IPv4 地址)或者 124 (对应IPv6 地址)之间。 (包 含 32 和 124)。 0 将匹配任意地址,儿 32 (或 者是 124)将只匹配一个主机。 同样的匹配逻辑将 用于一个点分的 IP-mask。 在 IP-address 和 / 或者 / 和 IP-masklen 之间不能有空白,否则文件将无法正确分析。 这个字段只适用于 host, hostssl, 和 hostnossl 记录。 表 8: pg_hba.conf IP 表 9:pg_hba.conf 认证方法 字 段说 明 指明记录通过该当记录连接所使用的认证方法,可选的值包括: trust 无条件允许连接,此认证方法允许任何可以 PostgreSQL 数据库连接的用 户以其期望的任意 PostgreSQL 数据库用户身份进行连接,而不需要口令 reject连接无条件拒绝,常用于从一个组中过滤某些主机 md5 要求提供一个 MD5 加密的口令进行认证,此认证方法是允许加密口令存储 在 pg_shadow 表里的惟一方法 crypt 与 MD5 方法类似,但是使用老式的 crypt 加密认证,用于 PostgreSQL 7.2 以前的客户端,对于 PostgreSQL7.2 以及以后的客户端,建议使用 md5 password 与 MD5 方法类似,但口令是以明文形式在网络上传递的,建议不要在不安 全在网络中使用此种认证方法 krd4匹配使用 Kerberos V4 认证用户,只在进行 TCP/IP 连接时才可用 Krb5匹配使用 Kerberos V5 认证用户,只在进行 TCP/IP 连接时才可用 获取客户端的操作系统用户名进行认证。对于 TCP/IP 连接,是通过与客 户端主机连接获取的;对于本地连接。则是从操作系统获取的。获取初始 化连接的操作系统用户名之后,PostgreSQL 将其与 ident 关字后面指定 的用户身份映射进行比较,以决定用户是否允许以请求的数据库用户身份 进行连接。Ident 关键字后面指定的用户身份映射可以是如下的值之一: sameuser 表明任何操作系统用户都能够以同名数据库用户进行连接 PostgreSQL 将在 Pg_ident.conf 文艺界件中查找与该映射 名称相匹配的记录,该文件与 pg_hba.conf 文件在同一目录 下。Pg_ident.conf 文件中的记录是需要手工创建,记录格 式为: MAPNAME IDENT_USERNAME PG_USERNAME Pg_ident.conf 文件中记录的各个字段含义如下: MAPNAME 指定 pg_hba.conf 文件中引用的映射名 称 IDENT_USERNAME指定操作系统用户 PG_USERNAME 指定IDENT_USERNAME字段指定操作系统 用户允许以哪个数据库用户的身份进行 连接 ident 特定的映 射名称 同一个 Pg_ident.conf 可以重复用于指定多条用户映射;一 个操作系统用户可以映射为多个数据库用户,反之亦然。如 果 Pg_ident.conf 文件中包含一条 Pg_ident.conf 指定的映 射名与 pg_hba.conf 文件中 ident 关健字后面指定的映射名 相匹配记录,并且该当记录标识着 ident 提供的操作系统用 户名与请求的 PostgreSQL 用户名的映射,则连接被接受 METHOD pam 使用操作系统提供的可插入的认证模块服务(Pluggable Authentication Modules,PAM) 字 段说 明 OPTION 因为认证时系统是为每个联接请求顺序检查 pg_hba.conf 里的记录的,所以这些记录的顺序 是非 常关键的。通常,靠前的记录有比较严的联接匹配参数和比 较弱的 认证方法,而靠后的记录有比较松的匹配参数和比 较严的认证方法。 比如,我们一般都希望对本地 TCP/IP 联接使用 trust 认证, 而对远端的 TCP/IP 联接要求口令。在这种情况下我们将 trust 认证方法 用于来自 127.0.0.1 的联接,这条记录将出现在 允 许更广泛的客户端 IP 地址的使用口令认证的记录前面。 表 10: : pg_hba.conf 选项 主主要要 : : 不要禁止超级用户访问template1 数据库。各种工具 命令都 需要访问template1。 在启动和主服务器进程( postmaster )收到SIGHUP 信号 的时候, 系统都会重新装载 pg_hba.conf 文件。 如果你在活 跃的系统上编辑了该文件,你就需要用 kill 向 postmaster 发一个 SIGHUP 信号,好让它重新读取该文件。 6.5.6.5. 认证方法认证方法 6.5.16.5.1 信任认证信任认证 如果声明了 trust (信任 )认证模式, PostgreSQL 就假设 任何可以联接到 服务器的人都可以以任何他声明的数据库用户 (包括数据库超级用户) 这个方法应该用于那些在联接到服务器已 经有足够操作系统层次保护 的环境里。 trust 认证对于单用户工作站的本地联接是非常合适和方便的。 通常它本身并不适用于多用户环境的机器。 不过,即使在多用 户的机器上,你也可以使用 trust, 只要你利用文件系统权限限 制了对服务器的 Unix 域套接字文件的访问。 要做这些限制, 你可以设置 参数 unix_socket_permissions。或者你可以 设 置 unix_socket_directory,把 Unix 域套接字文件放在 一个 经过恰当限制的目录里。 设置文件系统权限只能帮助 Unix 套接字联接。它不会限制本 地 TCP/IP 联接; 因此,如果你想利用文件系统权限来控制本地 安全,那么删除 pg_hba.conf 里的 host . 127.0.0.1 . 行,或者把它改为一个 非 trust 的认证方法。 trust 认证模式只适合 TCP/IP 连接,只有在你信任那些在 pg_hba.conf 里声明为 trust,允许联接到服务器的行上的所有机 器 上面的所有用户的时候才是合适的。很少有理由使用 trust 作为任何除来自localhost(127.0.0.1) 以外的 TCP/IP 联接的认证方式。 6.5.26.5.2 口令认证口令认证 以口令为基础的认证方法包括 md5, crypt, 和 password。这些方法操作上非常类似,只不过口令通过 联接传 送的方法不同。如果你担心口令被窃听(“sniffing“), 那么 md5 比较合适,如果你必需支持 7.2 以前的老的客户端, 那 么可以选 crypt。如果我们在开放的互联网上使用, 应该尽可 能避免使用 password(除非你在联接上使用了 SSL, SSH,或 者其他通讯安全的联接封装。) PostgreSQL 数据库口令与任何操作系统用户口令无关。 各个数据库用户的口令是存储在pg_shadow 系统表里面的。 口 令可以用 SQL 语言命令CREATE USER 和 ALTER USER 等管理, 也就是说, C CR RE EA AT TE E U US SE ER R f fo oo o W WI IT TH H P PA AS SS SW WO OR RD D s se ec cr re et t ; ;。缺 省时,如果没有明确地设置口令,存储的口令是 空并且该用户 的口令认证总会失败。 要限制允许访问某数据库的用户集, 可以在 pg_hba.conf 中 的 user 字段列出这些用户。 6.5.3.6.5.3. Kerberos 认证认证 Kerberos 是一种适用于在公共网络上进行分布计算的工业标准 的安全 认证系统。 对 Kerberos 系统的叙述远远的超出了本文 档的范围; 概括说来它是相当复杂(同样也相当强大)的系统。 要使用 Kerberos,对它的支持必须在制作的时候打开。 Kerberos 4 和 5 都被支持, 不过我们在一次制作中只能支持一 个版本。 PostgreSQL 运行时象一个普通的 Kerberos 服务。 服务 主的名字是 servicename/hostnamerealm, 这里的 servicename 是 postgres (除非在配置时用 ./configure - with-krb-srvnam=whatever 选择了一个不同的 hostname)。 hostname 是服务器及其全称的主机名字。 服务器的域是服务器 机器的优先域。 客户主自给必须用它们自己的 PostgreSQL 用户名作为 第 一个部件,比如 pgusername/otherstuffrealm。 目前 PostgreSQL 没有检查客户的域;因此如果你打开了 跨域的认 证,那么在任意域里任何可以和你通讯的主都会被接受。 确认你的服务器的密钥文件是可以被 PostgreSQL 服务器帐 户读取(最好就是只读的)。密钥文件(keytab)的位置是 用 运行时配置参数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025河南新乡辉县市大成高级中学高中物理教师、高中俄语老师招聘历年真题汇编带答案解析
- 2025福建龙岩人民医院赴高校招聘医学类紧缺急需专业毕业生4人历年真题汇编及答案解析(夺冠)
- 2026中国东方航空股份有限公司地面服务部地面服务人才校园招聘历年真题汇编附答案解析
- 2025昆明市呈贡区审计局编外合同制审计专员招聘(1人)备考题库附答案解析
- 企业费用报销与预算对比分析模板
- 医药行业药品研发员科研成果绩效考核表
- 驾校科目一理论考试题库大全-下(判断题)
- 固定资产管理台账及盘点报表
- 2025年电子商务师(中级)职业技能鉴定参考试题库(含答案)
- 电子商务运营经理工作效果评价表
- 加油站冬季安全培训课件
- (一诊)泸州市高2023级(2026届)高三第一次教学质量诊断性考试历史试题(含答案)
- 2026-2031中国国债市场竞争现状研究报告
- 工商企业管理毕业设计
- 2025年运输经理招聘面试参考题库及答案
- 北欧风格室内设计讲解
- 用友U8-ERP系统岗位操作规范手册
- 2025专职消防员聘用合同
- 2025亚洲烟草产业市场供求状况及投资前景规划研究报告
- 边界联检工作总结
- XX集团董事会2025年度工作报告
评论
0/150
提交评论