我们先来讲讲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手册。

Postgres的用户认证的更多相关文章

  1. Ory Kratos 用户认证

    Ory Kratos 为用户认证与管理系统.本文将动手实现浏览器(React+AntD)的完整流程,实际了解下它的 API . 代码: https://github.com/ikuokuo/start ...

  2. Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解

    用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...

  3. Django--自定义用户认证

    Django自带的用户认证 以前都是用Django自带的用户认证,用户名字段一对一关系对应Django--User表(其实它也是继承了abstractbaseuser). 1 2 3 from dja ...

  4. linux(十二)___Apache服务器用户认证、虚拟主机的配置

    创建xiangkejin  zhangsan两个用户 可看见文件中创建的两个用户: 建立虚拟目录并配置用户认证 ①建立虚拟目录 /xiangkejin ②在Apache的主配置文件httpd.conf ...

  5. [django]用户认证中只允许登陆用户访问(网页安全问题)

    当设计一个重要网页时,一般要求未从登陆界面访问的用户不能进入其他页面,那么需要如何设置呢? 如下 django中的url.py urlpatterns = [    url(r'^$', 'login ...

  6. 使用JDBC实现Oracle用户认证

    两天时间写的小品,以前的J2EE环境基本使用框架.现在使用JDBC配合Oracle存储过程模拟了一下用户注册和用户认证. 一.添加必须的jar包 需要JDBC连接Oracle的包和shiro-core ...

  7. ldap实现用户认证

    LDAP的用户认证类. public class LDAPHelper { private DirectoryEntry _objDirectoryEntry; /// <summary> ...

  8. auth用户认证库

    关于auth库,建议如下:1. ion_auth,基于Redux重写而成,非常不错的认证库,国外用的很多,几个最新的ci2.0.2基础上的开源系统(如doveforum)都用它,支持ci 2.0和以上 ...

  9. 禅道PMS兼容redmine用户认证接口

    项目地址:https://github.com/web3d/zentao-redmine-userauth zentao-redmine-userauth 做了一个基本的用户认证接口,兼容redmin ...

随机推荐

  1. 微软 Dynamics AX 学习步骤

    第一步:了解到AX的架构,AOT结构,了解AOT中表,窗体,类,job,菜单,菜单项的基础开发.知道代码可以写在那里,每个对象以及对象内部的具体设置.如果你不了解类,继承,这些,那么就需要找一下讲述类 ...

  2. DL,DT,DD,比传统table更语义,解析更快的table列表方式

    使用dl,dt,dd替代传统的table布局 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...

  3. Oracle Database 12c Using duplicate standby database from active database Created Active DataGuard

    primary database db_name=zwc, db_unique_name=zwc standby database db_name=zwc, db_unique_name=standb ...

  4. c语言局部变量 静态局部变量 全局变量与静态全局变量

    基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

  5. PHP常用魔术方法(__invoke魔术方法)

    <?php //文件名:index.php define('a',__DIR__); include '/IMooc/Loader.php'; spl_autoload_register('\\ ...

  6. 【转】YUV格式&像素

    一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...

  7. C# Excel导入、导出

    本篇主要介绍C#的Excel导入.导出. 目录 1. 介绍:描述第三方类库NPOI以及Excel结构 2. Excel导入:介绍C#如何调用NPOI进行Excel导入,包含:流程图.NOPI以及C#代 ...

  8. resin安装和配置

    1 从 http://www.caucho.com/download/ 下载resin 2 检查你的linux环境,查看是否安装了 jdk1.5 或以上版本,是否安装了perl. 输入命令:Java ...

  9. Sublime Text3 Package Control和Emmet插件安装方法

    因为初学前端,所以今天安装了Sumblime Text 3,然后就停不下来去找Package Control的安装方法. 网络上我找到并尝试过的方法有两种,我使用的是用Python代码去安装并成安装成 ...

  10. SqlBulkCopy使用心得 (大量数据导入)

    文章转载原地址:http://www.cnblogs.com/mobydick/archive/2011/08/28/2155983.html 最近做的项目由于之前的设计人员懒省事,不按照范式来,将一 ...