Deleting a user account
DETAILS: Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
Users can be deleted from a GitLab instance, either by:
- The user themselves.
- An administrator.
NOTE: Deleting a user deletes all projects in that user namespace.
Delete your own account
- Delay between a user deleting their own account and deletion of the user record introduced in GitLab 16.0 with a flag named
delay_delete_own_user
. Enabled by default on GitLab.com.
FLAG:
On self-managed GitLab, by default this feature is not available. To make it available, an administrator can enable the feature flag named delay_delete_own_user
. On GitLab.com, this feature is available. On GitLab Dedicated, this feature is not available.
On GitLab.com, it takes seven days from when you delete your own account to when your account is deleted. During this time:
- That user is blocked.
- You cannot create a new account with the same username. You can create a new account with the same email address if you remove that email address from your account first.
The following are deleted within an hour:
- Accounts with no issues, comments, notes, merge requests, or snippets.
- Accounts under paid namespaces.
As a user, to delete your own account:
- On the left sidebar, select your avatar.
- Select Edit profile.
- On the left sidebar, select Account.
- Select Delete account.
If you cannot delete your own account, submit a personal data request to ask for your account and data to be removed from GitLab.
Create a new account with the same email address
On GitLab.com, during the time between you deleting your own account and your account getting deleted, you cannot create a new account with the same email address or username.
To create a new account with the same email address, before you delete your account:
- Add a secondary email address to your account.
- Change your primary email to this new secondary email address.
- Remove the now-secondary email address from your account.
- Delete your own account.
You can now create a new account with the same email address as your original primary email address.
Delete users and user contributions
DETAILS: Tier: Free, Premium, Ultimate Offering: Self-managed, GitLab Dedicated
As an administrator, to delete a user account:
- On the left sidebar, at the bottom, select Admin.
- Select Overview > Users.
- Select a user.
- Under the Account tab, select:
- Delete user to delete only the user but maintain their associated records. You can't use this option if the selected user is the sole owner of any groups.
- Delete user and contributions to delete the user and their associated records. This option also removes all groups (and projects within these groups) where the user is the sole direct Owner of a group. Inherited ownership doesn't apply.
WARNING: Using the Delete user and contributions option may result in removing more data than intended. See associated records for additional details.
Associated records
When deleting users, you can either:
- Delete just the user, but move contributions to a system-wide "Ghost User":
- The
@ghost
acts as a container for all deleted users' contributions. - The user's profile and personal projects are deleted, instead of moved to the Ghost User.
- The
- Delete the user and their contributions, including:
- Abuse reports.
- Emoji reactions.
- Groups of which the user is the only user with the Owner role.
- Personal access tokens.
- Epics.
- Issues.
- Merge requests.
- Snippets.
- Notes and comments on other users' commits, epics, issues, merge requests and snippets.
In both cases, commits retain user information and therefore data integrity within a Git repository.
An alternative to deleting is blocking a user.
When a user is deleted from an abuse report or spam log, these associated records are always removed.
The deleting associated records option can be requested in the API as well as the Admin area.
WARNING: User approvals are associated with a user ID. Other user contributions do not have an associated user ID. When you delete a user and their contributions are moved to a "Ghost User", the approval contributions refer to a missing or invalid user ID. Instead of deleting users, consider blocking, banning, or deactivating them.
Delete the root account on a self-managed instance
DETAILS: Offering: Self-managed
WARNING: The root account is the most privileged account on the system. Deleting the root account might result in losing access to the instance Admin area if there is no other administrator available on the instance.
You can delete the root account using either the UI or the GitLab Rails console.
Before you delete the root account:
- If you have created any project or personal access tokens for the root account and use them in your workflow, transfer any necessary permissions or ownership from the root account to the new administrator.
- Back up your self-managed instance.
- Consider deactivating or blocking the root account instead.
Use the UI
Prerequisites:
- You must be an administrator for the self-managed instance.
To delete the root account:
- In the Admin area, create a new user with administrator access. This ensures that you maintain administrator access to the instance whilst mitigating the risks associated with deleting the root account.
- Delete the root account.
Use the GitLab Rails console
WARNING: Commands that change data can cause damage if not run correctly or under the right conditions. Always run commands in a test environment first and have a backup instance ready to restore.
Prerequisites:
- You must have access to the GitLab Rails console.
To delete the root account, in the Rails console:
-
Give another existing user administrator access:
user = User.find(username: 'Username') # or use User.find_by(email: 'email@example.com') to find by email user.admin = true user.save!
This ensures that you maintain administrator access to the instance whilst mitigating the risks associated with deleting the root account.
-
To delete the root account, do either of the following:
-
Block the root account:
# 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)
-
Deactivate the root user:
# 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)
-
Troubleshooting
Deleting a user results in a PostgreSQL null value error
There is a known issue that results in users not being deleted, and the following error generated:
ERROR: null value in column "user_id" violates not-null constraint
The error can be found in the PostgreSQL log and in the Retries section of the background jobs view in the Admin area.
If the user being deleted used the iterations feature, such as adding an issue to an iteration, you must use the workaround documented in the issue to delete the user.