MySQL是如何做到安全登陆
首先Mysql的密码权限存储在mysql.user表中。我们不关注鉴权的部分,我们只关心身份认证,识别身份,后面的权限控制是很简单的事情。
在mysql.user表中有个authentication_string字段,存储的是密码的两次sha1值。
你可以用下面的语句,验证和mysql.user表中存储的是一致的。
select sha1(UNHEX(sha1(‘password’)))
以上就是服务端关于密码的存储,接下来是认证过程。
Mysql采用的是一种challenge/response(挑战-应答)的认证模式。
第一步:客户端连接服务器
第二步:服务器发送随机字符串challenge给客户端
第三步:客户端发送username+response给服务器
其中response=HEX(SHA1(password) ^ SHA1(challenge + SHA1(SHA1(password))))
第四步:服务器验证response。
服务器存储了SHA1(SHA1(password)))
所以可以计算得到SHA1(challenge + SHA1(SHA1(password))))
那么SHA1(password)=response^ SHA1(challenge + SHA1(SHA1(password))))
最后再对SHA1(password)求一次sha1和存储的数据进行比对,一致表示认证成功。
我们分析它的安全性:
抓包可以得到response,但是每次认证服务器都会生成challenge,所以通过抓包无法构造登陆信息。
数据库内容被偷窥,数据库记录的是sha1(sha1(password)),不可以得到sha1(password)和明文密码,所以无法构造response,同样无法登陆。
当然如果被抓包同时数据库泄密,就可以得到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是如何做到安全登陆的更多相关文章
- MySQL Study之--MySQL普通用户无法本地登陆
MySQL Study之--MySQL普通用户无法本地登陆 在安装完毕MySQL后,我们通常加入拥有对应权限的普通用户用来訪问数据库.在使用用户本地登录数据库的时候,常常会出现怎么登录也无 ...
- Ubuntu18.04 安装MySQL(Linux)解决登陆权限问题及Navicat for mysql 中文乱码问题
一.MySQL(Linux)解决登陆权限问题 Ubuntu18.04 安装mysql或者mariadb之后,发现普通用户和远程都没有权限连接. ERROR 1045: Access denied fo ...
- Mysql空用户导致数据库登陆故障处理 (原创帖,转载请注明出处)
首先感谢在本次故障中阿铭对我的无私帮助,万分感谢!阿铭linux论坛:http://www.apelearn.com/study_v2/ 问题描述: 公司安全部门扫描到数据库空密码漏洞,用户名密码 ...
- mysql创建用户后无法登陆
创建用户后登陆失败的原因是存在匿名用户: root@controller:~# mysql -h localhost -uaa -ppassword ERROR 1045 (28000): Acces ...
- MySQL学习笔记(1) - cmd登陆和退出
1. 打开cmd,输入,回车 mysql -uroot -p -P3306 -h127. 1)-u :指定用户名,root为超级权限用户. 2)-p :输入密码,不指定时回车后会提示输入密码,并用*号 ...
- MySQL 设置cmd命令行登陆
1.MySQL自带工具的存放路径: D:\Program Files\MySQL\MySQL Server 5.6\bin 为了方便使用,我们可以将以上路径添加到系统的环境变量path中 如果你不放, ...
- 【C#】【MySQL】C#连接MySQL数据库(三)登陆注册代码
项目结构 项目代码 WebForm_Login.aspx <%@ Page Language="C#" AutoEventWireup="true" Co ...
- MySQL 数据库中用户表中口令登陆设置
工具:MyEclipse8.5.apache-tomcat-6.0.43.MySQL5.6 问题:项目是同事发给我,正常运行之后,使用MySQL表里的管理员数据登陆时,提示“仅限于非总部工号登录!” ...
- mysql创建新用户及新用户不能本地登陆的问题
最近在搭建hadoop集群,主节点上面安装的MySQL数据库,对着方面不熟悉,为hive.Ooize等服务统一使用的root账号和密码,为了安全一些库对于某些用户是不可见的,所以需要针对不同的服务设置 ...
随机推荐
- 未能加载文件或程序集“Antlr3.Runtime”或它的一个依赖项的解决办法
一.问题症状 未能加载文件或程序集“Antlr3.Runtime”或它的一个依赖项.参数错误. 二.问题起因和经过 今天我在虚拟机下做开发,asp.net mvc4开发测试微信接口,一不小心虚拟机 ...
- QT开发(十二)——QT事件处理机制
一.QT事件简介 QT程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发.QT事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. 常见的QT事件类型如下: 键盘事件: 按键按下和松开 ...
- Qt正则表达式提取数据
这几天在上嵌入式课程设计,需要用到Qt,这个是信号与槽的,寒假的时候也简单学习了一些,但是没有怎么深入,又回过来看了看Qt,发现Qt的ui界面配置与Android的好像,当然Qt也可以拿来开发Andr ...
- Ubuntu简单搭建git私有服务
gitserver搭建过程 搭建gitserver过程记录 例如以下: 环境: serverUbuntu虚拟机(Boss),能通过网络訪问到(server地址:192.168.9.103). clie ...
- Download Visual Studio
Welcome to a new way to install Visual Studio! In our newest version, we've made it easier for you t ...
- [JS Compose] 7. Ensure failsafe combination using monoids
monoids is a semi-group with a neutral element. A semigroup, it does not have an element to return s ...
- Jquery Validate结合QTip实现绚丽的表单验证
相信做过前端开发的童鞋,一定都涉及到表单验证的模块设计,也定都会对Alert的粗暴提示厌恶至极.当然,我也不例外.一直期待着,一种比较优雅提示效果. 看到这,大家可能觉得Jquery Validate ...
- css换行缩进
1.换行缩进 <div id="alertiframe"> <span id="closeiframe">×</span> ...
- js正则表达式test方法、exec方法与字符串search方法区别
1.正则表达式test方法 test() 方法用于检测一个字符串是否匹配某个模式 返回值: 如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 fal ...
- Java之JVM调优案例分析与实战(2) - 集群间同步导致的内存溢出
环境:一个基于B/S的MIS系统,硬件为两台2个CPU.8GB内存的HP小型机,服务器是WebLogic 9.2,每台机器启动了3个WebLogic实例,构成一个6个节点的亲合式集群. 说明:由于是亲 ...