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 ...
随机推荐
- cf C. Fixing Typos
http://codeforces.com/contest/363/problem/C s2用于存处理之后的字符串,再遍历s1的时候,s2会有两种情况1.s2最后两个字符是相同的如xx,如果这时再遇到 ...
- cf B. Dima and Text Messages
http://codeforces.com/contest/358/problem/B 先按照题意说的构造一个字符串s,然后与对比的字符串T比较,看看在字符串T中顺序查找有没有字符串S的所有字符,有输 ...
- CONTEST45 呵呵呵呵呵
题目质量差评!为什么不给数据范围! A.乘积最大3 题目:http://dev.luogu.org/problem/show?pid=2172 题解:sb题,均值定理. 代码: #include< ...
- 【转】预装(push)lib64中so文件查找错误
原文网址:http://blog.csdn.net/caroline_wendy/article/details/43615361 Android系统已经升级为64位系统,在进行预装(adb push ...
- NOI2012 美食节
http://www.lydsy.com/JudgeOnline/problem.php?id=2879 费用流. 我们发现,每个厨师做的倒数第k道菜对总等待时间的贡献为k*做这道菜的时间. 将每个厨 ...
- 源码分析之struts1自定义方法的使用与执行过程
最近有人问我,你做项目中用户的一个请求是怎么与struts1交互的,我说请求的url中包含了action的名字和方法名,这样就可以找到相应方法,执行并返回给用户了. 他又问,那struts1中有什么方 ...
- python3-day6(模块)
一.OS模块 1.os.system('ls -l') #子shell运行,获取返回值,不是结果. 2.os.popen('ls -l').read() #获取结果. 二.sys模块 1.sys.ar ...
- Map的内容按字母顺序排序
map有自带的排序功能,但需要重写排序方法,代码如下: package coreJava.com.shindo.corejava.map; import java.util.ArrayList; im ...
- XSS完全解决方案
xss 为什么不能阻止用户输入不安全数据 比如用户想发一篇标题的文章 1+1>2吗? 为什么不在数据库存的时候就处理好或者接口里处理好 1<2 会被转义为 1<2,放到html中确实 ...
- (转)Building MariaDB on Mac OS X using Homebrew
https://kb.askmonty.org/en/building-mariadb-on-mac-os-x-using-homebrew/ Work has been done to provid ...