TMS*_*TMS 9 mysql security protocols
我的用户正在使用MS Access和ODBC连接器连接到我的远程MySQL数据库.我想知道这是多么安全,在可能的密码泄露给第三方的意义上.对于窃听甚至中间人攻击,mysql协议认证是否安全?我对安全防范窃听非常满意.请注意,我的担心只是身份验证,我不关心数据泄露.
请不要回复我应该使用SSL.我知道这将是理想的,但设置似乎并不简单.无论如何,我想知道普通mysql协议的安全级别是什么.
egg*_*yal 16
你想要" 安全地窃听甚至是中间人攻击 "是什么意思?您的密码或数据?
您的问题标题特指验证.MySQL可以合理地保护您的密码免受窃听者的攻击(它不会发送明文,并且使用nonce会破坏重播攻击).引用 MySQL协议内部:
MySQL 4.1及更高版本
请记住,mysql.user.Password存储SHA1(SHA1(密码))
- 服务器向客户端发送随机字符串(加扰)
- 客户计算:
- stage1_hash = SHA1(密码),使用用户输入的密码.
- token = SHA1(scramble + SHA1(stage1_hash))XOR stage1_hash
- 客户端将令牌发送到服务器
- 服务器计算
- stage1_hash'= token XOR SHA1(scramble + mysql.user.Password)
- 服务器比较SHA1(stage1_hash')和mysql.user.Password
- 如果它们相同,则密码正常.
(注意SHA1(A + B)是A与B的串联的SHA1.)
该协议修复了旧协议的缺陷,既没有窥探线路也没有mysql.user.Password足以成功连接.但是当一个人同时拥有mysql.user.Password和截获的数据时,他就有足够的信息来连接.
但是,经过身份验证的会话将以明文形式继续:窃听者将能够查看所有查询和结果; 并且MITM将能够对其进行更改.如手册中所述:
默认情况下,MySQL使用客户端和服务器之间的未加密连接.这意味着有权访问网络的人可以查看您的所有流量并查看正在发送或接收的数据.他们甚至可以在客户端和服务器之间传输数据时进行更改.
虽然您可能不喜欢这个答案,但SSL是一种旨在打败数据窃听(如何加密通信?)和MITM攻击的工具(任何一方如何确认其对等方是否是它认为的对象?).实际上,如果mysql客户端 - 服务器协议单独击败了这些威胁,那么就没有理由通过SSL使用mysql(因此它不太可能是受支持的配置).