# 彻底删除系统中的用户数据

**URL:** https://meta.discourse.org/t/completely-remove-user-data-from-the-system/310629
**Category:** Self-hosting
**Tags:** rails-console
**Created:** [2024年六月5日 08:54 UTC](https://meta.discourse.org/t/completely-remove-user-data-from-the-system/310629 "2024-06-05T08:54:04Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![Crius](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/crius/32/317214_2.png) [@Crius](https://meta.discourse.org/u/Crius)
#### Post date: [2024年六月5日 08:54 UTC](https://meta.discourse.org/t/completely-remove-user-data-from-the-system/310629/1 "2024-06-05T08:54:04Z")

</div>

嘿，我们可能需要一种完全抹去数据库中用户所有痕迹的方法。我不会详述，因为这很敏感，而且由于 GDPR，我们可能需要证明我们的系统中不保留任何用户信息的副本。

我认为我识别出了一些部分：

- 当前的匿名化流程对用户配置文件来说是可以的
- 将其所有回复编辑为简单的“用户请求删除”也可以接受，前提是删除编辑历史记录。

所以，我真正认为我需要的是一个查询（或一个 Ruby 函数？），它可以将用户的所有消息替换为“用户请求删除”，并清除其消息的所有编辑历史记录。

有谁拥有足够的数据库/Discourse 代码经验可以提供帮助吗？

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2024年六月5日 15:35 UTC](https://meta.discourse.org/t/completely-remove-user-data-from-the-system/310629/3 "2024-06-05T15:35:41Z")

</div>

你能把它们都删掉吗？

```plaintext
u=User.find_by_username('byebye')
posts=Post.where(user_id: u.id)

```

然后对所有帖子调用 PostDestroyer。（我不记得具体怎么做了。）

如果你真的想用“已删除……”替换他们的帖子，那么你会这样做：

```plaintext
posts.update_all(raw: "deleted by user request")

```

然后你需要清除 PostRevision 模型中的内容，也许是：

```plaintext
posts.each do |p|
  bad=PostRevision.where(post_id: p.id)
  bad.destroy_all
end

```

你想手动做几个作为测试，或者在暂存站点上进行，如果你非常小心的话。

---

<div class="post-metadata">

### Author: ![Crius](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/crius/32/317214_2.png) [@Crius](https://meta.discourse.org/u/Crius)
#### Post date: [2024年六月5日 20:06 UTC](https://meta.discourse.org/t/completely-remove-user-data-from-the-system/310629/4 "2024-06-05T20:06:44Z")

</div>

我不知道，所以我才问 🙂

我会在未来几天在测试环境中尝试一下。谢谢你，Jay，你总是那么棒！❤

我宁愿编辑，因为我不想因为有人离开而导致帖子被毁，而其他人可能对该主题进行了有趣的讨论。

只有一个顾虑是当用户有大量回复时。我说的是成千上万的回复。

---

<div class="post-metadata">

### Author: ![Architect](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/architect/32/520575_2.png) [@Architect](https://meta.discourse.org/u/Architect)
#### Post date: [2024年六月5日 20:52 UTC](https://meta.discourse.org/t/completely-remove-user-data-from-the-system/310629/5 "2024-06-05T20:52:35Z")

</div>

> [@Crius](#):
>
> 我们可能需要证明我们的系统中不包含任何用户信息副本

如果您收到用户要求删除其所有数据的请求，这不一定包括他们所有的帖子/回复，因为您可能知道，对于《通用数据保护条例》(GDPR) 来说，匿名化可能就足够了，前提是这些帖子不包含高度个人信息。

这里有很多关于这方面的主题，法律因国家而异。

---

<div class="post-metadata">

### Author: ![Heliosurge](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/heliosurge/32/571810_2.png) [@Heliosurge](https://meta.discourse.org/u/Heliosurge)
#### Post date: [2024年六月5日 22:04 UTC](https://meta.discourse.org/t/completely-remove-user-data-from-the-system/310629/6 "2024-06-05T22:04:33Z")

</div>

确实，在第一个用户被匿名化后，只需将后续被匿名化的用户合并到第一个用户即可。

---

<div class="post-metadata">

### Author: ![Architect](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/architect/32/520575_2.png) [@Architect](https://meta.discourse.org/u/Architect)
#### Post date: [2024年六月5日 23:31 UTC](https://meta.discourse.org/t/completely-remove-user-data-from-the-system/310629/7 "2024-06-05T23:31:13Z")

</div>

> [@Heliosurge](#):
>
> simply merge future anonymized users

这实际上将使所有匿名用户像Discord等其他平台一样被视为“已删除用户”。

我不建议总是这样做，但这是保护帖子作者身份的一种选择，因为随机数将不再只属于一个作者。缺点是，如果用户不知道帖子是否来自同一作者或不同作者，那么跟踪主题对话可能会变得更加困难。

---

<div class="post-metadata">

### Author: ![Crius](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/crius/32/317214_2.png) [@Crius](https://meta.discourse.org/u/Crius)
#### Post date: [2024年六月18日 10:09 UTC](https://meta.discourse.org/t/completely-remove-user-data-from-the-system/310629/8 "2024-06-18T10:09:25Z")

</div>

这几乎是不可能的，特别是对于有很多回复的用户。

我注意到，当我尝试合并一个拥有数千条消息的用户时，合并用户功能经常会失败，即使只添加一条新消息（用例是：老用户回归但丢失了凭证，与我核实后一切正常，尝试将有几条回复的新用户与原来的老用户合并）。

---

<div class="post-metadata">

### Author: ![Heliosurge](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/heliosurge/32/571810_2.png) [@Heliosurge](https://meta.discourse.org/u/Heliosurge)
#### Post date: [2024年六月18日 13:09 UTC](https://meta.discourse.org/t/completely-remove-user-data-from-the-system/310629/9 "2024-06-18T13:09:34Z")

</div>

听起来你需要提交一个 bug 报告。
