LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1571|回复: 12

postgresql认证和用户管理

[复制链接]
发表于 2003-7-14 09:04:05 | 显示全部楼层 |阅读模式
首先在这里先向sonicer和lanb两位老兄说声对不起了,没办法我现在在为了生活不得不一天忙到晚,星期六星期天我也得回家不能出来,主要原因是因为我快要做爸爸了,所以老婆在家需要人照顾,只有在上班的时候才会到网上来看看了。真是不好意思。

我们先来讲讲postgresql的用户认证吧。
我想我们有必要明白以下几个问题:

      第一、postgresql的用户和操作系统的用户没有任何直接的的关系。虽然在postgaresql的初始安装中,它会有一个内建的超级用户postgres,而且它会建议你在操作系统中也新建一个用户postgres用它来连接数据库服务器和管理数据库集群,但是这并不是必需要的。在启动数据库服务器之前,你必需先要安装一个数据库集群,也是初始化一个数据库目录,也就是按这个命令来做:initdb ,这个命令会初始化一个数据库,它的用法如下:initdb -D  目录名, 这样它就准备好了一个新的数据库目录,你现在可以用命令启动数据库了,postmaster -D  目录,或者是用pg_ctl start -D 目录名, 这个脚本来启动数据库用户,启动后你将进行第一次登录,注意因为在postgresql中预设是以ident sameuser这种方式来登录的(几种登录的方式我们在下面讲), 所以我们只有切换到我们预建的postgres 用户下才能登录进入数据库服务器。
su postgres; psql template1; 这样就登录入数据库服务器。但是这个认证方式是由所在的数据库目录里的一个文件来pg_hba.conf来控制的。
        
      第二、postgres在默认是不接受tcp/ip连接的。有两种方式来控制它接受tcp/ip连接,一种是用启动参数 -i  , 另一种方式是修改数据库目录里的文件:postgresql.conf中的参数,将tcpip_socket = false改为true  port = 5432 前面的注释符号去掉。表示接受tcp/ip在5432的连接。

      第三、关于pg_hba.conf这个文件:
这个文件是控制postgresql数据库服务器登录的关键。还记得我们第一条里所做的第一次登录吗?在那里我们是用的系统用户postgres进行登录的。为什么会这样呢?我不用这个系统用户登录不行吗?当然可以。我们可以看看psql这个客户端的登录语法:psql [-h 主机名] [-U 用户名] [-W 密码] 数据库名 。 如果省略主机名,系统会认为首先从本机连接,那么它会采用unix socket的方式来进行连接,如果指定-h参数它会以TCP/IP的方式来进行连接,-U是登录用户名,-W 指定用户密码,可以不写密码系统会提示你要输入密码的。
所以当你启动后,可以使用如下命令进行登录(不需要切换到系统用户postgres)
psql -h localhost -U postgres -W template1 当要你输入密码时,直接回接就行了。默认postgres用户是没有密码的。如果不能登录看我的配制文件:pg_hba.conf如果里面的关于登录的方法为ident sameuser的话,就会提示错误,当然不并不影响我们的试验。

      第四:pg_hba.conf这个文件的语法与登录认证的几种方式:当我们打开这个文件的时候会看到如下的字句:
# TYPE  DATABASE    USER        IP-ADDRESS        IP-MASK           METHOD
                                                                                                                             
local   all         all                                             trust
host    all         all         127.0.0.1         255.255.255.255   trust
~
它的写法上面已经有很清楚的介绍了,第一个域是登录类型,主要由本地登录和从别的主机上登录两种。第二个域表示要登录的数据库,第三个域是登录的用户,第四个是客户登录ip地址或者是网段,第四个则是了网掩码了,第五个就是认证的方式及认证方式的先项了。
登录的类型我们可以写以下三种:local, host, hostssl ,
认证方式有这几种:trusst (信任登录),指定的这种登录是不需要任何密码的。只要存在这种用户就可直接登录:local   all         all                                             trust
允许来来自本机任何合法的数据库用户登录所有的数据库(注意是数据库用户,而且是从本机登录的)。
口令认证:这种认证方式有几种写种写法:password, crypt, md5, 这三种方式中password是以明码方式传递密码的。crypt在postgresql7.2.x以下用得较多,因为它们没有实现md5的方式认证。如果你想采用密码认证,最好是采用md5的方式。
Ident(这种称为映射认证),顾名思义,它会将数据库用户映射为某种用户。比如说:local   all         all              indent sameuser, 将会数据库用户与操作系统用户映射起来。如果大家用过WINDOWS的MS SQL SERVER肯定不会对这个感到陌生了。windows2000 server和ms sql server里的由windows2000 server管理数据库登录和这个就是一样的道理。因此在数据库的新安装中(RPM包安装中),你都会以一个新建的系统用户来试问数据库就是这个道理。如果是从网上下载自行编译的版本,它的默认方式 是trust,可以不用新建系统用户postgres来登录入数据库服务器。但是为了有一个好的习惯,你应该还是新建一个系统用户postgres来管理你的数据库服务器。

        第五、postgresql用户的属性:
postgresql的数据库用户可以使用SQL语言的CREATE USER 来建立的。如果需要建数立超级数据库用户,只需要这样来建立:CREATE USER 用户名 WITH PASSWORD CREATEUSER,这样就可建立一个超级数据库用户了,如果你想使用户有建立数据库的能力,那么你只需要将CREATEUSER 改为:CRATEDB就行了。如果只建普通用户就不需要带这两个选项了,至于普通用户的权限可以通过GRANT和REVOKE来管理。也就是说在postgresql里预建的只有CREATEUSER和CREATEDB这两种。可以使用ALTER USER来修改数据库用户的属性。具体的命令用法请参考SQL手册。
发表于 2003-7-14 10:19:20 | 显示全部楼层
好,希望以后PG的文章多一点。
我前一阵学了一下MySQL,回头再装个PG试试。

市面上有没有什么PG的好书?能不能介绍一下。
不要手册一类的,要有编程接口的(C语言)。
 楼主| 发表于 2003-7-14 10:23:55 | 显示全部楼层
市面上好像有几本。不过,我去了很多书店都买不到。
只有去网上看看了。
不过,网络上的资料还可以吧。
发表于 2003-7-14 10:35:01 | 显示全部楼层
我从http://www.chinalinuxpub.com/ 下了一套7.3的中文手册,不过我不喜欢看手册,喜欢看有条理、脉络,经过组织的书。
象我看的《MySQL网络数据库指南》就不错,虽然内容有点浅,但组织的比较好。写的好,学起来快,而且也记得牢,看手册是看完就忘。
 楼主| 发表于 2003-7-14 10:41:04 | 显示全部楼层
其实手册中很重要的。
发表于 2003-7-14 11:19:49 | 显示全部楼层
多谢黄兄,打扰你的时间,我们才应该不好意思,说对不起呢

要作父亲,先恭喜了
 楼主| 发表于 2003-7-14 12:25:32 | 显示全部楼层
谢谢。
发表于 2003-7-14 14:36:35 | 显示全部楼层
黄兄太客气!其实是我太急了!真是太谢谢大大了!
真是的黄兄恭喜啊!我这个人太急!没想到黄兄还有更要紧的事情!其实pg的认证我看manual已经大概了解了一点,还这样麻烦黄兄真的,真的太不好意思了!黄兄还是要多注意身体啊!不要累坏了!还有一定要看好母子啊!这个艰巨的任务现在由我代表全体sir的同志们交给你了!^_^!!

good luck!
发表于 2003-7-14 15:27:36 | 显示全部楼层
黄版主,恭喜你了。
要注意身体。
发表于 2003-7-15 01:42:18 | 显示全部楼层
mmm……
快生孩子了,家里还是不要用电脑的说。
恭喜黄叶兄,会不会是双胞胎呀,呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表