mirror of
https://github.com/bitwarden/server.git
synced 2025-07-02 16:42:50 -05:00
[AC-1682] Removed MySql transaction from script because EF migration already wraps it under its own transaction
This commit is contained in:
@ -33,113 +33,107 @@
|
|||||||
`OU`.`Permissions` IS NOT NULL AND
|
`OU`.`Permissions` IS NOT NULL AND
|
||||||
JSON_VALID(`OU`.`Permissions`) AND JSON_VALUE(`OU`.`Permissions`, '$.editAssignedCollections') = 'true'));
|
JSON_VALID(`OU`.`Permissions`) AND JSON_VALUE(`OU`.`Permissions`, '$.editAssignedCollections') = 'true'));
|
||||||
|
|
||||||
-- Start transaction
|
-- Step 1
|
||||||
START TRANSACTION;
|
-- Update existing rows in `CollectionGroups`
|
||||||
-- Step 1
|
UPDATE `CollectionGroups` `CG`
|
||||||
-- Update existing rows in `CollectionGroups`
|
INNER JOIN `Collection` `C` ON `CG`.`CollectionId` = `C`.`Id`
|
||||||
UPDATE `CollectionGroups` `CG`
|
INNER JOIN `TempGroupsAccessAll` `TG` ON `CG`.`GroupId` = `TG`.`GroupId`
|
||||||
INNER JOIN `Collection` `C` ON `CG`.`CollectionId` = `C`.`Id`
|
SET `CG`.`ReadOnly` = 0,
|
||||||
INNER JOIN `TempGroupsAccessAll` `TG` ON `CG`.`GroupId` = `TG`.`GroupId`
|
`CG`.`HidePasswords` = 0,
|
||||||
SET `CG`.`ReadOnly` = 0,
|
`CG`.`Manage` = 0
|
||||||
`CG`.`HidePasswords` = 0,
|
WHERE `C`.`OrganizationId` = `TG`.`OrganizationId`;
|
||||||
`CG`.`Manage` = 0
|
|
||||||
WHERE `C`.`OrganizationId` = `TG`.`OrganizationId`;
|
|
||||||
|
|
||||||
-- Insert new rows into `CollectionGroups`
|
-- Insert new rows into `CollectionGroups`
|
||||||
INSERT INTO `CollectionGroups` (`CollectionId`, `GroupId`, `ReadOnly`, `HidePasswords`, `Manage`)
|
INSERT INTO `CollectionGroups` (`CollectionId`, `GroupId`, `ReadOnly`, `HidePasswords`, `Manage`)
|
||||||
SELECT `C`.`Id`, `TG`.`GroupId`, 0, 0, 0
|
SELECT `C`.`Id`, `TG`.`GroupId`, 0, 0, 0
|
||||||
FROM `Collection` `C`
|
FROM `Collection` `C`
|
||||||
INNER JOIN `TempGroupsAccessAll` `TG` ON `C`.`OrganizationId` = `TG`.`OrganizationId`
|
INNER JOIN `TempGroupsAccessAll` `TG` ON `C`.`OrganizationId` = `TG`.`OrganizationId`
|
||||||
LEFT JOIN `CollectionGroups` `CG` ON `CG`.`CollectionId` = `C`.`Id` AND `CG`.`GroupId` = `TG`.`GroupId`
|
LEFT JOIN `CollectionGroups` `CG` ON `CG`.`CollectionId` = `C`.`Id` AND `CG`.`GroupId` = `TG`.`GroupId`
|
||||||
WHERE `CG`.`CollectionId` IS NULL;
|
WHERE `CG`.`CollectionId` IS NULL;
|
||||||
|
|
||||||
-- Update `Group` to clear `AccessAll` flag and update `RevisionDate`
|
-- Update `Group` to clear `AccessAll` flag and update `RevisionDate`
|
||||||
UPDATE `Group` `G`
|
UPDATE `Group` `G`
|
||||||
SET `AccessAll` = 0, `RevisionDate` = UTC_TIMESTAMP()
|
SET `AccessAll` = 0, `RevisionDate` = UTC_TIMESTAMP()
|
||||||
WHERE `G`.`Id` IN (SELECT `GroupId` FROM `TempGroupsAccessAll`);
|
WHERE `G`.`Id` IN (SELECT `GroupId` FROM `TempGroupsAccessAll`);
|
||||||
|
|
||||||
-- Step 2
|
-- Step 2
|
||||||
-- Update existing rows in `CollectionUsers`
|
-- Update existing rows in `CollectionUsers`
|
||||||
UPDATE `CollectionUsers` `target`
|
UPDATE `CollectionUsers` `target`
|
||||||
INNER JOIN `Collection` `C` ON `target`.`CollectionId` = `C`.`Id`
|
INNER JOIN `Collection` `C` ON `target`.`CollectionId` = `C`.`Id`
|
||||||
INNER JOIN `TempUsersAccessAll` `TU`
|
INNER JOIN `TempUsersAccessAll` `TU`
|
||||||
ON `C`.`OrganizationId` = `TU`.`OrganizationId` AND `target`.`OrganizationUserId` = `TU`.`OrganizationUserId`
|
ON `C`.`OrganizationId` = `TU`.`OrganizationId` AND `target`.`OrganizationUserId` = `TU`.`OrganizationUserId`
|
||||||
SET `target`.`ReadOnly` = 0,
|
SET `target`.`ReadOnly` = 0,
|
||||||
`target`.`HidePasswords` = 0,
|
`target`.`HidePasswords` = 0,
|
||||||
`target`.`Manage` = 0;
|
`target`.`Manage` = 0;
|
||||||
|
|
||||||
-- Insert new rows into `CollectionUsers`
|
-- Insert new rows into `CollectionUsers`
|
||||||
INSERT INTO `CollectionUsers` (`CollectionId`, `OrganizationUserId`, `ReadOnly`, `HidePasswords`, `Manage`)
|
INSERT INTO `CollectionUsers` (`CollectionId`, `OrganizationUserId`, `ReadOnly`, `HidePasswords`, `Manage`)
|
||||||
SELECT `C`.`Id`, `TU`.`OrganizationUserId`, 0, 0, 0
|
SELECT `C`.`Id`, `TU`.`OrganizationUserId`, 0, 0, 0
|
||||||
FROM `Collection` `C`
|
FROM `Collection` `C`
|
||||||
INNER JOIN `TempUsersAccessAll` `TU` ON `C`.`OrganizationId` = `TU`.`OrganizationId`
|
INNER JOIN `TempUsersAccessAll` `TU` ON `C`.`OrganizationId` = `TU`.`OrganizationId`
|
||||||
LEFT JOIN `CollectionUsers` `target`
|
LEFT JOIN `CollectionUsers` `target`
|
||||||
ON `target`.`CollectionId` = `C`.`Id` AND `target`.`OrganizationUserId` = `TU`.`OrganizationUserId`
|
ON `target`.`CollectionId` = `C`.`Id` AND `target`.`OrganizationUserId` = `TU`.`OrganizationUserId`
|
||||||
WHERE `target`.`CollectionId` IS NULL;
|
WHERE `target`.`CollectionId` IS NULL;
|
||||||
|
|
||||||
-- Update `OrganizationUser` to clear `AccessAll` flag
|
-- Update `OrganizationUser` to clear `AccessAll` flag
|
||||||
UPDATE `OrganizationUser` `OU`
|
UPDATE `OrganizationUser` `OU`
|
||||||
SET `AccessAll` = 0, `RevisionDate` = UTC_TIMESTAMP()
|
SET `AccessAll` = 0, `RevisionDate` = UTC_TIMESTAMP()
|
||||||
WHERE `OU`.`Id` IN (SELECT `OrganizationUserId` FROM `TempUsersAccessAll`);
|
WHERE `OU`.`Id` IN (SELECT `OrganizationUserId` FROM `TempUsersAccessAll`);
|
||||||
|
|
||||||
-- Step 3
|
-- Step 3
|
||||||
-- Update `CollectionUsers` with `Manage` = 1 using the temporary table
|
-- Update `CollectionUsers` with `Manage` = 1 using the temporary table
|
||||||
UPDATE `CollectionUsers` `CU`
|
UPDATE `CollectionUsers` `CU`
|
||||||
INNER JOIN `TempUserManagers` `TUM` ON `CU`.`OrganizationUserId` = `TUM`.`OrganizationUserId`
|
INNER JOIN `TempUserManagers` `TUM` ON `CU`.`OrganizationUserId` = `TUM`.`OrganizationUserId`
|
||||||
SET `CU`.`ReadOnly` = 0,
|
SET `CU`.`ReadOnly` = 0,
|
||||||
`CU`.`HidePasswords` = 0,
|
`CU`.`HidePasswords` = 0,
|
||||||
`CU`.`Manage` = 1;
|
`CU`.`Manage` = 1;
|
||||||
|
|
||||||
-- Insert rows to `CollectionUsers` with `Manage` = 1 using the temporary table
|
-- Insert rows to `CollectionUsers` with `Manage` = 1 using the temporary table
|
||||||
-- This is for orgUsers who are Managers / EditAssignedCollections but have access via a group
|
-- This is for orgUsers who are Managers / EditAssignedCollections but have access via a group
|
||||||
-- We cannot give the whole group Manage permissions so we have to give them a direct assignment
|
-- We cannot give the whole group Manage permissions so we have to give them a direct assignment
|
||||||
INSERT INTO `CollectionUsers` (`CollectionId`, `OrganizationUserId`, `ReadOnly`, `HidePasswords`, `Manage`)
|
INSERT INTO `CollectionUsers` (`CollectionId`, `OrganizationUserId`, `ReadOnly`, `HidePasswords`, `Manage`)
|
||||||
SELECT DISTINCT `CG`.`CollectionId`, `TUM`.`OrganizationUserId`, 0, 0, 1
|
SELECT DISTINCT `CG`.`CollectionId`, `TUM`.`OrganizationUserId`, 0, 0, 1
|
||||||
FROM `CollectionGroups` `CG`
|
FROM `CollectionGroups` `CG`
|
||||||
INNER JOIN `GroupUser` `GU` ON `CG`.`GroupId` = `GU`.`GroupId`
|
INNER JOIN `GroupUser` `GU` ON `CG`.`GroupId` = `GU`.`GroupId`
|
||||||
INNER JOIN `TempUserManagers` `TUM` ON `GU`.`OrganizationUserId` = `TUM`.`OrganizationUserId`
|
INNER JOIN `TempUserManagers` `TUM` ON `GU`.`OrganizationUserId` = `TUM`.`OrganizationUserId`
|
||||||
WHERE NOT EXISTS (
|
WHERE NOT EXISTS (
|
||||||
SELECT 1 FROM `CollectionUsers` `CU`
|
SELECT 1 FROM `CollectionUsers` `CU`
|
||||||
WHERE `CU`.`CollectionId` = `CG`.`CollectionId` AND `CU`.`OrganizationUserId` = `TUM`.`OrganizationUserId`
|
WHERE `CU`.`CollectionId` = `CG`.`CollectionId` AND `CU`.`OrganizationUserId` = `TUM`.`OrganizationUserId`
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Update `OrganizationUser` to migrate all OrganizationUsers with Manager role to User role
|
-- Update `OrganizationUser` to migrate all OrganizationUsers with Manager role to User role
|
||||||
UPDATE `OrganizationUser` `OU`
|
UPDATE `OrganizationUser` `OU`
|
||||||
SET `OU`.`Type` = 2, `OU`.`RevisionDate` = UTC_TIMESTAMP() -- User
|
SET `OU`.`Type` = 2, `OU`.`RevisionDate` = UTC_TIMESTAMP() -- User
|
||||||
WHERE `OU`.`Id` IN (SELECT `OrganizationUserId` FROM `TempUserManagers` WHERE `IsManager` = 1);
|
WHERE `OU`.`Id` IN (SELECT `OrganizationUserId` FROM `TempUserManagers` WHERE `IsManager` = 1);
|
||||||
|
|
||||||
-- Step 4
|
-- Step 4
|
||||||
-- Update `User` `AccountRevisionDate` for each unique `OrganizationUserId`
|
-- Update `User` `AccountRevisionDate` for each unique `OrganizationUserId`
|
||||||
UPDATE `User` `U`
|
UPDATE `User` `U`
|
||||||
INNER JOIN `OrganizationUser` `OU` ON `U`.`Id` = `OU`.`UserId`
|
INNER JOIN `OrganizationUser` `OU` ON `U`.`Id` = `OU`.`UserId`
|
||||||
INNER JOIN (
|
INNER JOIN (
|
||||||
-- Step 1
|
-- Step 1
|
||||||
SELECT `GU`.`OrganizationUserId`
|
SELECT `GU`.`OrganizationUserId`
|
||||||
FROM `GroupUser` `GU`
|
FROM `GroupUser` `GU`
|
||||||
INNER JOIN `TempGroupsAccessAll` `TG` ON `GU`.`GroupId` = `TG`.`GroupId`
|
INNER JOIN `TempGroupsAccessAll` `TG` ON `GU`.`GroupId` = `TG`.`GroupId`
|
||||||
|
|
||||||
UNION
|
UNION
|
||||||
|
|
||||||
-- Step 2
|
-- Step 2
|
||||||
SELECT `OrganizationUserId`
|
SELECT `OrganizationUserId`
|
||||||
FROM `TempUsersAccessAll`
|
FROM `TempUsersAccessAll`
|
||||||
|
|
||||||
UNION
|
UNION
|
||||||
|
|
||||||
-- Step 3
|
-- Step 3
|
||||||
SELECT `OrganizationUserId`
|
SELECT `OrganizationUserId`
|
||||||
FROM `TempUserManagers`
|
FROM `TempUserManagers`
|
||||||
) AS `CombinedOrgUsers` ON `OU`.`Id` = `CombinedOrgUsers`.`OrganizationUserId`
|
) AS `CombinedOrgUsers` ON `OU`.`Id` = `CombinedOrgUsers`.`OrganizationUserId`
|
||||||
SET `U`.`AccountRevisionDate` = UTC_TIMESTAMP();
|
SET `U`.`AccountRevisionDate` = UTC_TIMESTAMP();
|
||||||
|
|
||||||
-- Step 5
|
-- Step 5: Set `FlexibleCollections` = 1 for all organizations that have not yet been migrated.
|
||||||
-- Set `FlexibleCollections` = 1 for all organizations that have not yet been migrated.
|
UPDATE `Organization`
|
||||||
UPDATE `Organization`
|
SET `FlexibleCollections` = 1
|
||||||
SET `FlexibleCollections` = 1
|
WHERE `FlexibleCollections` = 0;
|
||||||
WHERE `FlexibleCollections` = 0;
|
|
||||||
|
|
||||||
-- Commit transaction
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
-- Step 6: Drop the temporary tables
|
-- Step 6: Drop the temporary tables
|
||||||
DROP TEMPORARY TABLE IF EXISTS `TempGroupsAccessAll`;
|
DROP TEMPORARY TABLE IF EXISTS `TempGroupsAccessAll`;
|
||||||
|
@ -123,8 +123,7 @@
|
|||||||
SELECT "OrganizationUserId" FROM "TempUserManagers"
|
SELECT "OrganizationUserId" FROM "TempUserManagers"
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Step 5
|
-- Step 5: Set "FlexibleCollections" = true for all organizations that have not yet been migrated.
|
||||||
-- Set "FlexibleCollections" = true for all organizations that have not yet been migrated.
|
|
||||||
UPDATE "Organization"
|
UPDATE "Organization"
|
||||||
SET "FlexibleCollections" = true
|
SET "FlexibleCollections" = true
|
||||||
WHERE "FlexibleCollections" = false;
|
WHERE "FlexibleCollections" = false;
|
||||||
|
@ -141,8 +141,7 @@
|
|||||||
) AS "CombinedOrgUsers" ON "OU"."Id" = "CombinedOrgUsers"."OrganizationUserId"
|
) AS "CombinedOrgUsers" ON "OU"."Id" = "CombinedOrgUsers"."OrganizationUserId"
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Step 5
|
-- Step 5: Set "FlexibleCollections" = 1 for all organizations that have not yet been migrated.
|
||||||
-- Set "FlexibleCollections" = 1 for all organizations that have not yet been migrated.
|
|
||||||
UPDATE "Organization"
|
UPDATE "Organization"
|
||||||
SET "FlexibleCollections" = 1
|
SET "FlexibleCollections" = 1
|
||||||
WHERE "FlexibleCollections" = 0;
|
WHERE "FlexibleCollections" = 0;
|
||||||
|
Reference in New Issue
Block a user