mysql协议中的身份验证有多安全?

时间:2012-06-25 15:48:21

标签: mysql security protocols

我的用户正在使用MS Access和ODBC连接器连接到我的远程MySQL数据库。我想知道这是多么安全,在可能的密码泄露给第三方的意义上。对于窃听甚至中间人攻击,mysql协议认证是否安全?我对安全防范窃听非常满意。请注意,我关心的只是身份验证,我并不关心数据泄露。

请不要回复我应该使用SSL。我知道这将是理想的,但设置似乎并不简单。无论如何,我想知道普通mysql协议的安全级别是什么。

2 个答案:

答案 0 :(得分:15)

你希望“安全地进行窃听甚至是中间人攻击”是什么?您的密码或数据?

您的问题标题专门针对身份验证。 MySQL可以合理地保护您的密码免受窃听者的攻击(它不会发送明文,并且使用nonce会破坏重播攻击)。引用MySQL protocol internals

  

MySQL 4.1及更高版本

     

请记住,mysql.user.Password存储SHA1(SHA1(密码))

     
      
  • 服务器向客户端发送随机字符串(加扰)
  •   
  • 客户计算:      
        
    • stage1_hash = SHA1(密码),使用用户输入的密码。
    •   
    • token = SHA1(scramble + SHA1(stage1_hash))XOR stage1_hash
    •   
  •   
  • 客户端将令牌发送到服务器
  •   
  • 服务器计算      
        
    • stage1_hash'=令牌XOR SHA1(scramble + mysql.user.Password)
    •   
  •   
  • 服务器比较SHA1(stage1_hash')和mysql.user.Password
  •   
  • 如果它们相同,则密码正常。
  •   
     

(注意SHA1(A + B)是A与B串联的SHA1。)

     

这个协议解决了旧协议的缺陷,也没有窥探   wire和mysql.user.Password足以成功   连接。但是当一个人同时拥有mysql.user.Password和   在线上拦截数据,他有足够的信息可以连接。

然而,经过身份验证的会话以明文形式继续:窃听者将能够查看所有查询和结果;并且MITM将能够对其进行更改。如the manual中所述:

  

默认情况下,MySQL使用客户端和服务器之间的未加密连接。这意味着有权访问网络的人可以查看您的所有流量并查看正在发送或接收的数据。他们甚至可以在客户端和服务器之间传输数据时更改数据。

虽然您可能不喜欢这个答案,但SSL是工具,旨在打败数据窃听(通信如何加密?)和MITM攻击(如果任何一方如何验证其同行是谁认为的?)。实际上,如果mysql客户端 - 服务器协议单独击败了这些威胁,那么没有理由通过SSL使用mysql(因此它不太可能是受支持的配置)。

答案 1 :(得分:-2)

简短回答:是的,该协议对窃听和MITM攻击是安全的。

只有当攻击者知道mysql.user的内容时,如果攻击者设法嗅探身份验证尝试 AND ,那么他随后可以对服务器进行身份验证。例如,如果您在两个不同的mysql服务器上使用相同的密码,并且攻击者可以访问其中一个,则他也可以连接到第二个服务器。