删除用户账户

可以通过以下任一方式从实例中删除用户:

  • 用户自己。
  • 管理员。
note 删除用户会删除该用户命名空间中的所有项目。

删除您自己的账户

  • 删除用自己的帐号和删除用户记录之间的延迟引入于 GitLab 16.0,使用名为 delay_delete_own_user 的功能标志。默认启用在 JihuLab.com 上。
在私有化部署极狐GitLab 上,默认情况下,此功能不可用。要使它可用,管理员可以启用名为 delay_delete_own_user 的功能标志(../../administration/feature_flags.md)在 JihuLab.com 上,此功能可用。

在 JihuLab.com 上,从您删除自己的帐户开始到自己的帐号被删除需要七天时间。在这期间:

  • 用户会被阻塞
  • 您无法使用相同的用户名创建新帐户。

    note 七天时间一过,任何用户都可以使用该以前使用的用户名创建新帐户。因此,您不应该假设在七天后可以创建一个新帐户,因为它可能已被占用。

    如果您想从您的帐号中移除邮件地址,您可以创建一个具有相同邮件地址的新帐号

下面的方式会在一小时内删除帐号:

  • 没有议题、评论、注释、合并请求或代码片段的帐号。
  • 在付费命名空间下的帐号。

作为用户,要删除您自己的帐号:

  1. 在左侧导航栏,选择头像。
  2. 选择 编辑个人资料
  3. 在左侧导航栏,选择 帐号
  4. 选择 删除帐号

创建具有相同邮件地址的新帐号

在 JihuLab.com 上,在您删除自己的帐户开始到自己的帐号被删除期间,您无法使用相同的用户名或邮件地址创建新帐户。

要使用相同的邮件地址创建新帐号,在您删除您的帐号前:

  1. 添加一个次要邮件地址到您的帐户。
  2. 更改您的主要邮件地址为此新次要邮件地址。
  3. 从您的帐户中删除现在是次要邮件地址
  4. 删除您自己的帐户

您现在可以使用相同的邮件地址创建新帐号

删除用户和用户贡献

作为管理员,要删除用户账户:

  1. 在左侧边栏中,选择 搜索或转到
  2. 选择 管理中心
  3. 在左侧边栏中,选择 概览 > 用户
  4. 选择用户。
  5. 账户 选项卡下,选择:
    • 删除用户:仅删除用户但保留其关联记录。如果所选用户是任何群组的唯一所有者,则不能使用此选项。
    • 删除用户和贡献:删除用户及其相关记录。此选项还会删除用户是群组的唯一直接所有者的所有群组(以及这些群组中的项目)。继承的所有权不适用。
caution 使用 删除用户和贡献 选项可能会导致删除比预期更多的数据。有关其他详细信息,请参阅关联记录

关联记录

  • 只删除用户,并非所有关联的记录都会随用户一起删除。这些记录不会被删除,而是被移动到用户名为 Ghost User 的系统范围用户。Ghost 用户的目的是充当此类记录的容器。已删除用户所做的任何提交仍会显示原始用户的用户名。
  • 删除用户及其贡献,包括:

在两种情况下,提交保留用户信息,因此在 Git 仓库中保留数据完整性。

另外一个删除用户的方案就是阻塞一个用户

当从滥用报告或垃圾邮件日志中删除用户时,这些关联记录始终被删除。

可以通过API管理员 区域请求删除关联记录选项。

caution 与用户 ID 相关联的用户审批。其他用户贡献没有关联的用户 ID。当您删除用户和他们的贡献时,它们被移为“访客用户”,审核贡献会引用一个丢失或无效的用户 ID。相比于删除用户,可以考虑阻塞禁止停用他们。

在私有化部署实例上删除 root 帐号 (SELF-MANAGED)

caution root 帐号是系统的最高权限帐号。如果没有其他管理员可用,删除 root 帐号可能会导致丢失 管理员 区域 的访问权限。

您可以通过 UI 或极狐GitLab Rails 控制台 删除 root 帐号。

在您删除 root 帐号前:

  1. 如果您已经为 root 帐号创建了任何项目个人访问令牌,并在您的工作流中使用它们,请将任何必要的权限或所有权从 root 帐号转移给新的管理员。
  2. 备份您的私有化部署实例
  3. 考虑禁用阻塞 root 帐号。

使用 UI

先决条件:

  • 您必须是实例的管理员。

要删除 root 帐号:

  1. 管理员 区域中,创建一个具有管理员访问权限的新用户
  2. 删除 root 帐号

使用极狐GitLab Rails 控制台

caution 修改数据的命令可能会导致损坏,除非正确运行或在正确的条件下运行。始终在测试环境中运行命令,并保留备份实例以进行恢复。

先决条件:

  • 您必须能够访问极狐GitLab Rails 控制台。

要删除 root 帐号,在 Rails 控制台中:

  1. 授予其他既有用户管理员访问权限:

    user = User.find(username: 'Username') # or use User.find_by(email: 'email@example.com') to find by email
    user.admin = true
    user.save!
    

    这可确保你保留对该实例的管理员访问权限,同时降低因删除根账户而带来的相关风险。

  2. 要删除根帐号,请执行以下任一操作:

    • 阻塞帐号:

      # 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 日志后台作业视图重试 部分中找到错误。