在数据库中存储数据库密码

时间:2011-10-21 22:28:38

标签: php mysql security passwords

我们正在构建一个具有多个独立客户端数据库的系统,允许客户端根据需要创建。有一个“Admin”数据库,它包含用户名,服务器上数据库的数据库名,用户名和密码都存储在“admin”数据库中。我使用这些信息连接到用户选择的数据库,所以我需要能够检索实际的密码(我想......对吗?)。

那么存储密码甚至数据库名称的最佳方法是什么?有没有办法我可以加密,然后在需要时解密?

提前感谢您的帮助..

阿罗哈,

詹姆斯

3 个答案:

答案 0 :(得分:0)

如果要加密数据库名称,可以使用AES_ENCRYPT()/AES_DECRYPT()等函数。

你永远不能以简单的方式存储密码。

您永远不能以可解密的形式存储密码。

使用单向加密存储密码。要检查密码,您需要加密用户提供的密码并将其与存储的密码进行比较。

对于MySQL,您可以使用PASSWORD()函数。

答案 1 :(得分:0)

所以这是存储密码的协议,这实际上是所有这一切中最重要的部分:

  1. 纯文本是一个很大的禁忌,因为如果您的服务器遭到入侵,攻击者可以发布所有客户端用户名和密码的列表,这种情况有多种原因。

  2. 加密密码很糟糕,因为如果您的服务器遭到入侵,攻击者可以像程序一样简单地解密密码,现在您遇到与明文相同的问题。

  3. 像MD5,SHA-1甚至SHA-512这样的加密摘要要好得多,因为你只存储和比较散列密码,但它们仍然很糟糕,因为它们被设计为非常快速地散列数据数据完整性和签名的目的。这使得通过现代硬件上的暴力攻击对密码进行逆向工程变得非常容易 - 即使使用盐! (有关此目的,请参阅有关利用GPU的文章!)

  4. 那么这又给我们留下了什么?事实证明,摘要是一种很好的方法,但是你想要的是计算复杂的,因此很难进行暴力攻击。有很多可用的,但我在我的专业工作中采用了Brcypt哈希。

    作为旁注,密码总是与salt一起存储以避免彩虹表攻击。 Bcrypt的一个优点是内置了腌制程序,因此您不必担心它。

答案 2 :(得分:-1)

我绝对会以普通/可解密的形式存储密码。

如果您确实需要访问用户数据库,则可以使用admin / root访问服务器中的任何用户数据库。