diff --git a/sa/db/boulder_sa/20230419000000_CombinedSchema.sql b/sa/db/boulder_sa/20230419000000_CombinedSchema.sql index c2fa91c9e..6674fc3d9 100644 --- a/sa/db/boulder_sa/20230419000000_CombinedSchema.sql +++ b/sa/db/boulder_sa/20230419000000_CombinedSchema.sql @@ -1,7 +1,9 @@ -- +migrate Up -- SQL in section 'Up' is executed when this migration is applied -CREATE TABLE `authz2` ( +DROP TABLE IF EXISTS `authz`; + +CREATE TABLE IF NOT EXISTS `authz2` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `identifierType` tinyint(4) NOT NULL, `identifierValue` varchar(255) NOT NULL, @@ -20,7 +22,7 @@ CREATE TABLE `authz2` ( KEY `expires_idx` (`expires`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `blockedKeys` ( +CREATE TABLE IF NOT EXISTS `blockedKeys` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `keyHash` binary(32) NOT NULL, `added` datetime NOT NULL, @@ -33,7 +35,7 @@ CREATE TABLE `blockedKeys` ( KEY `extantCertificatesChecked_idx` (`extantCertificatesChecked`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `certificateStatus` ( +CREATE TABLE IF NOT EXISTS `certificateStatus` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `serial` varchar(255) NOT NULL, `subscriberApproved` tinyint(1) DEFAULT 0, @@ -53,7 +55,7 @@ CREATE TABLE `certificateStatus` ( KEY `notAfter_idx` (`notAfter`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `certificates` ( +CREATE TABLE IF NOT EXISTS `certificates` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `registrationID` bigint(20) NOT NULL, `serial` varchar(255) NOT NULL, @@ -67,7 +69,7 @@ CREATE TABLE `certificates` ( KEY `issued_idx` (`issued`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `certificatesPerName` ( +CREATE TABLE IF NOT EXISTS `certificatesPerName` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `eTLDPlusOne` varchar(255) NOT NULL, `time` datetime NOT NULL, @@ -76,7 +78,22 @@ CREATE TABLE `certificatesPerName` ( UNIQUE KEY `eTLDPlusOne_time_idx` (`eTLDPlusOne`,`time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `fqdnSets` ( +CREATE TABLE IF NOT EXISTS `challenges` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `authorizationID` varchar(255) NOT NULL, + `LockCol` bigint(20) DEFAULT NULL, + `type` varchar(255) NOT NULL, + `status` varchar(255) NOT NULL, + `error` mediumblob DEFAULT NULL, + `validated` datetime DEFAULT NULL, + `token` varchar(255) NOT NULL, + `validationRecord` mediumblob DEFAULT NULL, + `keyAuthorization` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `authorizationID_challenges_idx` (`authorizationID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `fqdnSets` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `setHash` binary(32) NOT NULL, `serial` varchar(255) NOT NULL, @@ -89,7 +106,7 @@ CREATE TABLE `fqdnSets` ( KEY `setHash_issued_idx` (`setHash`,`issued`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `incidents` ( +CREATE TABLE IF NOT EXISTS `incidents` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `serialTable` varchar(128) NOT NULL, `url` varchar(1024) NOT NULL, @@ -98,7 +115,7 @@ CREATE TABLE `incidents` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `issuedNames` ( +CREATE TABLE IF NOT EXISTS `issuedNames` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `reversedName` varchar(640) CHARACTER SET ascii NOT NULL, `notBefore` datetime NOT NULL, @@ -108,7 +125,7 @@ CREATE TABLE `issuedNames` ( KEY `reversedName_notBefore_Idx` (`reversedName`,`notBefore`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `keyHashToSerial` ( +CREATE TABLE IF NOT EXISTS `keyHashToSerial` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `keyHash` binary(32) NOT NULL, `certNotAfter` datetime NOT NULL, @@ -118,7 +135,7 @@ CREATE TABLE `keyHashToSerial` ( KEY `keyHash_certNotAfter` (`keyHash`,`certNotAfter`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `newOrdersRL` ( +CREATE TABLE IF NOT EXISTS `newOrdersRL` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `regID` bigint(20) NOT NULL, `time` datetime NOT NULL, @@ -127,7 +144,7 @@ CREATE TABLE `newOrdersRL` ( UNIQUE KEY `regID_time_idx` (`regID`,`time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `orderFqdnSets` ( +CREATE TABLE IF NOT EXISTS `orderFqdnSets` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `setHash` binary(32) NOT NULL, `orderID` bigint(20) NOT NULL, @@ -139,14 +156,14 @@ CREATE TABLE `orderFqdnSets` ( KEY `orderFqdnSets_registrationID_registrations` (`registrationID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `orderToAuthz2` ( +CREATE TABLE IF NOT EXISTS `orderToAuthz2` ( `orderID` bigint(20) NOT NULL, `authzID` bigint(20) NOT NULL, PRIMARY KEY (`orderID`,`authzID`), KEY `authzID` (`authzID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `orders` ( +CREATE TABLE IF NOT EXISTS `orders` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `registrationID` bigint(20) NOT NULL, `expires` datetime NOT NULL, @@ -162,7 +179,7 @@ CREATE TABLE `orders` ( -- Note: This table's name is a historical artifact and it is now -- used to store linting certificates, not precertificates. -- See #6807. -CREATE TABLE `precertificates` ( +CREATE TABLE IF NOT EXISTS `precertificates` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `registrationID` bigint(20) NOT NULL, `serial` varchar(255) NOT NULL, @@ -175,7 +192,7 @@ CREATE TABLE `precertificates` ( KEY `issued_precertificates_idx` (`issued`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `registrations` ( +CREATE TABLE IF NOT EXISTS `registrations` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `jwk` mediumblob NOT NULL, `jwk_sha256` varchar(255) NOT NULL, @@ -190,7 +207,7 @@ CREATE TABLE `registrations` ( KEY `initialIP_createdAt` (`initialIP`,`createdAt`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -CREATE TABLE `requestedNames` ( +CREATE TABLE IF NOT EXISTS `requestedNames` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `orderID` bigint(20) NOT NULL, `reversedName` varchar(253) CHARACTER SET ascii NOT NULL, @@ -199,9 +216,23 @@ CREATE TABLE `requestedNames` ( KEY `reversedName_idx` (`reversedName`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE IF NOT EXISTS `revokedCertificates` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `issuerID` bigint(20) NOT NULL, + `serial` varchar(255) NOT NULL, + `notAfterHour` datetime NOT NULL, + `shardIdx` bigint(20) NOT NULL, + `revokedDate` datetime NOT NULL, + `revokedReason` int(11) NOT NULL, + PRIMARY KEY (`id`), + KEY `issuerID_shardIdx_notAfterHour_idx` (`issuerID`, `shardIdx`, `notAfterHour`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + -- Tables below have foreign key constraints, so are created after all other tables. -CREATE TABLE `serials` ( +DROP TABLE IF EXISTS `sctReceipts`; + +CREATE TABLE IF NOT EXISTS `serials` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `registrationID` bigint(20) NOT NULL, `serial` varchar(255) NOT NULL, @@ -219,6 +250,18 @@ CREATE TABLE `serials` ( -- First set of tables have foreign key constraints, so are dropped first. DROP TABLE `serials`; +CREATE TABLE IF NOT EXISTS `authz` ( + `id` varchar(255) NOT NULL, + `identifier` varchar(255) NOT NULL, + `registrationID` bigint(20) NOT NULL, + `status` varchar(255) NOT NULL, + `expires` datetime DEFAULT NULL, + `combinations` varchar(255) NOT NULL, + PRIMARY KEY (`id`), + KEY `registrationID_identifier_status_expires_authz_idx` (`registrationID`,`identifier`,`status`,`expires`), + CONSTRAINT `regId_authz` FOREIGN KEY (`registrationID`) REFERENCES `registrations` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + DROP TABLE `authz2`; DROP TABLE `blockedKeys`; DROP TABLE `certificateStatus`; @@ -230,8 +273,44 @@ DROP TABLE `issuedNames`; DROP TABLE `keyHashToSerial`; DROP TABLE `newOrdersRL`; DROP TABLE `orderFqdnSets`; + +CREATE TABLE IF NOT EXISTS `orderToAuthz` ( + `orderID` bigint(20) NOT NULL, + `authzID` varchar(255) NOT NULL, + PRIMARY KEY (`orderID`,`authzID`), + KEY `authzID` (`authzID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + DROP TABLE `orderToAuthz2`; DROP TABLE `orders`; + +CREATE TABLE IF NOT EXISTS `pendingAuthorizations` ( + `id` varchar(255) NOT NULL, + `identifier` varchar(255) NOT NULL, + `registrationID` bigint(20) NOT NULL, + `status` varchar(255) NOT NULL, + `expires` datetime DEFAULT NULL, + `combinations` varchar(255) NOT NULL, + `LockCol` bigint(20) NOT NULL, + PRIMARY KEY (`id`), + KEY `identifier_registrationID_status_expires_idx` (`identifier`,`registrationID`,`status`,`expires`), + KEY `registrationID_status_expires_idx` (`registrationID`,`status`,`expires`), + CONSTRAINT `regId_pending_authz` FOREIGN KEY (`registrationID`) REFERENCES `registrations` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `sctReceipts` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `sctVersion` tinyint(1) NOT NULL, + `logID` varchar(255) NOT NULL, + `timestamp` bigint(20) NOT NULL, + `extensions` blob DEFAULT NULL, + `signature` blob DEFAULT NULL, + `certificateSerial` varchar(255) NOT NULL, + `LockCol` bigint(20) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `certificateSerial_logID` (`certificateSerial`,`logID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + DROP TABLE `precertificates`; DROP TABLE `registrations`; DROP TABLE `requestedNames`;