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


7

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

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

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

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


あなたは簡単にmysqlクエリでこれを行うことができます...あなたはそのルートに行きたくないのですか?
kevindeleon 2012

ここにいくつかの良い答えがあります。防止策として、スパマーを減らすために、Are You A Humanモジュールを検討することができます-サインアップ時に、ユーザーはゲームをプレイします。これはモバイルでも機能します。次に、通常のcaptcha製品とmollomがあります。お役に立てれば!
therobyouknow 2013

最後にdrupal 7のカスタムモジュールを実装します。管理者/人の領域には、この操作を完了するための新しいフォームがあります。しつこすぎる。ここでより多くのインストラクション。プロジェクトにリンクします。 問題へのリンク。問題やその他の質問についても、drupal.orgでこのトピックをフォローできます。ありがとう。
lgrtm 2013

あなたのモジュールは受け入れられた答えと同じ問題を持っているように見えます、あなたはuser_deleteフックに実行する機会を与えずにデータベースの行を削除しているだけです。
David L

スパムユーザーを削除するために使用されるリンクの下。turnkeylinux.org/blog/deleting-drupal-zombies上記のリンクでは、コードが提供され、このコードはスパムユーザーレジスターを削除します。ただし、このコードは、サイトのハッキング日以降に基づいて削除されます。日数を指定します。 1週間以内にすべてブロックされたユーザーが削除されます
Balachandran

回答:


12

上ののページ(管理者/人)、最初にブロックされたユーザーを選択し、[更新からオプションが選択、選択したユーザーアカウントをキャンセル。(Drupal 7)

別の方法は、ビューの一括操作モジュールを使用することです。


3
これはどのように受け入れられた答えですか?OPは、管理者/ユーザーのページのチェックボックスを使用して、ブロックされたユーザーを一度に50人ずつ選択する必要がないことを具体的に要求していませんか?
squarecandy

2

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

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

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

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

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


LoginTobogganの+1。/ admin / config / system / logintoboggan-「検証されていないユーザーの削除日」を「1日」に設定します。また明日チェックイン!
squarecandy


2

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 > userlistPostgreSQLを使用する場合。
jgrocha

2

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

しかし、これが最も速い方法です。限目。

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

垂れ下がったフックをなくす心配はありません。もちろん、制限数を高く設定すると、SQLサーバーがクラッシュする可能性があります。したがって、適切に設定してください。ブロックするユーザーを1万人削除する必要がありました。私は5000に設定し、2ページのユーザーのみを削除する必要がありました。


これがここで最もわかりやすい答えです。それは迅速で有効な鼻垂の除去です。SQLコマンドなし、追加モジュールなし。
Matt Coady

0

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

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

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

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


はい、私は7を利用しています。そして、はい、最初にサイトのテスト用コピーでこれを試します。
Jose M Vidal

7
これは、hook_user_delete(またはDrupal 6のhook_user( "delete"))を実装するモジュールを実行する機会を与えません。直接SQLを介してこれを行うと、データベースに問題や孤立したデータが残る可能性があります。
mpdonadio

1
@MPDは正しいです。ただし、そのため、これを実行する前に、すべての「ブロックされた」アカウントが実際にスパムアカウントであることを確認してください。サインインしたことがない、または何も実行していない新しいアカウントである場合は、大丈夫ですが...それで...バックアップを最初に作成すると言ったのはそのためです。それを行うための最良の方法ではありません。Drupalフックを実装するすべてのブロックされたアカウントを削除するカスタムモジュールを作成できます。それはおそらくよりクリーンですが、これは簡単に汚い方法です。
ケビンデレオン2012

4
スパムアカウントであっても、アカウント作成時に他のモジュールが処理を行っている可能性があります。たとえば、プロファイルモジュール(および後続)は、アカウントの作成時にユーザーごとに1つ以上のノードを作成します。これらはDBに残ります。
mpdonadio

ゴッチャ。良い点。
ケビンデレオン2012

0

これは、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

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

  • 最初にデータベースのコピーを作成します
    • phpMyadminコンソールに移動して、データベースを選択してください
    • 削除するUIDS範囲を確認するには、user_field_dataテーブルを参照してください。通常、少数のUIDが実際のユーザーです。
    • ブロックされたユーザーのデータを削除します。私の場合、UIDが240を超えるすべてのユーザーがブロックされます。
    • このSQLコマンドを使用して、状況に応じてUID番号を変更します。DELETE FROM users_field_dataWHERE uid> = 240
      DELETE FROM users_data WHERE uid> = 240 DELETE FROM usersWHERE uid> = 240
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.