手册:重置密码

From mediawiki.org
This page is a translated version of the page Manual:Resetting passwords and the translation is 100% complete.

在一些情况下,用户可能需要重置其密码。 例如,用户忘记了自己的密码,或是遇到某种可能会泄露其密码的安全漏洞。 大多数情况下,可以使用“通过邮件获得新密码”来重置密码。

对于忘记用户名或是无法查看邮箱的用户,可能需要管理员或系统管理员进行一些额外操作。

方法

使用 Special:UserLogin

如果您知道自己账户的名称,则可以使用登陆界面上的“忘记密码”功能。 要使用此功能,请在维基上访问 Special:UserLogin 这个页面,填入用户名并点击“通过电邮发送新密码”按钮。 一个临时密码会发送到该用户名绑定的电子邮箱,一份重置密码的指导说明也会一同发送。 即使未确认电子邮件地址,也会发生这种情况。

根据电邮地址寻找用户名

如果您知道一个用户的电邮地址,但不知道用户名,那么您可以通过在 MediaWiki 数据库中请求user 表,来寻找关联的用户名。 例如,要寻找user@example.com对应的用户名,可运行以下请求:

SELECT user_name FROM user WHERE user_email = 'user@example.com';

使用 changePassword.php 维护脚本

changePassword.php 维护脚本使得系统管理员可以更改一个账户的密码。 详细方法请见changePassword.php 如果您已熟悉维护脚本,在maintenance子目录下运行如下指令:

# set the password for username 'example' to 'newpassword'
php run.php changePassword.php --user=example --password=newpassword

小心: 系统管理员不应得知未加密的用户账户密码。 用户可能会在多个网站上使用相同的密码。 如果这些网站上的其中一个账户发生密码泄露,那么就可以怀疑系统管理员泄露了密码。 推荐使用“邮寄新密码”以迫使用户自行重置密码,或设置一个稍后可以立即更改的临时密码。


使用 Special:PasswordReset

Special:PasswordReset允许具有“editmyprivateinfo”权限的用户重置本地安装的 MediaWiki 的密码。

使用方法如下:

  • 在框中输入想要重置密码的用户名,并点击“重置密码”
  • 一个自动生成的密码会通过电子邮件发送给用户

要在链接中自动插入用户名,使用Special:PasswordReset?wpUsername=Foo

Special:PasswordReset 与 Special:ChangePassword 之间的区别

MediaWiki differentiates between "resetting" and "changing" a password. In password reset request (via Special:PasswordReset or from the login page), you will be asked to provide either an email and/or username (this is configurable) and then an email is automatically sent to you with a generated password. No login is required to access this page, but might be restricted with internal permission checks.

In password change request (via Special:ChangePassword), you'll be able to directly change the password on the spot (give the old one, and choose new one), but login is required to access the page. So if you cannot access Special:ChangePassword, use Special:PasswordReset to first get a temporary password to log in. But if you can access the former page, use it directly to change the password, this eliminates the need for the email stage. Special:PasswordReset can be disabled with 手册:$wgPasswordResetRoutes setting, if that's the case, and you cannot access Special:ChangePassword, then you need to ask your system administrator for help.


使用resetpassword API

resetpassword API提供与Special:PasswordReset相同的功能。

直接修改数据库

你可以更改数据库中 user 表内的 user_password 字段的值来重置密码。 然而,一般来说使用“邮寄新密码”使用 changePassword.php 脚本比这种方法要简单且安全得多。 您只能将直接修改数据库作为最后的手段,因为这很容易导致您的维基上出现意外的混乱。 在任何手动修改之前,必须备份数据库。 以下方法仅在使用 MediaWiki 默认身份验证程序时有效。 如果您正在使用更改了身份验证流程的扩展程序(例如 LDAPAuth),下列方法可能不起作用。

您看见的 user 表的格式会随着 LocalSettings.php 中的 $wgPasswordDefault 而改变。 然而,如果您使用了一种不同的格式,它会在用户下一次登入时自动变成正确的格式。 因此,对于本说明,我们展示了如何手动设置“B”格式。 通过SQL查询很容易设置这种格式。 它不是默认格式,因为它比 pbkdf2 弱。但是这没有问题,因为 user_password 字段将在下次用户登入时升级为正确的格式。

MySQL 加盐(1234 是盐。你可以用任何数字替换它,只要两处使用到该数字的地方是一样的即可)
UPDATE `user` SET user_password = CONCAT(':B:1234:', MD5(CONCAT('1234-', MD5('somepass')))) WHERE user_name = 'someuser';
PostgreSQL 加盐
update mwuser SET user_password = text(':B:1234:') || MD5(text('1234-') || MD5('somepass')) WHERE user_name = 'someuser';

注释

重启 Apache 并清空浏览器缓存可能会有帮助。

你可以将已知的密码从一个账户复制到另一个账户:

SELECT user_id, user_name, user_password FROM user;
+---------+-----------+----------------------------------------------+
| user_id | user_name | user_password                                |
+---------+-----------+----------------------------------------------+
|       1 | User1     | :B:1d8f41af:1ba8866d9c43d30b7bc037db03a067de |
|       2 | User2     | :B:ee53710f:4291b056175513a5602d48eaeb79705c |
+---------+-----------+----------------------------------------------+

UPDATE user SET user_password = ':B:ee53710f:4291b056175513a5602d48eaeb79705c' WHERE user_id = 1;