mirror of
https://github.com/bitwarden/server.git
synced 2024-12-28 17:57:37 +01:00
184 lines
3.9 KiB
MySQL
184 lines
3.9 KiB
MySQL
|
-- Create sproc to bump the revision date of a batch of users
|
||
|
IF OBJECT_ID('[dbo].[User_BumpAccountRevisionDateByOrganizationUserIds]') IS NOT NULL
|
||
|
BEGIN
|
||
|
DROP PROCEDURE [dbo].[User_BumpAccountRevisionDateByOrganizationUserIds]
|
||
|
END
|
||
|
GO
|
||
|
|
||
|
CREATE PROCEDURE [dbo].[User_BumpAccountRevisionDateByOrganizationUserIds]
|
||
|
@OrganizationUserIds [dbo].[GuidIdArray] READONLY
|
||
|
AS
|
||
|
BEGIN
|
||
|
SET NOCOUNT ON
|
||
|
|
||
|
SELECT
|
||
|
OU.UserId
|
||
|
INTO
|
||
|
#UserIds
|
||
|
FROM
|
||
|
[dbo].[OrganizationUser] OU
|
||
|
INNER JOIN
|
||
|
@OrganizationUserIds OUIds ON OUIds.Id = OU.Id
|
||
|
WHERE
|
||
|
OU.[Status] = 2 -- Confirmed
|
||
|
|
||
|
UPDATE
|
||
|
U
|
||
|
SET
|
||
|
U.[AccountRevisionDate] = GETUTCDATE()
|
||
|
FROM
|
||
|
[dbo].[User] U
|
||
|
INNER JOIN
|
||
|
#UserIds ON U.[Id] = #UserIds.[UserId]
|
||
|
END
|
||
|
GO
|
||
|
|
||
|
-- Create TwoGuidIdArray Type
|
||
|
IF NOT EXISTS (
|
||
|
SELECT
|
||
|
*
|
||
|
FROM
|
||
|
sys.types
|
||
|
WHERE
|
||
|
[Name] = 'TwoGuidIdArray' AND
|
||
|
is_user_defined = 1
|
||
|
)
|
||
|
CREATE TYPE [dbo].[TwoGuidIdArray] AS TABLE (
|
||
|
[Id1] UNIQUEIDENTIFIER NOT NULL,
|
||
|
[Id2] UNIQUEIDENTIFIER NOT NULL);
|
||
|
GO
|
||
|
|
||
|
-- Create sproc to delete batch of users
|
||
|
-- Parameter Ids are UserId, OrganizationId
|
||
|
IF OBJECT_ID('[dbo].[SsoUser_DeleteMany]') IS NOT NULL
|
||
|
BEGIN
|
||
|
DROP PROCEDURE [dbo].[SsoUser_DeleteMany]
|
||
|
END
|
||
|
GO
|
||
|
|
||
|
CREATE PROCEDURE [dbo].[SsoUser_DeleteMany]
|
||
|
@UserAndOrganizationIds [dbo].[TwoGuidIdArray] READONLY
|
||
|
AS
|
||
|
BEGIN
|
||
|
SET NOCOUNT ON
|
||
|
|
||
|
SELECT
|
||
|
Id
|
||
|
INTO
|
||
|
#SSOIds
|
||
|
FROM
|
||
|
[dbo].[SsoUser] SU
|
||
|
INNER JOIN
|
||
|
@UserAndOrganizationIds UOI ON UOI.Id1 = SU.UserId AND UOI.Id2 = SU.OrganizationId
|
||
|
|
||
|
DECLARE @BatchSize INT = 100
|
||
|
|
||
|
-- Delete SSO Users
|
||
|
WHILE @BatchSize > 0
|
||
|
BEGIN
|
||
|
BEGIN TRANSACTION SsoUser_DeleteMany_SsoUsers
|
||
|
|
||
|
DELETE TOP(@BatchSize) SU
|
||
|
FROM
|
||
|
[dbo].[SsoUser] SU
|
||
|
INNER JOIN
|
||
|
#SSOIDs ON #SSOIds.Id = SU.Id
|
||
|
|
||
|
SET @BatchSize = @@ROWCOUNT
|
||
|
|
||
|
COMMIT TRANSACTION SsoUser_DeleteMany_SsoUsers
|
||
|
END
|
||
|
END
|
||
|
GO
|
||
|
|
||
|
-- Create OrganizationUser Delete many by Id procedure
|
||
|
IF OBJECT_ID('[dbo].[OrganizationUser_DeleteByIds]') IS NOT NULL
|
||
|
BEGIN
|
||
|
DROP PROCEDURE [dbo].[OrganizationUser_DeleteByIds]
|
||
|
END
|
||
|
GO
|
||
|
|
||
|
CREATE PROCEDURE [dbo].[OrganizationUser_DeleteByIds]
|
||
|
@Ids [dbo].[GuidIdArray] READONLY
|
||
|
AS
|
||
|
BEGIN
|
||
|
SET NOCOUNT ON
|
||
|
|
||
|
EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationUserIds] @Ids
|
||
|
|
||
|
DECLARE @UserAndOrganizationIds [dbo].[TwoGuidIdArray]
|
||
|
|
||
|
INSERT INTO @UserAndOrganizationIds
|
||
|
(Id1, Id2)
|
||
|
SELECT
|
||
|
UserId,
|
||
|
OrganizationId
|
||
|
FROM
|
||
|
[dbo].[OrganizationUser] OU
|
||
|
INNER JOIN
|
||
|
@Ids OUIds ON OUIds.Id = OU.Id
|
||
|
WHERE
|
||
|
UserId IS NOT NULL AND
|
||
|
OrganizationId IS NOT NULL
|
||
|
|
||
|
BEGIN
|
||
|
EXEC [dbo].[SsoUser_DeleteMany] @UserAndOrganizationIds
|
||
|
END
|
||
|
|
||
|
DECLARE @BatchSize INT = 100
|
||
|
|
||
|
-- Delete CollectionUsers
|
||
|
WHILE @BatchSize > 0
|
||
|
BEGIN
|
||
|
BEGIN TRANSACTION CollectionUser_DeleteMany_CUs
|
||
|
|
||
|
DELETE TOP(@BatchSize) CU
|
||
|
FROM
|
||
|
[dbo].[CollectionUser] CU
|
||
|
INNER JOIN
|
||
|
@Ids I ON I.Id = CU.OrganizationUserId
|
||
|
|
||
|
SET @BatchSize = @@ROWCOUNT
|
||
|
|
||
|
COMMIT TRANSACTION CollectionUser_DeleteMany_CUs
|
||
|
END
|
||
|
|
||
|
SET @BatchSize = 100;
|
||
|
|
||
|
-- Delete GroupUsers
|
||
|
WHILE @BatchSize > 0
|
||
|
BEGIN
|
||
|
BEGIN TRANSACTION GroupUser_DeleteMany_GroupUsers
|
||
|
|
||
|
DELETE TOP(@BatchSize) GU
|
||
|
FROM
|
||
|
[dbo].[GroupUser] GU
|
||
|
INNER JOIN
|
||
|
@Ids I ON I.Id = GU.OrganizationUserId
|
||
|
|
||
|
SET @BatchSize = @@ROWCOUNT
|
||
|
|
||
|
COMMIT TRANSACTION GoupUser_DeleteMany_GroupUsers
|
||
|
END
|
||
|
|
||
|
|
||
|
SET @BatchSize = 100;
|
||
|
|
||
|
-- Delete OrganizationUsers
|
||
|
WHILE @BatchSize > 0
|
||
|
BEGIN
|
||
|
BEGIN TRANSACTION OrganizationUser_DeleteMany_OUs
|
||
|
|
||
|
DELETE TOP(@BatchSize) OU
|
||
|
FROM
|
||
|
[dbo].[OrganizationUser] OU
|
||
|
INNER JOIN
|
||
|
@Ids I ON I.Id = OU.Id
|
||
|
|
||
|
SET @BatchSize = @@ROWCOUNT
|
||
|
|
||
|
COMMIT TRANSACTION OrganizationUser_DeleteMany_OUs
|
||
|
END
|
||
|
END
|
||
|
GO
|