您的位置:首页 > 运维架构 > Linux

linux的数据库篇- PostgreSQL安装配置

2007-10-14 16:43 501 查看

[b]PostgreSQL安装配置[/b]


一.准备工作

PostgreSQL的官方下载地址为:


ftp://ftp.postgresql.org/pub/v7.1.3/postgresql-7.1.3.tar.gz

http://www.postgresql.org/


如果下载最新的开发版本,你需要下载并安装flex(版本号大于2.5.4)以及bison(版本号大于1.28)


设计人员为了安全考虑,PostgreSQL不能以root用户运行,所以必须建立对应的用户和组。


#useraddpostgre(自动建立postgre组)



二.安装


安装的过程并不复杂和其他源码版本的安装方法类似:

解压到/usr/local/src:


#tarxvfzpostgresql-7.1.3.tar.gz

#cdpostgresql-7.1.3

#./configure--prefix=/usr/local/pgsql

#make

#makeinstall

#chown-Rpostgre.postgre/usr/local/pgsql


这样安装完毕后,并不是万事大吉了,还有一些收尾工作要做:

#vi~postgre/.bash_profile

添加:


PGLIB=/usr/local/pgsql/lib

PGDATA=$HOME/data

PATH=$PATH:/usr/local/pgsql/bin

MANPATH=$MANPATH:/usr/local/pgsql/man

exportPGLIBPGDATAPATHMANPATH


以postgres用户登录,

#su-postgre

建立数据库目录:

$mkdirdata


启动数据库引擎:


$initdb

[postgre@wwwpostgre]$initdb

Thisdatabasesystemwillbeinitializedwithusername"postgre".

Thisuserwillownallthedatafilesandmustalsoowntheserverprocess.


Fixingpermissionsonpre-existingdatadirectory/home/postgre/data

Creatingdatabasesystemdirectory/home/postgre/data/base

CreatingdatabaseXLOGdirectory/home/postgre/data/pg_xlog

Creatingtemplatedatabasein/home/postgre/data/base/template1

Creatingglobalrelationsin/home/postgre/data/base

Addingtemplate1databasetopg_database


Creatingviewpg_user.

Creatingviewpg_rules.

Creatingviewpg_views.

Creatingviewpg_tables.

Creatingviewpg_indexes.

Loadingpg_description.

Vacuumingdatabase.


Success.Youcannowstartthedatabaseserverusing:


/usr/local/pgsql/bin/postmaster-D/home/postgre/data

or

/usr/local/pgsql/bin/pg_ctl-D/home/postgre/datastart



$postmaster-i-D~/data&

[1]22603

[postgre@wwwpostgre]$DEBUG:DataBaseSystemisstartingupatThuJan3102:00:442002

DEBUG:DataBaseSystemwasshutdownatThuJan3101:57:582002

DEBUG:DataBaseSystemisinproductionstateatThuJan3102:00:442002


这样PostgreSQL使用位于/usr/local/pgsql/data的数据库,允许Internet用户的连接(-i),并在后台运行。


建立数据库

$createdbmydb

PostgreSQL会返回“CREATEDDATABASE”的信息,表明数据库建立完成。

$psqlmydb

进入交互psql工具,建立表:


CREATETABLEmytable(

idvarchar(20),

namevarchar(30));


建立完成后,会得到一条“CREATED”的信息,表示建立成功。现在插入一条数据:


INSERTINTOmytablevalues('Author','XuYongjiu');


psql返回INSERT187321,查询插入是否成功:


SELECT*FROMMYTABLE;


退出psql,用/q命令。




要让网上别的机子都可以访问则要修改以下东西


$vi/home/postgre/data/pg_hba.conf

在底下加入

localalltrust

#允许通过本地的所有机子

hostall0.0.0.00.0.0.0trust


(#比如说允许网内所有机子

hostall192.168.1.0255.255.255.255trust#比如说允许网内192.168.0.96的机子

hostall192.168.1.96255.255.255.255trust)




$vi/home/postgre/data/postgresql.conf

#tcpip_socket=false修改成tcpip_socket=true




$pg_ctlstart#启动数据库

$pg_ctlrestart#重启数据库

$pg_ctlstop#关闭数据库

这样,postgresql就算是安装完毕了,现在我们可以来检验一下;

打开shell输入:


#su-postgre

$initdb

$postmaster-i-D~/data&

$psqlmydb


如果进入数据库,那就是OK了,在这期间比较容易出现问题的是第二步提示你已经存在,这是没有问题的;但是在执行postmaster-i-D~/data&,如果有Hint出现,可能是因为上一次打开数据库时没有关,(关闭shell或是关机是不能将数据库关闭的)因此现输入命令:


$pg_ctlstop

然后再执行:$postmaster-i-D~/data&

应该就可以了.

退出数据库使用:/q







=================================================


附:解释说明


访问认证配置主要涉及到两个主要的配置文件:postgresql.conf和pg_hba.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)、

认证方法(authenticationmethod)、

认证配置(authentication-option),以下是这7个部分的详细说明:


连接方式(type):连接方式共有三种:local、host、hostssl

local

这条记录匹配通过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-addressxorIP-address-field)andIP-mask-field

对于要匹配的记录必需为零。如果连接方式是host或者hostssl的话,这两项必须指定,否则可以不填。


认证方法(authenticationmethod):

trust

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


reject

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


md5

要求客户端提供一个MD5加密的口令进行认证,这个方法是允许加密口令存储在pg_shadow里的唯一的一个方法。


crypt

类似md5方法,只是用的是老式的crypt加密认证,用于7.2以前的客户端,对于7.2以及以后的客户端,我们建议使用md5。


password

和"md5"一样,但是口令是以明文形式在网络上传递的,我们不应该在不安全的网络上使用这个方式。


krb4

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


krb5

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


ident

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

如果你使用了sameuser映射,那么假设用户名是相等的。如果没有声明这个关键字,则在$PGDATA/pg_ident.conf文件中找出映射名。如果这个文件里包含一条记录标识着ident提供的用户名和请求的PostgreSQL用户名的映射,那么联接被接受。

对于本地联接,只有在系统支持Unix域套接字信任证的情况下才能使用(目前是Linux,FreeBSD,NetBSD,和BSD/OS)。


pam

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



1、无论在本地还是通过tcp/ip,任何人都可以不加任何限制的使用任何他想用的身份访问我的数据库

localalltrust

hostall0.0.0.00.0.0.0trust


2、所有的访问都使用了md5认证方法

localallmd5

hostall0.0.0.00.0.0.0md5


3、pgsql用户的认证方法必须为trust不要密码,其它的都用md5认证

localpgsqltrust

localallmd5

hostall0.0.0.00.0.0.0md5


4、在随后的检测中我发现,虽然通过网络得到了保护,但是如果在本地通过Unix域套接字进行连接的话,任何人都还是可以使用`psql-Upgsql-dtemplate1`的方式轻松的进入我的数据库,这样做显而易见不是我想要的结果,现在我需要unix_socket_permissions的协助,当我把这个项设置为0700以后,就只有套接字的所有人,即系统用户pgsql可以使用套接字进行连接,另外如果我的数据库有几个管理员需要最高权限的话,0770也是一个选择,不过暂时只有我一个管理员,所以我选择了0700,现在我的pg_hba.conf改变为:


localpgsqltrust

hostall0.0.0.00.0.0.0md5


结合了unix_socket_permissions以后,现在只有系统用户pgsql可以无任何限制的连接(当然,伟大的root例外),并且我也不用每次启动的时候都跑到终端前去输入一次密码了,而其他人只能通过网络连接,即使登录到了本地计算机上,其他用户也只能使用`psql-Uxx-dtemplate1-h127.0.0.1`的方式连接,这种连接是受到密码认证的保护的,这一切正是我想要的。



##############################################

数据库启动等命令


pg_ctlstart[-w][-s][-Ddatadir][-lfilename][-ooptions][-ppath]


pg_ctlstop[-W][-s][-Ddatadir][-ms[mart]|f[ast]|i[mmediate]]


pg_ctlrestart[-w][-s][-Ddatadir][-ms[mart]|f[ast]|i[mmediate]][-ooptions]


pg_ctlreload[-s][-Ddatadir]


pg_ctlstatus[-Ddatadir]





Trackback:'target='_blank'>http://tb.blog.csdn.net/TrackBack.aspx?PostId=48513[/code]


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: