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