Php 用openid替换mysql用户身份验证

Php 用openid替换mysql用户身份验证,php,mysql,security,zend-framework,openid,Php,Mysql,Security,Zend Framework,Openid,因此,我使用的是一个非常旧的系统,它使用一个人的mysql数据库凭据对网站进行身份验证(该数据库最初仅从命令行访问,但现在从php前端访问)。由于一些内部原因(以及为了保存用户的历史记录),我不得不保留旧的身份验证。我被指控向这个系统添加openid身份验证。不知何故,我需要能够在通过openid(顺便说一下,使用Zend框架)登录站点时检索用户的mysql用户名和密码。我曾经考虑过只需要在第一次登录时注册,用户必须提供他们的mysql凭据,但我不希望以明文形式存储密码。 我还考虑过清空每个人的

因此,我使用的是一个非常旧的系统,它使用一个人的mysql数据库凭据对网站进行身份验证(该数据库最初仅从命令行访问,但现在从php前端访问)。由于一些内部原因(以及为了保存用户的历史记录),我不得不保留旧的身份验证。我被指控向这个系统添加openid身份验证。不知何故,我需要能够在通过openid(顺便说一下,使用Zend框架)登录站点时检索用户的mysql用户名和密码。我曾经考虑过只需要在第一次登录时注册,用户必须提供他们的mysql凭据,但我不希望以明文形式存储密码。 我还考虑过清空每个人的mysql密码,只需手动设置用户的mysql用户名(而不是让用户提供,因为他们可以提供任何用户名)。 这正变成一场安全噩梦。有人对替代方案有什么建议吗


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

考虑到您不能明智地对CLI客户端执行openid身份验证(即使使用PAM),我强烈建议您不要试图协调openid用户和mysql用户,只需添加一个普通用户,通过openid验证的任何人都可以使用该用户连接到数据库。

,因此您将无法从mysql提取明文密码。我想这给你留下了两个选择,你在问题中考虑了这两个选择:

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

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

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

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

    Con:当用户自行更改MySQL密码时,应用程序将中断

第三种选择:

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

    Con:普通用户和影子用户必须保持同步,这样,如果从一个添加或撤销了某些MySQL权限,也应该同时从另一个添加或撤销它们。忘记这样做会导致混乱


这是一个简单的解决方案,但只有当每个人都有相同的权限访问数据库时(即只读与读+写,他们有权访问哪些表等),它才起作用。否则,没有一个通用帐户可以拥有正确的MySQL权限集来覆盖每个用户对数据库的访问权限。我当然同意,但在这种特殊情况下,这不会很好。这是我最后的办法,如果我想不出别的办法:)塞拉达——这正是问题所在。系统最初设置为完全基于mysql帐户委派权限。提供通用帐户意味着给每个人相同的权限。