Centos下本地连接postgresql时出现认证错误的问题
出现这个问题,主要原因在于postgresql的配置的认证权限不对。
postgresql的配置权限的文件在
/var/lib/pgsql/data/pg_hba.conf
里面主要是关于认证权限的配置
PostgreSQL 支持下面这些身份验证方式:
- trust
- password
- peer
- ident
- GSSAPI
- SSPI
- Kerberos
- LDAP
- RADIUS
- certificate
- PAM
我们先详细讲解一下 PostgreSQL 中四种最常见的身份验证方式。
trust 身份验证
当使用 trust 身份验证方式时, PostgreSQL 会认为凡是能连接到该数据库服务器的,都是可信任的,可以随意访问数据库,而不管他们用什么数据库用户名来访问。这里边包含了如下几个意思:
- trust 方式需要你提供正确的数据库用户名,但是不需要提供密码。用不存在的数据库用户名来登录,那是不行的。
- 数据库用户名可以没有对应的操作系统用户名(通常来说同名)。
- 对于本地连接(Unix domain socket)来说,该方式实际上是把身份验证的职责全权交给了操作系统,只要取得了操作系统的访问权就取得了 PostgreSQL 的访问权。
- 如果在TCP/IP连接上使用 trust 身份验证方式,那就等价于没有身份验证了。
基于密码的身份验证
基于密码的身份验证方式包括 md5 和 password。这两种方式非常相似,唯一的区别在于传输密码的时候前者是md5加密的,后者是明文的。同样的:
- 既需要提供正确的数据库用户名,也需要提供密码。需要特别注意的是,采用md5方式的时候,并不需要你提供md5加密的密码,直接输入明文密码即可。psql, pgadmin, jdbc 会自动进行md5加密的。
- 数据库用户名可以没有对应的操作系统用户名(通常来说同名)。
- 对于本地连接(Unix domain socket)来说,该方式既需要你获取操作系统访问权,还需要你提供数据库用户密码来获取 PostgreSQL 的访问权。
- 如果在TCP/IP连接上使用基于密码的身份验证方式,身份验证是基于密码的。
ident 身份验证
ident 方式通过 Identification 协议,从 ident 服务器获得客户端操作系统用户名,然后把操作系统用户名作为数据库用户名。该方式只能用于TCP/IP连接。当 ident 被用于本地(非TCP/IP)链接时, 实际上采用的是 peer 方式。
RFC 1413 文档描述了 Identification 协议。几乎所有的Unix类操作系统都提供了 ident 服务器(openSUSE可以安装 oidentd或者 pidentd),这些 ident 服务器默认监听 TCP 113 端口。ident 服务器的基本功能就是回答类似“哪个用户建立了从你的X端口出来然后连入我的Y端口的连接?”的问题。由于 PostgreSQL 知道物理链接的 X 端口和 Y端口,它就可以询问链接客户端所在主机上的 ident 服务器,从而可以知道这条链接是哪个操作系统用户建立的。
这个流程的缺点是它依赖于客户端的完整性:如果客户端机器不可信,攻击者可以在113端口运行任意程序并返回任意用户名。因而这种身份验证方式只适合于封闭网络,而且该网络中的所有客户端机器都必须严格控制,数据库管理员和系统管理员必须紧密联系。换句话说,你必须信任运行 ident 服务器的机器。同时你还必须注意,RFC 1413协议明确说明了,Identification 协议的设计意图并不是为了身份验证和访问控制。
一些 ident 服务器提供了非标准选项,会导致返回加密了的用户名,而加密时使用的密钥只有 ident 服务器的管理员知道。这些 ident 服务器要和 PostgreSQL 协同工作,一定不能使用这些选项,因为 PostgreSQL 无法解密返回的字符串,无从知道真实用户名。
同样的:
- 需要提供正确的数据库用户名,不需要提供密码。且该数据库用户名必须和建立数据库链接的操作系统用户名一致,通常来说就是启动客户端应用的操作系统用户名。
- 数据库用户名必须有对应的操作系统用户名(通常来说同名)。
- 不能应用在本地连接上。
- 如果在TCP/IP连接上使用该验证方式,相当于身份验证完全交给了数据库客户端应用所在的机器。和 trust 方式一样,极其不安全。
peer 身份验证
peer 身份验证方式通过客户端操作系统内核来获取用户名,并作为数据库用户名来进行登录。该方式只能应用在本地连接上。peer 身份验证方式只能在那些提供了getpeereid()函数,SO_PEERCRED socket参数或者类似机制的操作系统中使用。当前包括 Linux,大多数 BSD系统比如 Mac OS X 和 Solaris。
- 需要提供正确的数据库用户名,不需要提供密码。且该数据库用户名必须和启动客户端应用的操作系统用户名一致,比如使用 bruce 用户启动了 pgadmin, 那么在连接数据库时就必须提供 bruce 用这个数据库用户名。
- 数据库用户名必须有对应的操作系统用户名(通常来说同名)。
- 如果在本地连接上使用该验证方式,相当于身份验证完全交给了数据库客户端应用所在的机器。和 trust 方式一样,极其不安全。
- 不能应用在 TCP/IP 链接上。
在Centos中安装的postgresql,默认的本地认证方式是ident,也就是peer。数据库的用户名必须有对应的操作系统用户名,因此如果一个叫Jedi的操作系统用户,要以postgres用户身份登录,就会出现“认证错误”。大家可以把认证方式改为trust或者password,就可以了。
再多说一句,操作系统的用户与postgresql中的用户是两码事,可以有不同的密码。如果是用的password的认证方式,那么你用postgres登录操作系统后,还需要再次输入postgresql的密码,才能进入数据库。
Centos下本地连接postgresql时出现认证错误的问题相关推荐
- 计算机网络电缆被拔出是怎么办,解决Windows7系统下本地连接显示网络电缆被拔出的方法...
在使用Windows7系统上网的过程中,想必有很多人都有遇到过网络断掉的问题吧,比如有部分使用win7 64位系统的用户反映说电脑桌面右下角本地连接显示网络电缆没有插好的提示,可是他们的网线有插好,不 ...
- Linux centos 下 eclipse 打开文件时关闭
Linux centos 下 eclipse 打开文件时关闭 现象描述:在 centos 系统下,打开eclipse后,打开文件时,eclipse退出. 在命令行下启动时,会打印异常信息: java: ...
- navicat for mysql 1045错误,navicat连接mysql时出现1045错误的解决方法
navicat连接mysql时出现1045错误的解决方法 navicat for MySQL 连接本地数据库出现1045错误 如下图: 查了很多资料,意思是说mysql没有授权远程连接,也就是权限不够 ...
- Navicat 连接MySQL时出现1251错误的解决方案
Navicat 连接MySQL时出现1251错误的解决方案 参考文章: (1)Navicat 连接MySQL时出现1251错误的解决方案 (2)https://www.cnblogs.com/diao ...
- 路由和远程访问 连接被远程计算机终止,通过RRAS(路由和远程访问)进行PPPOE拨号连接总是出现连接接口时出现一个错误,连接被远程计算机终止...
系统环境: 操作系统是WINDOWS SERVER 2012 R2.网络是四口千兆网卡:其中一个端口连接中国电信的光猫(光猫自动拨号):其中一个端口连接中国移动的光猫(该光猫无法自动拨号):其中一个连 ...
- 连接Oracle时出现ORA-12505错误
连接Oracle时出现ORA-12505错误 问题:使用eclipse连接Oracle数据库时报错:Listener refused the connection with the following ...
- centos php 开启socket,centos下phpsocket连接,该如何解决
centos下php socket连接 最近要做一个基于tcp/ip下的短连接 我们自己的代码使用的是php的socket连接,对方服务器,已经测试能够连接,并接收到对方传回来的数据: 现在要求我们自 ...
- navicat连接MySQL8+时出现2059错误解决方法
在用navicat连接MySQL8+时会出现2059错误,这是由于新版本的MySQL使用的是caching_sha2_password验证方式,但此时的navicat还没有支持这种验证方式. 解决方法 ...
- 当电脑在linux系统下不能连接wifi时,一种可行的解决方法
route -n ##查看路由状态,如果有类似172.25.254.250,(关键看后三位是否为250,如果是则说明主机中的默认网关没有去掉),由于我的设置好了所以不是 cd /etc/sysconf ...
最新文章
- hibernate annotation多对多中间表添加其他字段的第三种方法
- 商汤首付56亿!上海建成亚洲最大AI“发电厂”,万亿参数大模型训练无压力
- 国内外NLP领域学术界和工业界的牛人和团队
- 运维人最爱的八本书,送给十一不出门的你
- 利用 squid 反向代理提高网站性能
- 如何设置SecureCRT通过代理连接SSH[转]
- AndroidManifest.xml文件详解(application)
- Java提高篇 —— Java浅拷贝和深拷贝
- 一次面试总结(记录)
- Confluence 6 修改警告的阈值和表现
- 解决Pycharm中import时无法识别自己写的程序(转载)
- echarts 三环圆环_echarts实现环形进度图
- ActiveMQ简单介绍+简单实例
- 诊断(UDS)协议栈设计-系列讲解
- HBuilder X 设置保存时编译
- WM_SIZING 使用说明
- 网站备案服务器ip怎么填写,域名备案网站ip地址如何填写
- 北京最最最牛的IT公司都在这了
- 计算机本地硬盘带蓝色问号,win10本地磁盘显示蓝色问号该怎么解决
- Annoying Present
热门文章
- BeanUtils工具包操作JavaBean
- 如何在PySide中使用qrc资源文件
- 爆料!传阿里人靠脸吃饭真相是......
- linuxsvn源代码版本库建立
- Android之SDK、NDK、JNI和so文件
- Maximum Allowed Error 7 错误解决
- 2017华南理工华为杯D bx回文
- linux 原子整数操作详解 及 volatile (二)
- 中国网速排行榜出炉:上海最快 均速达5.4Mb/s
- 以小见大、由浅入深-谈如何面试Javascript工程师