Postgresql配置文件
- 格式:doc
- 大小:42.50 KB
- 文档页数:10
PostgreSQL安装及部分参数说明目录1PostgreSQL安装及配置 (3)1.1Postgresql安装 (3)1.2Postgresql配置 (7)1.3启停服务 (18)1PostgreSQL安装及配置1.1Postgresql安装建立用户:groupadd postgresuseradd-g postgres-d/home/postgres postgres(可指定-s/bin/bash)建立目录mkdir postgreschown-R postgres:postgres postgrespasswd XXXXXX安装PostgreSQL,需要提前安装好gcc编译环境和readline-devel软件从官网下载PostgreSQL软件包,官网地址为:https:///ftp/source/上传到服务器上postgres用户下,解压开始编译,configure后面参数根据实际可自行添加,请参考configure帮助信息。
./configure --with-zlib --enable-nls --enable-integer-datetimes --with-openssl --enable-debug --enable-cassert --prefix=/home/postgres/app/pg103/make worldmake install-world编译完成之后创建数据目录pgdata,目录名称可自行修改mkdir pgdatachown700pgdata添加环境变量vi.bash_profileexport PGHOME=/home/postgres/app/pg103/export PGDATA=/home/postgres/pgdata/LD_LIBRARY_PATH中加上$PGHOME/libPATH中添加$PGHOME/bin生效环境变量..bash_profile初始化数据库initdb-D/home/postgres/pgdata/-E UTF-8--locale=zh_CN.utf8cd/home/postgres/pgdata/修改postgresql.conf控制文件建议各个节点之间做ssh互信(root和postgres)和时间同步。
PostgreSQL数据库的安装和配置PostgreSQL是一种强大的开源关系型数据库管理系统,被广泛应用于各种规模的企业和项目中。
本文将介绍如何进行PostgreSQL数据库的安装和配置,让您能够轻松地开始使用这一强大的数据库系统。
一、安装PostgreSQL数据库要安装PostgreSQL数据库,您需要按照以下步骤进行操作:1. 下载PostgreSQL软件包:您可以在PostgreSQL官方网站上找到适合您操作系统的安装包,并进行下载。
确保选择最新版本的软件包以获得更好的性能和安全性。
2. 运行安装程序:运行下载的安装程序,并按照向导提示进行操作。
您可以选择安装位置、创建数据库集群的位置以及设置管理员用户的密码等。
3. 完成安装:安装程序将自动完成数据库软件的安装过程。
一旦安装完成,您将可以在您选择的安装位置找到PostgreSQL数据库的执行文件,并可以通过命令行或图形界面进行数据库管理。
二、配置PostgreSQL数据库安装完成后,您需要进行一些配置以确保PostgreSQL数据库可以正常运行并满足您的需求。
以下是配置PostgreSQL的关键步骤:1. 修改配置文件:在PostgreSQL的安装目录中,您将找到一个名为postgresql.conf的配置文件。
您可以使用任何文本编辑器打开该文件,并根据自己的需求对其进行修改。
2. 设置监听地址:在配置文件中,您可以找到一个名为listen_addresses的选项。
这决定了PostgreSQL数据库监听的IP地址。
如果您计划在本地访问数据库,您可以将其设置为localhost。
如果您希望从其他计算机上访问数据库,则可以将其设置为数据库服务器的IP地址。
3. 配置端口号:在配置文件中,您还可以找到一个名为port的选项,该选项确定了数据库服务器监听的端口号。
默认情况下,端口号为5432,您可以根据需要进行修改。
4. 设定认证方式:在配置文件中,您可以找到一个名为pg_hba.conf的文件。
postgresql配置参数和概念解释1.⾼可⽤服务可⽤时间量,冗余是⾼可⽤的基础2.备⽤数据库备⽤数据库的想法是保留始终具有相同数据的⽣产数据库的副本,并且可以在故障发⽣时使⽤备份数据库。
有以下⼏种⽅式对备⽤数据库进⾏分类。
根据复制的性质:物理备份数据库:复制磁盘块逻辑备份数据:复制数据流更改备份的同步性:异步:存在数据丢失的可能性同步:不存在数据丢失的可能性,主设备的提交等待备⽤设备的响应。
3.件⽬录结构postgresql的磁盘布局:data/base存放各数据库实例对应⽂件夹,命名⽅式是数据库的OID,select oid,datname from pg_database;可以查询每个数据库的OID,对应的可以在base⽬录下找到这个数据库的⽂件夹。
数据表使⽤表名对应的relfilenode作为⽂件名存放在数据库⽂件夹下,select relfilenode,relname from pg_class; 可以查询表的relfilenode,然后在相应的数据库⽂件夹下可以看到这个表的⽂件,该⽂件⽤于存储表的数据,最⼤1G,超出⾃动扩展,扩展名为relfilenode.1,relfilenode.2 ...为了提⾼I/O性能,pg总是以8K⼤⼩的块执⾏IO。
因此数据⽂件总是以8K的步长增长。
(物理复制时,双⽅需要使⽤相同的块⼤⼩)global -全局数据包括全局系统表pg_clog -提交⽇志提交⽇志是⼀个⼯作数据库实例的⼀个重要组成部分。
它存储系统上进⾏的事物的状态。
⼀个事物有四种状态(TRANSACTION_STATUS_IN_PROGRESS,TRANSACTION_STATUS_COMMITTED,TRANSACTION_STATUS_ABORTED,TRANSACTION_STATUS_SUB_COMMITTED), 如果⼀个事物的提交⽇志的状态是不可⽤,postgresql将不知道是否应该被看到。
postgresql中的参数查看和修改⽅式1.查看参数⽂件的位置使⽤show 命令查看,⽐较常⽤的show config_file.此还可以查看pg_settings数据字典.test=# show config_file;config_file------------------------------/data/pgdata/postgresql.conf(1 row)test=# show hba_filetest-# ;hba_file--------------------------/data/pgdata/pg_hba.conf(1 row)test=# show ident_file ;ident_file----------------------------/data/pgdata/pg_ident.conf2.查看当前会话的参数值可以使⽤show命令或者查看pg_settings字典.使⽤show all可以查看全部的参数值.show 参数名查看指定参数test=# show all;-------------------------------------+------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------- allow_system_table_mods | off | Allows modifications of the structure of system tables.application_name | psql | Sets the application name to be reported in statistics and logs.archive_command | test ! -f /data/archive/%f && cp %p /data/archive/%f | Sets the shell command that will be called to archive a WAL file.archive_mode | on | Allows archiving of WAL files using archive_command.archive_timeout | 0 | Forces a switch to the next WAL file if a new file has not been started within N seconds.array_nulls | on | Enable input of NULL elements in arrays....test=# show work_mem;work_mem----------4MB(1 row)test=#Expanded display is on.test=# select * from pg_settings where name in ('work_mem')test-# ;-[ RECORD 1 ]---+----------------------------------------------------------------------------------------------------------------------name | work_memsetting | 4096unit | kBcategory | Resource Usage / Memoryshort_desc | Sets the maximum memory to be used for query workspaces.extra_desc | This much memory can be used by each internal sort operation and hash table before switching to temporary disk files.context | uservartype | integersource | defaultmin_val | 64max_val | 2147483647enumvals |boot_val | 4096reset_val | 4096sourcefile |sourceline |pending_restart | f3.修改pg的参数值1.全局修改pg的参数.有些参数只有当pg服务重启的时候才⽣效,典型的例⼦就是shared_buffers,定义了共享内存的⼤⼩.许多参数在pg服务运⾏的时候就能修改.再更改之后像服务器执⾏⼀个reload操作,强制pg重新读取postgresql.conf,因此你只需要编辑postgresql.conf⽂件,再执⾏ pg_ctl reload 即可 . 对于需要重启的,在修改完postgresql后需要执⾏ pg_ctl restart对于9.5以后的版本,可以通过查看pg_file_settings查看你设置的参数是否⽣效.例如如果你设置了⼀个参数需要重启数据库才能⽣效或者设置错误,那么在此字典中会出现报错.test=# select * from pg_file_settings where error is not null;sourcefile | sourceline | seqno | name | setting | applied | error-----------------------------------+------------+-------+-----------------+---------+---------+------------------------------/data/pgdata/postgresql.auto.conf | 4 | 22 | max_connections | 10000 | f | setting could not be applied(1 row)对于9.4以后的版本,你还可以使⽤ alter system 命令修改参数.使⽤alter system命令将修改postgresql.auto.conf⽂件,⽽不是postgresql.conf,这样可以很好的保护postgresql.conf⽂件,加⼊你使⽤很多alter system命令后搞的⼀团糟,那么你只需要删除postgresql.auto.conf,再重新加载即可.test=# show work_mem;work_mem----------4MB(1 row)test=# alter system set work_mem='8MB';ALTER SYSTEMtest=# show work_mem;work_mem----------4MB(1 row)查看postgresql.auto.conf:[postgres@postgresql1 pgdata]$ cat postgresql.auto.conf# Do not edit this file manually!# It will be overwritten by the ALTER SYSTEM command.work_mem = '8MB'使⽤pg_ctl reload重新load配置⽂件,再查看参数值:test=# show work_mem ;work_mem----------8MB(1 row)2.直接使⽤set命令,在会话层修改,修改之后将被⽤于未来的每⼀个事务,只对当前会话有效:test=#test=# set work_mem='16MB';SETtest=# show work_mem;work_mem----------16MB(1 row)我们打开另外⼀个会话,查看work_mem参数,可以发现work_mem还是4MBpostgres=# show work_mem;work_mem----------4MB(1 row)3.set命令后添加 local关键字, 只在当前事务中修改,只在当前事务内有效:test=# show work_mem;work_mem----------16MB(1 row)test=# begin;BEGINtest=# set local work_mem='8MB';SETtest=# show work_mem;work_mem----------8MB(1 row)test=# commit;COMMITtest=# show work_mem;work_mem----------16MB4.使⽤ reset恢复参数的默认值再pg_settings字典reset_val字段表⽰了如果使⽤reset,则此参数恢复的默认值为多少使⽤ reset 参数名来恢复某个参数的默认值,使⽤ reset all来恢复所有的参数值.test=# show work_mem;work_mem----------16MB(1 row)test=# reset work_mem;RESETtest=# show work_mem;work_mem----------4MB(1 row)test=# reset all;RESET5.为特定的⽤户组设置参数⼀.为特定的数据库⾥的所有的⽤户设置参数,例如为test数据库所有的连接设置work_mem为16MB:test=# alter database test set work_mem='16MB';ALTER DATABASE⼆.为数据库中的某个特定⽤户设置参数.例如为brent⽤户,设置work_mem为2MB:postgres=# alter role brent set work_mem='2MB';ALTER ROLE经过测试发现,如果你同时为数据库和⽤户设置了特定参数,那么以⽤户为准.例如上⾯的,如果我⽤brent⽤户连接到test数据库,那么我的work_mem应该为2MB:postgres=# \c test brentYou are now connected to database "test" as user "brent".test=>test=>test=> show work_mem;work_mem----------2MB三.为某个特定⽤户连接到特定的数据库设置参数.例如为⽤户brent在数据库test中设置work_mem为8MBtest=# alter role brent in database test set work_mem='8MB';ALTER ROLE上⾯说的三种设置,优先级递增,也就是说,如果设置了1,2,3那么就以第3个为准,如果设置了1,2那么就是以2为准,以此类推.pg对此的实现⽅法和当⽤户连接数据库的时候,⽴刻⼿动执⾏set命令的效果完全相同查看你当前的参数值是从何处指定,可以通过查询pg_setttings中的source字段获取,例如如果设置了database级别的参数.那么查询结果应该如下:test=# select name,setting,source from pg_settings where name='work_mem';name | setting | source----------+---------+----------work_mem | 16384 | database其它的,例如设置了第三种:test=# \c test brentYou are now connected to database "test" as user "brent".test=> select name,setting,source from pg_settings where name='work_mem';name | setting | source----------+---------+---------------work_mem | 8192 | database user补充:postgresql重要参数解析及优化1,max_connections 200最⼤客户端连接数。
基于PostgreSQLpg_hba.conf配置参数的使⽤说明pg_hba.conf 配置详解该⽂件位于初始化安装的数据库⽬录下编辑 pg_hba.conf 配置⽂件postgres@clw-db1:/pgdata/9.6/poc/data> vi pg_hba.confTYPE 参数设置TYPE 表⽰主机类型,值可能为:若为 `local` 表⽰是unix-domain的socket连接,若为 `host` 是TCP/IP socket若为 `hostssl` 是SSL加密的TCP/IP socketDATABASE 参数设置DATABASE 表⽰数据库名称,值可能为:`all` ,`sameuser`,`samerole`,`replication`,`数据库名称` ,或者多个数据库名称⽤ `逗号`,注意ALL不匹配 replicationUSER 参数设置USER 表⽰⽤户名称,值可以为:`all`,`⼀个⽤户名`,`⼀组⽤户名` ,多个⽤户时,可以⽤ `,`逗号隔开,或者在⽤户名称前缀 `+` ;在USER和DATABASE字段,也可以写⼀个单独的⽂件名称⽤ `@` 前缀,该⽂件包含数据库名称或⽤户名称ADDRESS 参数设置该参数可以为 `主机名称` 或者`IP/32(IPV4) `或 `IP/128(IPV6)`,主机名称以 `.`开头,`samehost`或`samenet` 匹配任意Ip地址METHOD 参数设置该值可以为"trust", "reject", "md5", "password", "scram-sha-256","gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert"注意若为`password`则发送的为明⽂密码注意修改该配置⽂件中的参数,必须重启 `postgreSql`服务,若要允许其它IP地址访问该主机数据库,则必须修改 `postgresql.conf` 中的参数 `listen_addresses` 为 `*`重启:pg_ctl reload 或者执⾏ SELECT pg_reload_conf()配置以下参数# TYPE DATABASE USER ADDRESS METHODhost all all 10.10.56.17/32 md5"pg_hba.conf" 99L, 4720C参数说明host参数表⽰安装PostgreSQL的主机all 第⼀个all 表⽰该主机上的所有数据库实例all第⼆个all 表⽰所有⽤户10.10.56.17/32表⽰需要连接到主机的IP地址,32表⽰IPV4md5表⽰验证⽅式即上述表⽰允许IP地址为10.10.56.17的所有⽤户可以通过MD5的密码验证⽅式连接主机上所有的数据库也可以指定具体的数据库名称和⽤户# TYPE DATABASE USER ADDRESS METHODhost test pgtest 10.10.56.17/32 md5即表⽰允许地址为 10.10.56.17 的⽤户 pgtest通过 MD5⽅式加密的密码⽅式连接主机上的 test 数据库也可以指定整个⽹段# TYPE DATABASE USER ADDRESS METHODhost test pgtest 0.0.0.0/0 md5即表⽰允许任意iP 通过⽤户名为 pgtest 和md5的密码验证⽅式连接主机上 test 的数据库不进⾏密码验证# TYPE DATABASE USER ADDRESS METHODhost test pgtest 0.0.0.0/0 trust表⽰任意IP地址的⽤户 pgtest ⽆需密码验证可直接连接访问该主机的 test 数据库补充:postgresql配置⽂件pg_hba.conf配置、修改postgresql超级⽤户的密码postgresql设置了⽤户名和密码,却发现不输⼊密码、或者密码输错都能登录。
pgsql的使用方法PostgreSQL(简称pg)是一种开源的关系型数据库管理系统,广泛用于企业级应用和大规模数据处理。
本文将介绍pgsql的使用方法,包括安装、配置、创建数据库和表、插入和查询数据等方面的内容。
一、安装pgsql1. 下载在官网(省略)下载适合您操作系统的pgsql安装包,选择合适的版本。
2. 安装解压下载的安装包,并按照提示进行安装。
注意,安装时需要选择合适的目录和配置选项。
二、配置pgsql1. 修改配置文件找到pgsql的配置文件(通常位于安装目录下的data文件夹),使用文本编辑器打开。
根据需要,修改以下常用配置项:- listen_addresses:指定pgsql监听的IP地址;- port:指定pgsql监听的端口号;- max_connections:指定最大连接数;- shared_buffers:指定共享缓冲区的大小;- work_mem:指定每个工作进程可用的内存量。
2. 启动pgsql在命令行中输入以下命令启动pgsql服务:```pg_ctl start -D <pgsql安装目录>/data```三、创建数据库和表1. 创建数据库在命令行中输入以下命令创建数据库:```createdb <数据库名>```2. 连接数据库在命令行中输入以下命令连接数据库:```psql -d <数据库名>```3. 创建表在psql命令行中输入以下命令创建表:```CREATE TABLE <表名> (<列名1> <数据类型1>,<列名2> <数据类型2>,...);```四、插入和查询数据1. 插入数据在psql命令行中输入以下命令插入数据:```INSERT INTO <表名> (<列名1>, <列名2>, ...) VALUES (<值1>, <值2>, ...);```2. 查询数据在psql命令行中输入以下命令查询数据:```SELECT <列名1>, <列名2>, ...FROM <表名>WHERE <条件>;```五、其他常用操作1. 更新数据在psql命令行中输入以下命令更新数据:```UPDATE <表名>SET <列名> = <新值>WHERE <条件>;```2. 删除数据在psql命令行中输入以下命令删除数据:```DELETE FROM <表名>WHERE <条件>;```3. 导出数据在命令行中输入以下命令将数据导出到文件中:```COPY <表名> TO '<文件路径>' DELIMITER ',' CSV HEADER; ```4. 导入数据在命令行中输入以下命令将文件中的数据导入到数据库中:```COPY <表名> FROM '<文件路径>' DELIMITER ',' CSV HEADER; ```六、总结本文介绍了pgsql的使用方法,包括安装、配置、创建数据库和表、插入和查询数据等方面的内容。
Postgres远程访问配置Postgres作为网络数据库,网络安全是最重要的,所以在默认安装的情况下,只允许本机访问(127.0.0.1),如果需要从其他机器通过客户端(pgsql或pgAdmin)访问,需要在服务器端配置允许外部客户端连接到服务器。
1、修改Postgresql监听默认Postgres仅仅监听本地端口,所以外部的请求都连不上Postgres服务器进程,所以,第一步就需要让Postgres监听外部端口。
修改postgresl.conf文件1修改为表示从端口接收所有来源的数据(localhost表示只接受本地从5432端口进入的数据)。
2、修改访问授权数据库监听所有来源的请求,还需要修改访问授权,因为如果外部所有请求都同意连接,没有任何限制,也会非常危险,所以Postgres 提供了第二次权限检查手段,就是ip访问授权,可以设置指定ip的客户端能够访问。
修改pg_hba.conf 文件修改为这个修改表示允许所有的ip的所有用户,访问所有的数据库对象,其实这个权限有点大了,如果在局域网,还是允许的,如果在外网(互联网),就需要控制一下,指定ip和用户,数据库对象访问都需要严格限制。
3、重新启动Postgres服务Postgres服务的启动有两种方式3.1、root用户启用:直接使用命令/etc/init.d/Postgresql9.3 restart3.2、postgres用户启用:切换到postgres用户中2,然后使用pg_ctl来启停数据库pg_ctl stop (还有start | restart 等命令)4、配置防火墙如果配置完毕,重启数据库后,客户端还是不能访问,就需要调整防火墙策略,将5432端口开放出来。
然后保存防火墙配置重启防火墙备注:1、如果不知道文件在什么位置,请使用find命令查找find / -name postgresql.conf2、切换用户命令su postgres3、关于配置文件修改由于shell很难用,所以,建议将配置文件下载到本地,修改后再传回到服务器,注意,只能通过高级的编辑器(Editplus,Notepad++,UltraEdit等),不能通过Windows自带的“记事本”编辑配置文件,会存在编码问题。
PostgreSQL配置内存参数⼀、PostgreSQL基本参数优化:PostgreSQL的配置⽂件是数据库⽬录(/opt/PostgresPlus/8.3/data)下的 postgresql.conf⽂件, 8.0以后的版本可⽀持K,M,G这样的参数,只要修改相应参数后重新启动PostgreSQL服务就OK了。
shared_buffers:这是最重要的参数,postgresql通过shared_buffers和内核和磁盘打交道,因此应该尽量⼤,让更多的数据缓存在shared_buffers中。
通常设置为实际RAM的10%是合理的,⽐如50000(400M)work_mem: EnterpriseDB在执⾏排序操作时,会根据work_mem的⼤⼩决定是否将⼀个⼤的结果集拆分为⼏个⼩的和 work_mem查不多⼤⼩的临时⽂件。
显然拆分的结果是降低了排序的速度。
因此增加work_mem有助于提⾼排序的速度。
通常设置为实际RAM的2% -4%,根据需要排序结果集的⼤⼩⽽定,⽐如81920(80M)effective_cache_size:是PostgreSQL能够使⽤的最⼤缓存,这个数字对于独⽴的PostgreSQL服务器⽽⾔应该⾜够⼤,⽐如4G的内存,可以设置为3.5G (437500)maintence_work_mem:这⾥定义的内存只是在CREATE INDEX, VACUUM等时⽤到,因此⽤到的频率不⾼,但是往往这些指令消耗⽐较多的资源,因此应该尽快让这些指令快速执⾏完毕:给 maintence_work_mem⼤的内存,⽐如512M(52428max_connections:通常,max_connections的⽬的是防⽌max_connections * work_mem超出了实际内存⼤⼩。
⽐如,如果将work_mem 设置为实际内存的2%⼤⼩,则在极端情况下,如果有50个查询都有排序要求,⽽且都使⽤2%的内存,则会导致swap的产⽣,系统性能就会⼤⼤降低。
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.*的机器可以以密码的形式使用所有的数据库。
相比mysql单一的f,postgresql的访问认证配置主要涉及到两个主要的配置文件:postgresql.conf和pg_hba.conf,本文从安全设置角度讲述这两个配置文件的配置选项。
部分文字、样例摘抄自postgresql的中文手册。
postgresql.confpostgresql.conf包含了许多的选项,这些选项控制了postgresql.conf的方方面面,中间影响访问认证的选项是:unix_socket_group设置Unix 域套接字的组所有人,(套接字的所有权用户总是启动postmaster 的用户)与UNIX_SOCKET_PERMISSIONS 选项一起使用可以给这种套接字类型增加额外的访问控制机制,缺省时是一个空字串,也就是使用当前用户的缺省的组,这个选项只能在服务器启动时设置。
unix_socket_permissions给Unix 域套接字设置访问权限,Unix 域套接字使用通常的Unix 文件系统权限集。
可选的值可以是一个chmod 和umask 系统调用可以接受的数字模式。
(要使用客户化的八进制格式,该数字必须以0 (零)开头)缺省权限是0777,意即任何人都可以联接,合理的选则可能是0770 (只有用户和组,参阅UNIX_SOCKET_GROUP)和0700 (只有用户)。
(请注意对于Unix 套接字而言,实际上只有写权限有意义,而且也没有办法设置或者取消读或执行权限)这个选项只能在服务器启动时设置。
pg_hba.conf是设置访问认证的主要文件,格式为每条记录一行,每行指定一条访问认证。
设定一条访问认证包含了7个部分:连接方式(type)、数据库(database)、用户名(user)、ip地址(ip-address)、子网掩码(ip-mask)、认证方法(authentication method)、认证配置(authentication-option),以下是这7个部分的详细说明:连接方式(type)连接方式共有三种:local、host、hostssllocal这条记录匹配通过Unix 域套接字进行的联接企图,没有这种类型的记录,就不允许Unix 域套接字的联接。
host这条记录匹配通过TCP/IP 网络进行的联接尝试,请注意,除非服务器是带着-i 选项或者打开了postgresql.conf 里面的tcpip_socket 配置参数集启动的,否则TCP/IP 联接是被禁止掉的。
hostssl这条记录匹配通过在TCP/IP 上进行的SSL 联接企图,host 记录可以匹配SSL 和非SSL 的联接企图,但hostssl 记录需要SSL 联接。
数据库(database)声明记录所匹配的数据库。
值all 表明该记录匹配所有数据库,值sameuser表示如果被请求的数据库和请求的用户同名,则匹配。
samegroup 表示请求的用户必须是一个与数据库同名的组中的成员。
在其他情况里,这就是一个特定的PostgreSQL 的名字。
我们可以通过用逗号分隔的方法声明多个数据库。
一个包含数据库名的文件可以通过对该文件前缀@ 来声明.该文件必需和pg_hba.conf 在同一个目录。
用户名(user)为这条记录声明所匹配的PostgreSQL 用户,值all 表明它匹配于所有用户。
否则,它就是特定PostgreSQL 用户的名字,多个用户名可以通过用逗号分隔的方法声明,组名字可以通过用+ 做组名字前缀来声明。
一个包含用户名的文件可以通过在文件名前面前缀@ 来声明,该文件必需和pg_hba.conf 在同一个目录。
ip地址(ip-address)子网掩码(ip-mask)这两个字段包含标准的点分十进制表示的IP地址/掩码值。
(IP地址只能用数字的方式声明,而不能用域名或者主机名)它们俩放在一起,声明了这条记录匹配的客户机的IP 地址。
准确的逻辑是:(actual-IP-address xor IP-address-field) and IP-mask-field对于要匹配的记录必需为零。
如果连接方式是host或者hostssl的话,这两项必须指定,否则可以不填。
认证方法(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 联接的时候才能用。
(译注:Kerberos,"克尔波洛斯",故希腊神话冥王哈得斯的多头看门狗,FF8中“反击的狼烟”。
Kerberos 是MIT 开发出来的基与对称加密算法的认证协议和/或密钥交换方法,其特点是需要两个不同用途的服务器,一个用于认证身份,一个用于通道两端用户的密钥交换。
同时Kerberos 对网络时间同步要求比较高,以防止回放攻击,因此通常伴随NTP 服务。
)krb5用Kerberos V5 认证用户.只有在进行TCP/IP 联接的时候才能用。
(译注:Kerberos V5 是上面V4 的改良,主要是不再依赖DES 算法,同时增加了一些新特性。
)ident获取客户的操作系统名(对于TCP/IP 联接,用户的身份是通过与运行在客户端上的ident 服务器联接进行判断的,对于本地联接,它是从操作系统获取的。
)然后检查一下,看看用户是否允许以要求的数据库用户进行联接,方法是参照在ident 关键字后面声明的映射。
如果你使用了sameuser 映射,那么假设用户名是相等的。
如果没有声明这个关键字,则在$PGDATA/pg_ident.conf 文件中找出映射名。
如果这个文件里包含一条记录标识着ident提供的用户名和请求的PostgreSQL 用户名的映射,那么联接被接受。
对于本地联接,只有在系统支持Unix域套接字信任证的情况下才能使用(目前是Linux,FreeBSD,NetBSD,和BSD/OS)。
pam使用操作系统提供的可插入的认证模块服务(Pluggable Authentication Modules)(PAM)来认证。
认证配置(authentication-option)这个可选的字段的含义取决与选择的认证方法。
了解了以上的内容以后,我们可以开始设置自己的访问认证。
和mysql一样,postgresql 默认安装的访问认证是不安全的,当我第一次安装好我的postgresql以后,我发现只要输入`psql -U pgsql -d template1`就可以不需要任何密码的进入我的数据库,并且使用的是pgsql 用户(数据库的最高权限),即使在我使用ALTER USER为我的数据库用户添加了密码以后情况也没有得到改善,经过一番查找,我发现我的pg_hba.conf内容如下:local all all trusthost all all 0.0.0.0 0.0.0.0 trust这说明无论在本地还是通过tcp/ip,任何人都可以不加任何限制的使用任何他想用的身份访问我的数据库,于是我为所有的访问都使用了md5认证方法,我的pg_hba.conf变为:local all all md5host all all 0.0.0.0 0.0.0.0 md5事情似乎得到了解决,任何人想访问我的数据库都需要通过密码这一关,我的数据库安全了。
但是当我有一天重新启动计算机的以后发现我的postgresql并没有被正常的启动,在终端前我发现启动到postgresql服务启动脚本时,提示需要输入密码,原来在设置了md5认证方式以后我的pgsql需要密码才能够启动服务,为了不每次启动都跑到终端前去输入一次密码,我的pgsql用户的认证方法必须为trust:local pgsql all trustlocal all all md5host all all 0.0.0.0 0.0.0.0 md5在随后的检测中我发现,虽然通过网络得到了保护,但是如果在本地通过Unix域套接字进行连接的话,任何人都还是可以使用`psql -U pgsql -d template1`的方式轻松的进入我的数据库,这样做显而易见不是我想要的结果,现在我需要unix_socket_permissions的协助,当我把这个项设置为0700以后,就只有套接字的所有人,即系统用户pgsql可以使用套接字进行连接,另外如果我的数据库有几个管理员需要最高权限的话,0770也是一个选择,不过暂时只有我一个管理员,所以我选择了0700,现在我的pg_hba.conf改变为:local pgsql all trusthost all all 0.0.0.0 0.0.0.0 md5结合了unix_socket_permissions以后,现在只有系统用户pgsql可以无任何限制的连接(当然,伟大的root例外),并且我也不用每次启动的时候都跑到终端前去输入一次密码了,而其他人只能通过网络连接,即使登录到了本地计算机上,其他用户也只能使用`psql -U xx -d template1 -h 127.0.0.1`的方式连接,这种连接是受到密码认证的保护的,这一切正是我想要的。
pg_hda.conf看看pg_hda.conf的:# TYPE DATABASE USER CIDR-ADDRESS METHOD顺序一定不要搞错了,我的前面关于认证设置的文章是网上照搬的,将database和user顺序设反了,导致我一直出现错误。
汗颜!注意到type:包含local和host两种。
意思是本机(local)和远程调用(host)对于一个user,最好给本机和远程都给权限。
然后看method:有trust(不需要安全认证);md5(md5加密认证);password(明码认证)。
依然存在问题:我对用户使用md5和password方式,使用psql命令输入密码都提示密码错误。
不知道是什么原因。
问题分析中。
待续~~~~~~~~~~~eg:对globus用户,rftDatabase数据库的授权:local all globus trusthost rftDatabase globus 202.198.30.65 255.255.255.128 trust这个是保证GT4的container和使用psql命令都能简单进入的方式,不过使用password和md5方式就出现错误了。