Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

My wiki collected a lot of spam over the past few months, so I've blocked it to only registered users. Unfortunately I never turned off user registration. Is it possible to block a lot of user accounts at once, or should I just restart?

share|improve this question
    
Do you mean delete the user accounts? –  Shane Madden Jan 3 '12 at 23:41
    
That would work for me. I think MediaWiki may philosophically be designed to favor blocking over deletion. –  Chris Jan 4 '12 at 21:29

2 Answers 2

The quickest and least invasive way to prevent a big list of registered users from making modifications is probably to do a bulk password change for the unwelcome users.

Assuming you're running a Unix-like, and that the list of folks you want to keep is relatively low:

eg., for MySQL:

mysql -p -u root -B wikidb -e 'select user_name from user;' | tee user.list
  • Remove the users you want to keep from the user.list file.

  • Use the MediaWiki password command-line tool to change passwords to something random.

eg.

cd [wiki-docroot]/maintenance/
while read wikiuser; do 
    echo $wikiuser; 
    php ./changePassword.php $wikiuser BOGUS%PASSblahblah77; 
done <user.list

Generating a different password for each user is left as an exercise for the reader. :-)

share|improve this answer
    
Interesting way to do it. It's very cool to see how flexible shell scripts can be. EDIT: found it, a list of command line tools is here: mediawiki.org/wiki/Manual:Maintenance_scripts –  Chris Jan 4 '12 at 21:32
    
Yep, a nice list of command-line tools there. Too bad there isn't a bulk password changer among them. –  Royce Williams Jan 5 '12 at 3:01

Connect to your mysql server:

mysql -h DBSERVER_HOST -u wikiuser wikidb -p

Enter your password at the prompt. Once in mysql prompt, search for the user

mysql> select user_id,user_name from user;

+---------+------------+
| user_id | user_name  |
+---------+------------+
|       9 | spammer    |
|       7 | r2d2       |
|       1 | admin      |
+---------+------------+

Delete every "user_id" you need with:

mysql> delete from user where user_id in(7,9);
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.