0

所以,我正在使用一个非常旧的系统,它使用一个人的 mysql 数据库凭据来验证网站(数据库最初只能从命令行访问,但现在可以从 php 前端访问)。由于某些内部原因(并为了保留用户的历史记录),我必须保持旧的身份验证不变。我负责向该系统添加 openid 身份验证。不知何故,我需要能够在通过 openid 登录站点时检索用户 mysql 用户名和密码(顺便说一下,使用 Zend 框架)。我想在第一次登录时简单地要求注册,用户必须提供他们的 mysql 凭据,但我宁愿不存储密码纯文本。我也考虑过清空每个人的 mysql 密码,只设置用户 s mysql 用户名手动(而不是让用户提供这个,因为他们可以提供任何用户名)。这正在变成一场安全噩梦。有人对替代品有任何建议吗?

顺便说一下,这是在 Linux 服务器上运行的。另外,我不能使用mysql可插拔认证,因为mysql版本是5.0(可插拔认证需要mysql 5.5),不,我不能更新它。

4

2 回答 2

2

MySQL 密码是散列的,因此您将无法从 MySQL 中提取明文密码。我想这给您留下了两种选择,您在问题中都考虑了这两种选择:

  • 用户第一次使用 OpenID 登录时,将 MySQL 中的用户密码替换为您的应用程序已知的新密码。您的应用程序使用该密码登录到任何使用 OpenID 的用户的帐户。

    缺点:使用 OpenID 的用户无法重新使用直接 MySQL 身份验证,因为他们不再知道自己的密码。甚至不使用 MySQL 命令行工具。这意味着曾经使用过 OpenID 的用户必须永远使用 OpenID。

  • 当用户注册使用 OpenID 时,您的应用程序会记住他们的密码。

    缺点:您的应用程序保留了一个明文密码列表

    缺点:当用户自己更改 MySQL 密码时,您的应用程序会中断。

第三个选项:

  • 对于每个使用 OpenID 的用户,为他们创建第二个 MySQL 用户,该用户具有通用密码。将分配给普通帐户的所有权限复制到此“影子”帐户。

    缺点:普通用户和影子用户必须保持同步,这样如果某个 MySQL 的某些权限被添加或撤消,它们也应该同时被另一个添加或撤消。忘记这样做会导致一团糟。

于 2012-06-11T16:47:56.863 回答
0

鉴于您无法明智地为 CLI 客户端执行 openid 身份验证(即使使用 PAM),我强烈建议您不要尝试将 openid 用户与 mysql 用户协调 - 只需添加一个通过 openid 身份验证的任何人都可以使用的通用用户连接到数据库。

于 2012-06-11T16:46:55.123 回答