From 79cc6df0fd346dc61c0605c800dfbd485d42fcbe Mon Sep 17 00:00:00 2001 From: Matt Gibson Date: Fri, 5 Feb 2021 12:37:55 -0600 Subject: [PATCH] Delete sends belonging to user on user delete (#1116) * Delete sends belonging to user on user delete * Update User_DeleteById.sql * Clean up bad autoformats Co-authored-by: Addison Beck Co-authored-by: Kyle Spearrin Co-authored-by: Addison Beck --- .../dbo/Stored Procedures/User_DeleteById.sql | 9 +- ...1-28_00_AddDeleteSendsToUserDeleteById.sql | 106 ++++++++++++++++++ 2 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 util/Migrator/DbScripts/2021-01-28_00_AddDeleteSendsToUserDeleteById.sql diff --git a/src/Sql/dbo/Stored Procedures/User_DeleteById.sql b/src/Sql/dbo/Stored Procedures/User_DeleteById.sql index 534ca29346..a39c5e9d20 100644 --- a/src/Sql/dbo/Stored Procedures/User_DeleteById.sql +++ b/src/Sql/dbo/Stored Procedures/User_DeleteById.sql @@ -87,6 +87,13 @@ BEGIN [GrantorId] = @Id OR [GranteeId] = @Id + + -- Delete Sends + DELETE + FROM + [dbo].[Send] + WHERE + [UserId] = @Id -- Finally, delete the user DELETE @@ -96,4 +103,4 @@ BEGIN [Id] = @Id COMMIT TRANSACTION User_DeleteById -END \ No newline at end of file +END diff --git a/util/Migrator/DbScripts/2021-01-28_00_AddDeleteSendsToUserDeleteById.sql b/util/Migrator/DbScripts/2021-01-28_00_AddDeleteSendsToUserDeleteById.sql new file mode 100644 index 0000000000..9c1dedce99 --- /dev/null +++ b/util/Migrator/DbScripts/2021-01-28_00_AddDeleteSendsToUserDeleteById.sql @@ -0,0 +1,106 @@ +IF OBJECT_ID('[dbo].[User_DeleteById]') IS NOT NULL +BEGIN + DROP PROCEDURE [dbo].[User_DeleteById] +END +GO + +CREATE PROCEDURE [dbo].[User_DeleteById] + @Id UNIQUEIDENTIFIER +WITH + RECOMPILE +AS +BEGIN + SET NOCOUNT ON + +DECLARE @BatchSize INT = 100 +-- Delete ciphers +WHILE @BatchSize > 0 +BEGIN + BEGIN TRANSACTION User_DeleteById_Ciphers + + DELETE TOP(@BatchSize) + FROM + [dbo].[Cipher] + WHERE + [UserId] = @Id + + SET @BatchSize = @@ROWCOUNT + + COMMIT TRANSACTION User_DeleteById_Ciphers +END + +BEGIN TRANSACTION User_DeleteById + +-- Delete folders +DELETE +FROM + [dbo].[Folder] +WHERE + [UserId] = @Id + +-- Delete devices +DELETE +FROM + [dbo].[Device] +WHERE + [UserId] = @Id + +-- Delete collection users +DELETE + CU +FROM + [dbo].[CollectionUser] CU +INNER JOIN + [dbo].[OrganizationUser] OU ON OU.[Id] = CU.[OrganizationUserId] +WHERE + OU.[UserId] = @Id + +-- Delete group users +DELETE + GU +FROM + [dbo].[GroupUser] GU +INNER JOIN + [dbo].[OrganizationUser] OU ON OU.[Id] = GU.[OrganizationUserId] +WHERE + OU.[UserId] = @Id + +-- Delete organization users +DELETE +FROM + [dbo].[OrganizationUser] +WHERE + [UserId] = @Id +-- Delete U2F logins +DELETE +FROM + [dbo].[U2f] +WHERE + [UserId] = @Id +-- Delete SSO Users +DELETE +FROM + [dbo].[SsoUser] +WHERE + [UserId] = @Id +-- Delete Emergency Accesses +DELETE +FROM + [dbo].[EmergencyAccess] +WHERE + [GrantorId] = @Id + OR [GranteeId] = @Id +-- Delete Sends +DELETE +FROM + [dbo].[Send] +WHERE + [UserId] = @Id +-- Finally, delete the user +DELETE +FROM + [dbo].[User] +WHERE + [Id] = @Id +COMMIT TRANSACTION User_DeleteById +END