自分のサイトに常にアカウントを作成しているスパマーがいます。アカウントはデフォルトで「ブロック」されているため、問題を引き起こしたり、スパマーがアカウントから何かを得たりすることはありません。
それでも、/ admin/peopleページを150回クリックすることなく、50個ずつアカウントをキャンセルすることなく、すべて削除したいと思います。
すべての「ブロックされた」アカウントを1つのステップでキャンセルする方法はありますか?
Drushは一度に1つずつキャンセルできるようです...
Peopleページ(admin/people)で、まずブロックされたユーザーを選択し、更新オプションからを選択します。選択したユーザーアカウントをキャンセルします。 (Drupal 7)
別の方法は Views Bulk Operations モジュールを使用することです。
これは、余分なモジュールを追加したり、派手なスクリプトやbashコマンドを考えたりすることなく、私がやったことです。明らかに、コア一時的のハッキングが含まれるため、これに対する嫌悪感をたくさん抱きます。
しかし、これは[〜#〜] fastest [〜#〜]の方法です。限目。
drupalフックが欠落している心配はありません。制限数を高く設定すると、SQLサーバーがクラッシュする可能性があります。適切に設定してください。ブロックするユーザーを10k人分削除する必要がありました。 5000に設定し、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文字名やスペースを含む名前では機能しません。
または、このモジュールの事前ユーザーモジュールとトークンモジュールを使用して、drupal adminでピープルメニューを開き、事前タブメニューを表示してユーザーレコードの束を削除します。
https://www.drupal.org/project/advuser
そして
データベースから直接ユーザーを削除することはお勧めできません。 drushを介して、またはSQL DELETE
を介してデータベースと直接対話することによって行われます。たとえば、いくつかのモジュールはrobot usersを作成し、これらはブロックされる傾向があります。それらを削除するだけでは、モジュールの操作が妨げられ、モジュールが失敗することさえあり、孤立したデータと不可解なエラーメッセージが残ることになります。
スパム登録が「ブロックされた」ユーザーとして表示されると、アカウントがnverifiedのままであるため、ブロックされます(原則として、スパマーは確認しないため、アカウントはブロックされたステータスから進行しません)。
LoginToboggan という名前のプロジェクトでは、事前に定義された間隔で、検証されていないユーザーをシステムから削除することができます。これは、将来登録するスパマーにも対応します。CAPTCHAなどの保護対策を導入する必要がなく、合法的ユーザーのサインアップを妨げる傾向があります。
LoginTobogganを使用してスパムユーザーを一括削除すると、データベースを自分でハッキングするよりもはるかに安全で堅牢になります。
これを行うためのモジュールをインストールしたくない場合は、代わりに、drushとuser_delete()
を使用してnverifiedユーザーを削除できます。
ブロックされたすべてのアカウントを削除する必要があると確信している場合は、phpmyadmin(または選択したmysql管理者)でクエリを実行できます。
DELETE FROM users WHERE `status` = 0 AND `uid` != 0;
これにより、ブロックされたすべてのアカウントが取り除かれ、匿名ユーザーが残ります。もちろん、まず最初にDBをバックアップしたいと思うでしょう。また、これにより、正当なアカウントでも何らかの理由でステータスが「ブロック」に設定された可能性があるアカウントが削除されることにも注意してください。
注:私は7よりも6の方がはるかに知っていると言う必要があります。したがって、usersテーブルがDrupal 7で大幅に異なる場合、これは正しくない可能性があります。
これは、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を変更する必要があることに注意してください。
IN drupal 8 3つのテーブルのコンテンツを削除する必要があります。
users_field_data
WHERE uid> = 240users_data
WHERE uid> = 240 DELETE FROM users
WHERE uid> = 240