删除用户账户
可以通过以下任一方式从实例中删除用户:
- 用户自己。
- 管理员。
删除用户会删除该用户命名空间中的所有项目。
删除您自己的账户
- 删除用自己的帐号和删除用户记录之间的延迟引入于 GitLab 16.0,使用名为
delay_delete_own_user
的功能标志。默认启用在 JihuLab.com 上。
在私有化部署极狐GitLab 上,默认情况下,此功能不可用。要使它可用,管理员可以启用名为
delay_delete_own_user
的功能标志(../../administration/feature_flags.md)在 JihuLab.com 上,此功能可用。在 JihuLab.com 上,从您删除自己的帐户开始到自己的帐号被删除需要七天时间。在这期间:
- 用户会被阻塞。
-
您无法使用相同的用户名创建新帐户。
七天时间一过,任何用户都可以使用该以前使用的用户名创建新帐户。因此,您不应该假设在七天后可以创建一个新帐户,因为它可能已被占用。如果您想从您的帐号中移除邮件地址,您可以创建一个具有相同邮件地址的新帐号。
下面的方式会在一小时内删除帐号:
- 没有议题、评论、注释、合并请求或代码片段的帐号。
- 在付费命名空间下的帐号。
作为用户,要删除您自己的帐号:
- 在左侧导航栏,选择头像。
- 选择 编辑个人资料。
- 在左侧导航栏,选择 帐号。
- 选择 删除帐号。
创建具有相同邮件地址的新帐号
在 JihuLab.com 上,在您删除自己的帐户开始到自己的帐号被删除期间,您无法使用相同的用户名或邮件地址创建新帐户。
要使用相同的邮件地址创建新帐号,在您删除您的帐号前:
- 添加一个次要邮件地址到您的帐户。
- 更改您的主要邮件地址为此新次要邮件地址。
- 从您的帐户中删除现在是次要邮件地址。
- 删除您自己的帐户。
您现在可以使用相同的邮件地址创建新帐号。
删除用户和用户贡献
作为管理员,要删除用户账户:
- 在左侧边栏中,选择 搜索或转到。
- 选择 管理中心。
- 在左侧边栏中,选择 概览 > 用户。
- 选择用户。
- 在 账户 选项卡下,选择:
- 删除用户:仅删除用户但保留其关联记录。如果所选用户是任何群组的唯一所有者,则不能使用此选项。
- 删除用户和贡献:删除用户及其相关记录。此选项还会删除用户是群组的唯一直接所有者的所有群组(以及这些群组中的项目)。继承的所有权不适用。
使用 删除用户和贡献 选项可能会导致删除比预期更多的数据。有关其他详细信息,请参阅关联记录。
关联记录
- 只删除用户,并非所有关联的记录都会随用户一起删除。这些记录不会被删除,而是被移动到用户名为 Ghost User 的系统范围用户。Ghost 用户的目的是充当此类记录的容器。已删除用户所做的任何提交仍会显示原始用户的用户名。
- 删除用户及其贡献,包括:
- 滥用报告
- Emoji 回复
- 史诗
- 用户是唯一具有所有者角色的用户的群组。
- 议题
- 合并请求
- 备注和评论
- 个人访问令牌
- 代码片段
- Notes and comments on other users’ commits, epics, issues, merge requests and snippets.
在两种情况下,提交保留用户信息,因此在 Git 仓库中保留数据完整性。
另外一个删除用户的方案就是阻塞一个用户。
当从滥用报告或垃圾邮件日志中删除用户时,这些关联记录始终被删除。
在私有化部署实例上删除 root 帐号 (SELF-MANAGED)
root 帐号是系统的最高权限帐号。如果没有其他管理员可用,删除 root 帐号可能会导致丢失 管理员 区域 的访问权限。
您可以通过 UI 或极狐GitLab Rails 控制台 删除 root 帐号。
在您删除 root 帐号前:
- 如果您已经为 root 帐号创建了任何项目或个人访问令牌,并在您的工作流中使用它们,请将任何必要的权限或所有权从 root 帐号转移给新的管理员。
- 备份您的私有化部署实例。
- 考虑禁用或阻塞 root 帐号。
使用 UI
先决条件:
- 您必须是实例的管理员。
要删除 root 帐号:
- 在 管理员 区域中,创建一个具有管理员访问权限的新用户。
- 删除 root 帐号
使用极狐GitLab Rails 控制台
修改数据的命令可能会导致损坏,除非正确运行或在正确的条件下运行。始终在测试环境中运行命令,并保留备份实例以进行恢复。
先决条件:
- 您必须能够访问极狐GitLab Rails 控制台。
要删除 root 帐号,在 Rails 控制台中:
-
授予其他既有用户管理员访问权限:
user = User.find(username: 'Username') # or use User.find_by(email: 'email@example.com') to find by email user.admin = true user.save!
这可确保你保留对该实例的管理员访问权限,同时降低因删除根账户而带来的相关风险。
-
要删除根帐号,请执行以下任一操作:
-
阻塞帐号:
# This needs to be a current admin user current_user = User.find(username: 'Username') # This is the root user we want to block user = User.find(username: 'Username') ::Users::BlockService.new(current_user).execute(user)
-
停用 root 用户:
# This needs to be a current admin user current_user = User.find(username: 'Username') # This is the root user we want to deactivate 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 日志和后台作业视图的 重试 部分中找到错误。