Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践
起首Mysql的暗码权限存储在mysql.user表中。我们不存眷鉴权的部分,我们只关怀身份认证,辨认身份,后面的权限控制是很简单的工作。
你可以用下面的语句,验证和mysql.user表中存储的是一致的。
select sha1(UNHEX(sha1(‘password’)))
以上就是办事端关于暗码的存储,接下来是认证过程。
Mysql采取的是一种challenge/response(挑衅-应答)的认证模式。
第一步:客户端连接办事器
第二步:办事器发送随机字符串challenge给客户端
第三步:客户端发送username+response给办事器
个中response=HEX(SHA1(password) ^ SHA1(challenge + SHA1(SHA1(password))))
我们分析它的安然性:
- 抓包可以获得response,然则每次认证办事器都邑生成challenge,所以经由过程抓包无法构造上岸信息。
- 数据库内容被窃视,数据库记录的是sha1(sha1(password)),弗成以获得sha1(password)和明文暗码,所以无法构造response,同样无法上岸。
在mysql.user表中有个authentication_string字段,存储的是暗码的两次sha1值。
第四步:办事器验证response。
办事器存储了SHA1(SHA1(password)))
所以可以计算获得SHA1(challenge + SHA1(SHA1(password))))
那么SHA1(password)=response^ SHA1(challenge + SHA1(SHA1(password))))
最后再对SHA1(password)求一次sha1和存储的数据进行比对,一致表示认证成功。
当然如不雅被抓包同时数据库泄密,就可以获得sha1(password),就可以仿冒上岸了。
这种认证方法其实是有一个框架标准的,叫做SASL(Simple Authentication and Security Layer ),专门用于C/S模式下的用户名暗码认证。道理就是办事器发送一个挑衅字challenge给客户端,客户端返回的response证实本身拥有暗码,大年夜而完成认证的过程,全部过程不须要暗码明文在收集上传输。
基于SASL协定有很多实现,mysql的就是模仿的CRAM-MD5协定,再比如SCRAM-SHA1协定,是mongdb、PostgreSQL 应用的认证方法。在JDK中专门有一套SASL的API,用于实现不合的SASL认证方法。
【编辑推荐】
- 一个弗成思议的MySQL慢查分析与解决
- MongoDB即将宣布文档数据库3.6版,新功能抢先看!
- 25.6万笔/秒的交易还节俭2000台办事器,数据库OceanBase是怎么做到的?
- 分布式MySQL数据库中心件MySQLDA深刻介绍
- 应用MySQL全备份,若何只恢复一个库或者一个表?
推荐阅读
Linux 4.14长久版内核发布:支持4000TB内存、AMD内存加密
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践Linus Torvalds宣布,Linux Kernel 4.14版体系内核已经正式宣布,并且这是个LTS经久支撑版本,更合实用于各类Linux发行>>>详细阅读
本文标题:MySQL是如何做到安全登陆
地址:http://www.17bianji.com/lsqh/38828.html
1/2 1