删除用户账户
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
用户可以从 GitLab 实例中被删除,方式包括:
- 用户自己删除
- 管理员删除
删除用户会删除该用户命名空间下的所有项目。
删除自己的账户
- 在 GitLab.com 上,此功能可用。
- 在 GitLab Dedicated 上,此功能不可用。
- 在 GitLab Self-Managed 上,此功能的可用性由
delay_user_account_self_deletion应用设置控制,默认为禁用。使用 应用设置 API 为实例启用delay_user_account_self_deletion设置。
在 GitLab.com 上,从您删除自己的账户到账户被删除需要七天时间。在此期间:
-
该用户被屏蔽。
-
您无法使用相同的用户名创建新账户。
七天时间结束后,任何用户都可以使用之前使用过的用户名创建用户账户。因此,您不应假设在七天后能够使用该用户名创建新账户,因为它可能已被占用。
如果您先从账户中删除该电子邮件地址,可以使用相同的电子邮件地址创建新账户。
以下内容在一小时内被删除:
- 没有问题、评论、备注、合并请求或代码片段的账户。
- 付费命名空间下的账户。
作为用户,要删除自己的账户:
- 在左侧边栏,选择您的头像。
- 选择 编辑个人资料。
- 在左侧边栏,选择 账户。
- 选择 删除账户。
如果您无法删除自己的账户,请提交个人数据请求,要求从 GitLab 中移除您的账户和数据。
使用相同的电子邮件地址创建新账户
在 GitLab.com 上,在您删除自己的账户与账户被删除之间的时间段内,您无法使用相同的电子邮件地址或用户名创建新账户。
要使用相同的电子邮件地址创建新账户,在删除账户之前:
现在您可以使用与原始主电子邮件地址相同的电子邮件地址创建新账户。
删除用户和用户贡献
- Tier: Free, Premium, Ultimate
- Offering: GitLab Self-Managed, GitLab Dedicated
作为管理员,要删除用户账户:
- 在左侧边栏底部,选择 管理员。
- 选择 概览 > 用户。
- 选择一个用户。
- 在 账户 标签下,选择:
- 删除用户:仅删除用户但保留其相关记录。如果所选用户是任何组的唯一所有者,则不能使用此选项。
- 删除用户和贡献:删除用户及其相关记录。此选项还会删除用户是组直接所有者的所有组(以及这些组中的项目)。继承的所有权不适用。
使用 删除用户和贡献 选项可能会导致删除超出预期的数据。有关更多详细信息,请参阅相关记录。
相关记录
删除用户时,您可以选择:
- 仅删除用户,但将贡献移动到系统范围的"幽灵用户":
@ghost作为所有已删除用户贡献的容器。- 用户的个人资料和个人项目被删除,而不是移动到幽灵用户。
- 删除用户及其贡献,包括:
在这两种情况下,提交都保留用户信息,因此 Git 仓库 中的数据完整性得以保持。
删除的替代方案是屏蔽用户。
当用户从滥用报告或垃圾日志中被删除时,这些相关记录总是被移除。
删除相关记录的选项也可以在 API 和 管理员 区域中请求。
删除 GitLab Self-Managed 实例上的 root 账户
- Offering: GitLab Self-Managed
root 账户是系统上权限最高的账户。删除 root 账户可能会导致失去对实例 管理员区域 的访问权限,如果实例上没有其他管理员可用。
您可以使用 UI 或 GitLab Rails 控制台 删除 root 账户。
在删除 root 账户之前:
- 如果您为 root 账户创建了任何项目或个人访问令牌并在工作流程中使用它们,请将必要的权限或所有权从 root 账户转移到新管理员。
- 备份您的 GitLab Self-Managed 实例。
- 考虑停用或屏蔽 root 账户。
使用 UI
先决条件:
- 您必须是 GitLab Self-Managed 实例的管理员。
要删除 root 账户:
- 在 管理员 区域,创建一个具有管理员访问权限的新用户。这确保您在删除 root 账户相关风险的同时保持对实例的管理员访问权限。
- 删除 root 账户。
使用 GitLab Rails 控制台
如果未正确运行或在正确条件下运行,更改数据的命令可能会造成损害。始终先在测试环境中运行命令,并准备好备份实例进行恢复。
先决条件:
- 您必须能够访问 GitLab Rails 控制台。
要在 Rails 控制台中删除 root 账户:
-
给另一个现有用户管理员权限:
user = User.find(username: 'Username') # 或使用 User.find_by(email: '[email protected]') 通过邮箱查找 user.admin = true user.save!这确保您在删除 root 账户相关风险的同时保持对实例的管理员访问权限。
-
要删除 root 账户,执行以下任一操作:
-
屏蔽 root 账户:
# 这需要是当前管理员用户 current_user = User.find(username: 'Username') # 这是我们想要屏蔽的 root 用户 user = User.find(username: 'Username') ::Users::BlockService.new(current_user).execute(user) -
停用 root 用户:
# 这需要是当前管理员用户 current_user = User.find(username: 'Username') # 这是我们想要停用的 root 用户 user = User.find(username: 'Username') ::Users::DeactivateService.new(current_user, skip_authorization: true).execute(user)
-
故障排除
删除用户导致 PostgreSQL null 值错误
存在一个已知问题,导致用户未被删除,并生成以下错误:
ERROR: null value in column "user_id" violates not-null constraint该错误可以在 PostgreSQL 日志 和 管理员 区域的后台任务视图的 重试 部分中找到。
如果被删除的用户使用了迭代功能,例如将问题添加到迭代中,您必须使用问题中记录的解决方法来删除用户。