如何在不连接数据库的情况下检查用户和密码是否正常工作

时间:2008-12-19 04:32:39

标签: mysql authentication

如何在不实际连接数据库的情况下检查用户/密码对是否有效? 有问题的DBMS是MySQL。

那是我最初的问题。由于大多数人都错了这个问题,我应该将其改为: 如何在不连接MySQL的情况下检查MySQL用户名/密码是否有效? (感谢德罗伯特)

我实际上找到了一个解决方案,请查看下面的答案。

6 个答案:

答案 0 :(得分:5)

如果你想检查 MySQL用户名/密码是否有效,而不是以那个用户身份连接到MySQL,那么你应该看一下users表在mysql数据库中。

但我建议不要这样做;这实际上是一个内部的MySQL实现细节,你真的不应该依赖它。 (例如,如果MySQL有一天获得LDAP身份验证怎么办?)

答案 1 :(得分:1)

我认为这个问题可以解释。大多数人会跳进去说“你不能。”,但如果你真正问的是“我如何使用MySQL来验证用户,但实际上并没有使用数据库?”那是一场完全不同的球赛。看看mod_auth_mysql,这是一个完全相同的Apache模块。如果我们有更多关于你究竟想做什么的详细信息,那么人们可能会更加乐观。

答案 2 :(得分:1)

以有权访问“mysql”数据库(架构)的人身份登录,并执行以下操作: SELECT COUNT(*)FROM MYSQL.USER WHERE USERNAME =?和密码=密码(?)

如果计数> 0然后用户名/密码是正确的。

答案 3 :(得分:0)

如果用户名和密码存储在数据库中,那么除了首先连接之外,显然没有其他方法可以检查它们。

您可以做的最好的事情可能只是在他们登录时连接到数据库。一旦经过身份验证,您可以在磁盘上存储某种形式的会话信息,但这不是一个很好的解决方案。

答案 4 :(得分:0)

简而言之 - 如果用户名/密码存储在数据库中,则不可能。

身份验证基本上意味着您将对具有已知值的质询的响应进行比较。如果您没有要比较的值,则无法进行身份验证。

答案 5 :(得分:0)

一种可能的解决方案是设计某种方案,其中用户名/密码是加密/解密密钥对。显然,这在指定的用户名世界中更为可行,但是如果这是主要目标,这样的策略将允许您不要访问数据库。