Postgres的用户认证
我们先来讲讲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的用户认证的更多相关文章
- Ory Kratos 用户认证
Ory Kratos 为用户认证与管理系统.本文将动手实现浏览器(React+AntD)的完整流程,实际了解下它的 API . 代码: https://github.com/ikuokuo/start ...
- Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解
用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...
- Django--自定义用户认证
Django自带的用户认证 以前都是用Django自带的用户认证,用户名字段一对一关系对应Django--User表(其实它也是继承了abstractbaseuser). 1 2 3 from dja ...
- linux(十二)___Apache服务器用户认证、虚拟主机的配置
创建xiangkejin zhangsan两个用户 可看见文件中创建的两个用户: 建立虚拟目录并配置用户认证 ①建立虚拟目录 /xiangkejin ②在Apache的主配置文件httpd.conf ...
- [django]用户认证中只允许登陆用户访问(网页安全问题)
当设计一个重要网页时,一般要求未从登陆界面访问的用户不能进入其他页面,那么需要如何设置呢? 如下 django中的url.py urlpatterns = [ url(r'^$', 'login ...
- 使用JDBC实现Oracle用户认证
两天时间写的小品,以前的J2EE环境基本使用框架.现在使用JDBC配合Oracle存储过程模拟了一下用户注册和用户认证. 一.添加必须的jar包 需要JDBC连接Oracle的包和shiro-core ...
- ldap实现用户认证
LDAP的用户认证类. public class LDAPHelper { private DirectoryEntry _objDirectoryEntry; /// <summary> ...
- auth用户认证库
关于auth库,建议如下:1. ion_auth,基于Redux重写而成,非常不错的认证库,国外用的很多,几个最新的ci2.0.2基础上的开源系统(如doveforum)都用它,支持ci 2.0和以上 ...
- 禅道PMS兼容redmine用户认证接口
项目地址:https://github.com/web3d/zentao-redmine-userauth zentao-redmine-userauth 做了一个基本的用户认证接口,兼容redmin ...
随机推荐
- Android系统服务-简介
http://blog.csdn.net/chenyafei617/article/details/6577907 Introduction 我们知道Android系统服务挺多的,做程序时经常会用到, ...
- linux 文件内容的复制
#include <string.h> #include <strings.h> #include <stdio.h> #include <stdlib.h& ...
- [置顶] tar命令-linux
tar命令 先对文件进行打包,然后进行压缩. [.tar..gz..tar.gz..tgz..bz2..tar.bz2..Z..tar.Z..zip..rar] [主要讲tar,其他还有zip/unz ...
- 基本SQL练习题--选课经典例题
为管理岗位业务培训信息,建立3个表: S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号.学员姓名.所属单位.学员年龄 C (C#,CN ) C#,CN 分别代表课程编号.课程名称 ...
- HDU--3466(0-1背包+贪心/后效性)
题意是: 给你一些钱 m ,然后在这个国家买东西, 共有 n 件物品,每件物品有 价格 P 价值 V 还有一个很特别的属性 Q, Q 指 你如过想买这件物品 你的手中至少有这钱Q . 虽 ...
- Entify Framewrok - LINQ简单使用
1.如何使用Join: http://www.devcurry.com/2011/01/join-example-in-linq-and-c.html
- Matlab画图常用的符号和颜色
线型 说明 标记符 说明 颜色 说明 - 实线(默认) + 加号符 r 红色 -- 双划线 o 空心圆 g 绿色 : 虚线 * 星号 b 蓝色 :. 点划线 . 实心圆 c 青绿色 x 叉号符 m 洋 ...
- 左侧高亮(js)
//左导航高亮 (function(){ var leftnav = $('#leftnav'); //左侧ul var pi = __preset.curpathid; if(pi=='/acco ...
- 看了一本书,说可以利用Hierarchy Viewer优化布局
看了一本书,说可以利用Hierarchy Viewer优化布局,今以志之. 参考:http://www.cnblogs.com/Rocky_/archive/2011/11/04/2236243.ht ...
- THINKPHP之控制器
如何新增控制器? 在Lib/Action中新增一个控制器:ProductAction.class.php: <?php class ProductAction extends Action{ ...