web-dev-qa-db-ja.com

「ブロックされた」ユーザーを一括で削除する方法は?

自分のサイトに常にアカウントを作成しているスパマーがいます。アカウントはデフォルトで「ブロック」されているため、問題を引き起こしたり、スパマーがアカウントから何かを得たりすることはありません。

それでも、/ admin/peopleページを150回クリックすることなく、50個ずつアカウントをキャンセルすることなく、すべて削除したいと思います。

すべての「ブロックされた」アカウントを1つのステップでキャンセルする方法はありますか?

Drushは一度に1つずつキャンセルできるようです...

7
Jose M Vidal

Peopleページ(admin/people)で、まずブロックされたユーザーを選択し、更新オプションからを選択します。選択したユーザーアカウントをキャンセルします。 (Drupal 7)

別の方法は Views Bulk Operations モジュールを使用することです。

12
Hamid Nikmehr

これは、余分なモジュールを追加したり、派手なスクリプトやbashコマンドを考えたりすることなく、私がやったことです。明らかに、コア一時的のハッキングが含まれるため、これに対する嫌悪感をたくさん抱きます。

しかし、これは[〜#〜] fastest [〜#〜]の方法です。限目。

  • /modules/user/user.admin.incファイルを編集します
  • 制限を検索し、50を高い数値に変更します
  • サイトにアクセスし、ユーザー管理ページ/ admin/people
  • ブロックされたフィルター
  • 削除...
  • drupal神々は気に入らないので、制限数を50に戻します。

drupalフックが欠落している心配はありません。制限数を高く設定すると、SQLサーバーがクラッシュする可能性があります。適切に設定してください。ブロックするユーザーを10k人分削除する必要がありました。 5000に設定し、2ページのユーザーのみを削除する必要がありました。

2

Drupal 8 for Linuxでdrushを使用する場合(bashを使用)の場合)、次のソリューションを使用できます。

    echo 'select name from users_field_data where status=0 and uid!=0' | mysql --silent drupaldatabase > userlist
    for username in `cat userlist`; do drush user-cancel $username -y; done

これはどちらかと言えば遅く(1ユーザー/秒)、安全です。特殊なUTF-8文字名やスペースを含む名前では機能しません。

2
Schlauberg

または、このモジュールの事前ユーザーモジュールとトークンモジュールを使用して、drupal adminでピープルメニューを開き、事前タブメニューを表示してユーザーレコードの束を削除します。

https://www.drupal.org/project/advuser

そして

https://www.drupal.org/project/token

2
Balachandran

データベースから直接ユーザーを削除することはお勧めできません。 drushを介して、またはSQL DELETEを介してデータベースと直接対話することによって行われます。たとえば、いくつかのモジュールはrobot usersを作成し、これらはブロックされる傾向があります。それらを削除するだけでは、モジュールの操作が妨げられ、モジュールが失敗することさえあり、孤立したデータと不可解なエラーメッセージが残ることになります。

スパム登録が「ブロックされた」ユーザーとして表示されると、アカウントがnverifiedのままであるため、ブロックされます(原則として、スパマーは確認しないため、アカウントはブロックされたステータスから進行しません)。

LoginToboggan という名前のプロジェクトでは、事前に定義された間隔で、検証されていないユーザーをシステムから削除することができます。これは、将来登録するスパマーにも対応します。CAPTCHAなどの保護対策を導入する必要がなく、合法的ユーザーのサインアップを妨げる傾向があります。

LoginTobogganを使用してスパムユーザーを一括削​​除すると、データベースを自分でハッキングするよりもはるかに安全で堅牢になります。

これを行うためのモジュールをインストールしたくない場合は、代わりに、drushuser_delete()を使用してnverifiedユーザーを削除できます。

2
Free Radical

ブロックされたすべてのアカウントを削除する必要があると確信している場合は、phpmyadmin(または選択したmysql管理者)でクエリを実行できます。

DELETE FROM users WHERE `status` = 0 AND `uid` != 0;

これにより、ブロックされたすべてのアカウントが取り除かれ、匿名ユーザーが残ります。もちろん、まず最初にDBをバックアップしたいと思うでしょう。また、これにより、正当なアカウントでも何らかの理由でステータスが「ブロック」に設定された可能性があるアカウントが削除されることにも注意してください。

注:私は7よりも6の方がはるかに知っていると言う必要があります。したがって、usersテーブルがDrupal 7で大幅に異なる場合、これは正しくない可能性があります。

0
kevindeleon

これは、vboを​​追加せずにこれを実行する方法を示す、パーティーの後半のソリューションです。コマンド自体はおそらく少し壊れやすく、mysqlの特定の構成で壊れる可能性がありますが、削除自体は安全でなければなりません。

drush sqlq "SELECT uid FROM users WHERE uid >= 629" | grep -v uid|tr '\n' ','|awk '{print "drush ev \"user_delete_multiple(array("$1"))\""}'|sh

ノードについては、適切に変更できます

drush sqlq "SELECT nid FROM node WHERE nid >= 435193 AND type='school'" | grep -v nid|tr '\n' ','|awk '{print "drush ev \"node_delete_multiple(array("$1"))\""}'|sh

Uid/nidの値を適切に取得するには、関数呼び出しとともにgrep部分のnid/uidを変更する必要があることに注意してください。

0
lexicant

IN drupal 8 3つのテーブルのコンテンツを削除する必要があります。

  • 最初にデータベースのコピーを作成します
    • phpMyadminコンソールに移動して、データベースを選択してください
    • 削除するUIDS範囲を確認するには、user_field_dataテーブルを参照します。通常、少数のUIDが実際のユーザーです。
    • ブロックされたユーザーのデータを削除します。私の場合、UIDが240を超えるすべてのユーザーがブロックされます。
    • このSQLコマンドを使用して、状況に応じてUID番号を変更します。 DELETE FROM users_field_data WHERE uid> = 240
      DELETE FROM users_data WHERE uid> = 240 DELETE FROM users WHERE uid> = 240
0
Mario Cantor