当前位置: 首页 > 编程日记 > 正文

PostgreSQL md5 auth method introduce, with random salt protect

在上一篇BLOG中介绍了不要在pg_hba.conf中使用password认证方法, 除非你的客户端和数据库服务器之间的网络是绝对安全的.
http://blog.163.com/digoal@126/blog/static/1638770402013423102431541/

MD5方法,认证过程 :
Encrypting Passwords Across A Network
The MD5 authentication method double-encrypts the password on the client before sending it to the server. It first MD5-encrypts it based on the user name, and then encrypts it based on a random salt sent by the server when the database connection was made. It is this double-encrypted value that is sent over the network to the server. Double-encryption not only prevents the password from being discovered, it also prevents another connection from using the same encrypted password to connect to the database server at a later time.


数据库服务器给客户端连接进程发送认证请求包 :
src/backend/libpq/auth.c
/** Send an authentication request packet to the frontend.*/
static void
sendAuthRequest(Port *port, AuthRequest areq)
{StringInfoData buf;pq_beginmessage(&buf, 'R');pq_sendint(&buf, (int32) areq, sizeof(int32));/* Add the salt for encrypted passwords. */if (areq == AUTH_REQ_MD5)pq_sendbytes(&buf, port->md5Salt, 4);#if defined(ENABLE_GSS) || defined(ENABLE_SSPI)/** Add the authentication data for the next step of the GSSAPI or SSPI* negotiation.*/else if (areq == AUTH_REQ_GSS_CONT){if (port->gss->outbuf.length > 0){elog(DEBUG4, "sending GSS token of length %u",(unsigned int) port->gss->outbuf.length);pq_sendbytes(&buf, port->gss->outbuf.value, port->gss->outbuf.length);}}
#endifpq_endmessage(&buf);/** Flush message so client will see it, except for AUTH_REQ_OK, which need* not be sent until we are ready for queries.*/if (areq != AUTH_REQ_OK)pq_flush();
}


服务端接收到客户端发过来的经过salt和原密码md5合成后的md5, 校验是否正确.
src/backend/libpq/crypt.c
 * crypt.c*        Look into the password file and check the encrypted password with*        the one passed in from the frontend.
int
md5_crypt_verify(const Port *port, const char *role, char *client_pass)
{int                     retval = STATUS_ERROR;char       *shadow_pass,*crypt_pwd;
... 略./** Compare with the encrypted or plain password depending on the* authentication method being used for this connection.*/switch (port->hba->auth_method){case uaMD5:crypt_pwd = palloc(MD5_PASSWD_LEN + 1);if (isMD5(shadow_pass)){/* stored password already encrypted, only do salt */if (!pg_md5_encrypt(shadow_pass + strlen("md5"),port->md5Salt,sizeof(port->md5Salt), crypt_pwd)){pfree(crypt_pwd);return STATUS_ERROR;}}else{/* stored password is plain, double-encrypt */char       *crypt_pwd2 = palloc(MD5_PASSWD_LEN + 1);if (!pg_md5_encrypt(shadow_pass,port->user_name,strlen(port->user_name),crypt_pwd2)){pfree(crypt_pwd);pfree(crypt_pwd2);return STATUS_ERROR;}if (!pg_md5_encrypt(crypt_pwd2 + strlen("md5"),port->md5Salt,sizeof(port->md5Salt),crypt_pwd)){pfree(crypt_pwd);pfree(crypt_pwd2);return STATUS_ERROR;}pfree(crypt_pwd2);}break;
... 略.

[参考]
1. src/backend/libpq/auth.c
2. src/backend/libpq/crypt.c
3. http://www.postgresql.org/docs/9.3/static/protocol-flow.html
4. http://www.postgresql.org/docs/9.3/static/encryption-options.html
5. http://blog.163.com/digoal@126/blog/static/1638770402013423102431541/

相关文章:

常用Maven收集以及Maven技巧

1.完整的Maven的pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apach…

大促下的智能运维挑战:阿里如何抗住“双11猫晚”?

作者 | 阿里文娱技术专家子霖出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2019 双 11 猫晚在全球近 190 个国家和地区播出&#xff0c;海外重保是首要任务&#xff0c;如何提升海外用户观看猫晚的体验&#xff1f;本文将详解双 11 猫晚国际化的技术挑战和技术策略…

这次真的是下定决心了

这次我想是真的&#xff0c;真的。 上上周买了一本书 数据结构 c版 看到这本书的重点 线性表第三节&#xff0c;看不下去了&#xff0c;由于我模板学的不怎么样&#xff0c;数据结构c版大部分涉及了c 的模板&#xff0c;而且我觉得这本书上的代码有些漏洞。上上周买书的第三天…

子弹实例化的代码

using UnityEngine; using System.Collections;public class fire : MonoBehaviour {public float rate 0.2f;public GameObject bullet;private void Start(){OnFire();}//实例化子弹public void Fire(){GameObject.Instantiate(bullet, transform.position, Quaternion.iden…

Shiro源码学习之一

一.最基本的使用 1.Maven依赖 <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.2.4</version></dependency><dependency> <groupId>org.slf4j</groupId> …

传百度要与阿里、腾讯争夺在线办公市场?“百度Hi”开放520人同时在线音视频会议

在线办公市场持续火热。4月20日&#xff0c;百度旗下在线办公平台“百度Hi”再升级&#xff0c;正式发布业内大规模的520人音视频会议&#xff0c;并支持多入口快速入会&#xff0c;加码在线办公。另有消息称&#xff0c;4月底&#xff0c;百度在线办公平台将发布重磅升级&…

SQL 2008 安装资料及下载地址

SQL Server 2008 序列号&#xff1a; Developer: PTTFM-X467G-P7RH2-3Q6CG-4DMYB Enterprise: JD8Y6-HQG69-P9H84-XDTPG-34MBB 服务器设置SQL Server 代理 NT AUTHORITY\SYSTEMSQL Server Database Engine NT AUTHORITY\NETWORK SERVICE SQL Server Browser 默认 SQL Ser…

Objective-C非正式协议与正式协议

为什么80%的码农都做不了架构师&#xff1f;>>> 类别与类扩展的区别&#xff1a; ①类别中只能增加方法&#xff1b; ②是的&#xff0c;你没看错&#xff0c;类扩展不仅可以增加方法&#xff0c;还可以增加实例变量&#xff08;或者合成属性&#xff09;&#xff…

Shiro源码学习之二

接上一篇 Shiro源码学习之一 3.subject.login 进入login public void login(AuthenticationToken token) throws AuthenticationException {clearRunAsIdentitiesInternal();Subject subject securityManager.login(this, token);PrincipalCollection principals;String hos…

Widgets 整理

1.滑动条 http://www.newnaw.com/pub/sl/031.html <--!grid中的内容--> <Grid x:Name"slidergrid" HorizontalAlignment"Left" VerticalAlignment"Center" Background"Azure" Margin"20"> <StackPane…

黑客用上机器学习你慌不慌?这 7 种窃取数据的新手段快来认识一下!

作者 | IrrfanAk译者 | 天道酬勤、Carol 责编 | Carol出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;机器学习以分析大型数据集和模式识别的能力而闻名。它基本上属于人工智能的一个子集。而机器学习使用的算法&#xff0c;是利用了先前的数据集和统计分析来做出假设…

ServletResponse-中文名的下载

2019独角兽企业重金招聘Python工程师标准>>> package com.httpServletResponse; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.se…

Linux环境编译安装OpenJDK

Centos6.5 AMD64位机器 Java的源码是C,C和Java实现的&#xff0c;所以还需要有一个安装好的java建议选OracleJDK参考文末 安装OracleJDK Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序 安装依赖 | Install dependence # yum -y install gcc gcc-c alsa-lib alsa-…

最快69秒逆向DRAM地址映射,百度设计的这款逆向工具如何做到快速可靠?

来源 | 百度安全实验室出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;近日&#xff0c;国际顶级设计自动化大会DAC大会公布DAC 2020会议议程和论文名单&#xff0c;由百度安全发表的《DRAMDig: AKnowledge-assisted Tool to Uncover DRAM Address M…

国外厂商在行业客户上输单的原因

这两天听一个朋友聊天发泄&#xff0c;他在一家总代J公司工作&#xff0c;代理业内排行第一的国外厂商C公司的产品&#xff0c;他负责D行业在南方某几个省的销售业务&#xff0c;工作中需要与C公司的销售紧密配合。经过接近一年的工作&#xff0c;他拿到一些项目&#xff0c;但…

[android] 从gallery获取图片

效果就是点击按钮&#xff0c;打开系统图库应用&#xff0c;可以选择一张里面的图片展示出来 设置隐式意图 获取Intent对象&#xff0c;通过new出来 调用Intent对象的setAction()方法&#xff0c;设置动作&#xff0c;参数&#xff1a;Intent.ACTION_PICK 调用Intent对象的setT…

调试JDK源码-HashSet实现原理

调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hashtable实现原理以及线程安全的原因 代码 Set<String> snew HashSet<String>();s.add("http://blog.csdn.ne…

Python 炫技操作:海象运算符的三种用法

作者 | 明哥来源 | Python编程时光&#xff08;ID:Cool-Python&#xff09;Python 版本发展非常快&#xff0c;如今最新的版本已经是 Pyhton 3.9&#xff0c;即便如此&#xff0c;有很多人甚至还停留在 3.6 或者 3.7&#xff0c;连 3.8 还没用上。很多 Python 3.8 的特性还没来…

2010.10.30 OA 项目组一周工作报告

本周基本上实现了上周的目标&#xff0c;但和计划相比有落后。 进度&#xff1a;55 本周提交了3.0任务评估的第一个版本&#xff0c;一共为1003小时&#xff0c;客户收到该评估后&#xff0c;对3.0任务进行了调整&#xff0c;将部分任务移到2011.2版本中&#xff0c;同时添加了…

继承log4.net的类

using System; using System.Diagnostics;[assembly: log4net.Config.XmlConfigurator(Watch true)] namespace Hbl.Core {public static class Log{/// <summary>/// 一般错误/// </summary>/// <param name"message">消息</param>public …

调试JDK源码-Hashtable实现原理以及线程安全的原因

调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hashtable实现原理以及线程安全的原因 Hashtable是线程安全的&#xff0c;我们从源码来分析 代码很简单 Hashtable<String, …

源代码查看工具 Source Navigator 使用心得

在ubuntu 10.04下试用了Source Navigator&#xff0c;有条件还是装Source insight吧&#xff0c;不是一个级别的&#xff0c;非常不方便。 Source Navigator 是Red Hat出品的一款查看源代码的工具&#xff0c;非常好用&#xff0c;与Windows下的Source Insight有一敌。但是它的…

那个分分钟处理10亿节点图计算的Plato,现在怎么样了?

受访者 | 于东海记者 | 夕颜出品 | CSDN&#xff08;ID:CSDNnews&#xff09;「AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分。通过对 AI 生态顶级大咖、创业者、行业 KOL 的访谈&#xff0c;反映其对于行业的思考、未来趋势的判断、技术的实践…

android TextView里边实现图文混配效果

做的游戏攻略中的图文载入已经用TextView实现。但看到网易新闻里的内容。点击图片能够调到一个新的Activity &#xff0c;感觉也像Textview 实现的&#xff0c;但不知道怎么弄&#xff0c;想想能够通过动态载入Textview和ImageView 布局实现&#xff0c;但当量大的时候回事很复…

《异步处理在分布式系统中的优化作用》学习笔记

原文地址&#xff1a;http://www.infoq.com/cn/presentations/optimization-of-asynchronous-processing-in-distributed-systems 视频地址&#xff1a;http://v.qq.com/boke/page/l/0/6/l0196plsvp6.html 主讲人&#xff1a;赵海平 Facebook hiphop HHVM 阿里巴巴技术保障部…

CISCO设备上DHCP实例

Cisco设备上设置DHCP实例 -------------------------------------------------------------------------------- 一位客户想把DHCP SERVER迁移到6509交换机的MSFC上,要求还挺复杂: 1.同时为多个VLAN的客户机分配地址 2.VLAN内有部分地址采用手工分配的…

360金融翟政:科技成就金融场景零容错

翟政&#xff0c;拥有超过20年的互联网经验&#xff0c;我国第三方支付第一批从业者&#xff0c;是多个知名第三方支付公司产品研发团队的组建者&#xff0c;核心系统的主设计师&#xff0c;管理层核心成员。设计搭建的支付系统过去这十年来一直在服务着各行各业的在线支付需求…

OSSIM平台安全事件关联分析实践

OSSIM平台安全事件关联分析实践在《开源安全运维平台OSSIM最佳实践》一书中叙述到&#xff0c;事件关联是整个OSSIM关联分析的核心&#xff0c;对于OSSIM的事件关联需要海量处理能力&#xff0c;主要便于现在需要及时存储从设备采集到的日志&#xff0c;并能关联匹配和输出&…

《Apache Kafka》学习笔记

1.什么是Kafka Kafka是一个高通过率的分布式消息系统 2.消息队列&#xff08;Message Queue)MQ的模型 消息队列的简单架构图 3个核心概念&#xff1a; Sender Application&#xff1a;消息队列的发送者&#xff0c;也叫生产者producer Message Queue Receiver Application…

4 月 24 日开播!基于神经网络建模的信息传播预测

信息传播在我们的日常生活中无处不在&#xff0c;例如谣言的扩散、产品的推广以及新思想和新技术的普及等等&#xff0c;其建模和预测已经在多个重要领域内得到了广泛的研究。近年来&#xff0c;很多研究者利用以循环神经网络为主的深度学习模型对信息传播过程进行建模&#xf…