diff --git a/cmd/api/src/database/migration/migrations/v5.1.0.sql b/cmd/api/src/database/migration/migrations/v5.1.0.sql deleted file mode 100644 index 0a325b75f..000000000 --- a/cmd/api/src/database/migration/migrations/v5.1.0.sql +++ /dev/null @@ -1,27 +0,0 @@ --- Copyright 2023 Specter Ops, Inc. --- --- Licensed under the Apache License, Version 2.0 --- you may not use this file except in compliance with the License. --- You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, software --- distributed under the License is distributed on an "AS IS" BASIS, --- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --- See the License for the specific language governing permissions and --- limitations under the License. --- --- SPDX-License-Identifier: Apache-2.0 - --- Add saved queries permissions - --- Create new permissions saved query write and read -INSERT INTO permissions (authority, name, created_at, updated_at) VALUES ('saved_queries', 'Read', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING; -INSERT INTO permissions (authority, name, created_at, updated_at) VALUES ('saved_queries', 'Write', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING; - --- Add saved query permissions to administrator and user roles -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Administrator'), (SELECT id FROM permissions WHERE permissions.authority = 'saved_queries' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Administrator'), (SELECT id FROM permissions WHERE permissions.authority = 'saved_queries' and permissions.name = 'Write')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'User'), (SELECT id FROM permissions WHERE permissions.authority = 'saved_queries' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'User'), (SELECT id FROM permissions WHERE permissions.authority = 'saved_queries' and permissions.name = 'Write')) ON CONFLICT DO NOTHING; diff --git a/cmd/api/src/database/migration/migrations/v5.10.0.sql b/cmd/api/src/database/migration/migrations/v5.10.0.sql deleted file mode 100644 index c0e0c41e7..000000000 --- a/cmd/api/src/database/migration/migrations/v5.10.0.sql +++ /dev/null @@ -1,22 +0,0 @@ --- Copyright 2024 Specter Ops, Inc. --- --- Licensed under the Apache License, Version 2.0 --- you may not use this file except in compliance with the License. --- You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, software --- distributed under the License is distributed on an "AS IS" BASIS, --- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --- See the License for the specific language governing permissions and --- limitations under the License. --- --- SPDX-License-Identifier: Apache-2.0 - --- create mutate graphdb permission -INSERT INTO permissions (authority, name, created_at, updated_at) VALUES ('graphdb', 'Mutate', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING; - --- grant mutate graphdb permission to admins and power users -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Administrator'), (SELECT id FROM permissions WHERE permissions.authority = 'graphdb' AND permissions.name = 'Mutate')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'graphdb' AND permissions.name = 'Mutate')) ON CONFLICT DO NOTHING; diff --git a/cmd/api/src/database/migration/migrations/v5.11.0.sql b/cmd/api/src/database/migration/migrations/v5.11.0.sql index 3f09048dd..68fcd69dd 100644 --- a/cmd/api/src/database/migration/migrations/v5.11.0.sql +++ b/cmd/api/src/database/migration/migrations/v5.11.0.sql @@ -21,6 +21,3 @@ CREATE TABLE IF NOT EXISTS analysis_request_switch ( requested_at timestamp with time zone NOT NULL CONSTRAINT singleton_uni CHECK (singleton) ); - --- add fedramp eula FF -INSERT INTO feature_flags (created_at, updated_at, key, name, description, enabled, user_updatable) VALUES (current_timestamp, current_timestamp, 'fedramp_eula', 'FedRAMP EULA', 'Enables showing the FedRAMP EULA on every login. (Enterprise only)', false, false) ON CONFLICT DO NOTHING; diff --git a/cmd/api/src/database/migration/migrations/v5.15.0.sql b/cmd/api/src/database/migration/migrations/v5.15.0.sql new file mode 100644 index 000000000..2461b8d6f --- /dev/null +++ b/cmd/api/src/database/migration/migrations/v5.15.0.sql @@ -0,0 +1,63 @@ +-- Copyright 2024 Specter Ops, Inc. +-- +-- Licensed under the Apache License, Version 2.0 +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- SPDX-License-Identifier: Apache-2.0 + +-- Feature Flags +INSERT INTO feature_flags (created_at, updated_at, key, name, description, enabled, user_updatable) VALUES (current_timestamp, current_timestamp, 'adcs', 'Enable collection and processing of Active Directory Certificate Services Data', 'Enables the ability to collect, analyze, and explore Active Directory Certificate Services data and previews new attack paths.', false, true) ON CONFLICT DO NOTHING; +INSERT INTO feature_flags (created_at, updated_at, key, name, description, enabled, user_updatable) VALUES (current_timestamp, current_timestamp, 'clear_graph_data', 'Clear Graph Data', 'Enables the ability to delete all nodes and edges from the graph database.', true, false) ON CONFLICT DO NOTHING; +INSERT INTO feature_flags (created_at, updated_at, key, name, description, enabled, user_updatable) VALUES (current_timestamp, current_timestamp, 'risk_exposure_new_calculation', 'Use new tier zero risk exposure calculation', 'Enables the use of new tier zero risk exposure metatree metrics.', false, false) ON CONFLICT DO NOTHING; +INSERT INTO feature_flags (created_at, updated_at, key, name, description, enabled, user_updatable) VALUES (current_timestamp, current_timestamp, 'fedramp_eula', 'FedRAMP EULA', 'Enables showing the FedRAMP EULA on every login. (Enterprise only)', false, false) ON CONFLICT DO NOTHING; + +-- Note - order matters permissions and roles ops must come before roles permissions ops +-- Permissions +INSERT INTO permissions (authority, name, created_at, updated_at) VALUES ('saved_queries', 'Read', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING; +INSERT INTO permissions (authority, name, created_at, updated_at) VALUES ('saved_queries', 'Write', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING; +INSERT INTO permissions (authority, name, created_at, updated_at) VALUES ('clients', 'Read', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING; +INSERT INTO permissions (authority, name, created_at, updated_at) VALUES ('db', 'Wipe', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING; +INSERT INTO permissions (authority, name, created_at, updated_at) VALUES ('graphdb', 'Mutate', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING; + +-- Roles +INSERT INTO roles (name, description, created_at, updated_at) VALUES ('Power User', 'Can upload data, manage clients, and perform any action a User can', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING; + +-- Roles Permissions +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Administrator'), (SELECT id FROM permissions WHERE permissions.authority = 'saved_queries' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Administrator'), (SELECT id FROM permissions WHERE permissions.authority = 'saved_queries' and permissions.name = 'Write')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Administrator'), (SELECT id FROM permissions WHERE permissions.authority = 'clients' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Administrator'), (SELECT id FROM permissions WHERE permissions.authority = 'db' and permissions.name = 'Wipe')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Administrator'), (SELECT id FROM permissions WHERE permissions.authority = 'graphdb' AND permissions.name = 'Mutate')) ON CONFLICT DO NOTHING; + +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'User'), (SELECT id FROM permissions WHERE permissions.authority = 'saved_queries' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'User'), (SELECT id FROM permissions WHERE permissions.authority = 'saved_queries' and permissions.name = 'Write')) ON CONFLICT DO NOTHING; +-- Swap user clients manage for clients read permission +DELETE FROM roles_permissions WHERE role_id = (SELECT id FROM roles WHERE roles.name = 'User') AND permission_id = (SELECT id FROM permissions WHERE permissions.authority = 'clients' and permissions.name = 'Manage'); +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'User'), (SELECT id FROM permissions WHERE permissions.authority = 'clients' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; + +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Read-Only'), (SELECT id FROM permissions WHERE permissions.authority = 'auth' and permissions.name = 'CreateToken')) ON CONFLICT DO NOTHING; + +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'app' and permissions.name = 'ReadAppConfig')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'app' and permissions.name = 'WriteAppConfig')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'risks' and permissions.name = 'GenerateReport')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'risks' and permissions.name = 'ManageRisks')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'auth' and permissions.name = 'CreateToken')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'auth' and permissions.name = 'ManageSelf')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'clients' and permissions.name = 'Manage')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'clients' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'clients' and permissions.name = 'Tasking')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'collection' and permissions.name = 'ManageJobs')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'graphdb' and permissions.name = 'Write')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'graphdb' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'saved_queries' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'saved_queries' and permissions.name = 'Write')) ON CONFLICT DO NOTHING; +INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'graphdb' AND permissions.name = 'Mutate')) ON CONFLICT DO NOTHING; diff --git a/cmd/api/src/database/migration/migrations/v5.4.0.sql b/cmd/api/src/database/migration/migrations/v5.4.0.sql index 9c3230e80..5ee5543cb 100644 --- a/cmd/api/src/database/migration/migrations/v5.4.0.sql +++ b/cmd/api/src/database/migration/migrations/v5.4.0.sql @@ -33,5 +33,3 @@ DELETE FROM saved_queries WHERE user_id = '00000000-0000-0000-0000-000000000000'; - -INSERT INTO feature_flags (created_at, updated_at, key, name, description, enabled, user_updatable) VALUES (current_timestamp, current_timestamp, 'adcs', 'Enable collection and processing of Active Directory Certificate Services Data', 'Enables the ability to collect, analyze, and explore Active Directory Certificate Services data and previews new attack paths.', false, true) ON CONFLICT DO NOTHING; diff --git a/cmd/api/src/database/migration/migrations/v5.6.0.sql b/cmd/api/src/database/migration/migrations/v5.6.0.sql index 68b73bfd2..06b2d95a1 100644 --- a/cmd/api/src/database/migration/migrations/v5.6.0.sql +++ b/cmd/api/src/database/migration/migrations/v5.6.0.sql @@ -30,35 +30,3 @@ CREATE INDEX IF NOT EXISTS idx_audit_logs_actor_email ON audit_logs USING btree CREATE INDEX IF NOT EXISTS idx_audit_logs_source_ip_address ON audit_logs USING btree (source_ip_address); CREATE INDEX IF NOT EXISTS idx_audit_logs_status ON audit_logs USING btree (status); UPDATE feature_flags SET enabled = false, user_updatable = false WHERE key = 'adcs'; - --- Add clients read permission -INSERT INTO permissions (authority, name, created_at, updated_at) VALUES ('clients', 'Read', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING; - --- Grant administrator client read -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Administrator'), (SELECT id FROM permissions WHERE permissions.authority = 'clients' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; - --- Swap user clients manage for clients read permission -DELETE FROM roles_permissions WHERE role_id = (SELECT id FROM roles WHERE roles.name = 'User') AND permission_id = (SELECT id FROM permissions WHERE permissions.authority = 'clients' and permissions.name = 'Manage'); -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'User'), (SELECT id FROM permissions WHERE permissions.authority = 'clients' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; - --- Fix read-only missing create token -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Read-Only'), (SELECT id FROM permissions WHERE permissions.authority = 'auth' and permissions.name = 'CreateToken')) ON CONFLICT DO NOTHING; - --- Add role Power User -INSERT INTO roles (name, description, created_at, updated_at) VALUES ('Power User', 'Can upload data, manage clients, and perform any action a User can', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING; - --- Populate power user permissions -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'app' and permissions.name = 'ReadAppConfig')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'app' and permissions.name = 'WriteAppConfig')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'risks' and permissions.name = 'GenerateReport')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'risks' and permissions.name = 'ManageRisks')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'auth' and permissions.name = 'CreateToken')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'auth' and permissions.name = 'ManageSelf')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'clients' and permissions.name = 'Manage')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'clients' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'clients' and permissions.name = 'Tasking')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'collection' and permissions.name = 'ManageJobs')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'graphdb' and permissions.name = 'Write')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'graphdb' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'saved_queries' and permissions.name = 'Read')) ON CONFLICT DO NOTHING; -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Power User'), (SELECT id FROM permissions WHERE permissions.authority = 'saved_queries' and permissions.name = 'Write')) ON CONFLICT DO NOTHING; diff --git a/cmd/api/src/database/migration/migrations/v5.8.0.sql b/cmd/api/src/database/migration/migrations/v5.8.0.sql index 6ac555696..1529231aa 100644 --- a/cmd/api/src/database/migration/migrations/v5.8.0.sql +++ b/cmd/api/src/database/migration/migrations/v5.8.0.sql @@ -19,12 +19,3 @@ SET tag = REGEXP_REPLACE(tag, '\s', '', 'g'); ALTER TABLE ingest_tasks ADD COLUMN IF NOT EXISTS file_type integer DEFAULT 0; - --- Add db wipe permission -INSERT INTO permissions (authority, name, created_at, updated_at) VALUES ('db', 'Wipe', current_timestamp, current_timestamp) ON CONFLICT DO NOTHING; - --- grant admin dp wipe permission -INSERT INTO roles_permissions (role_id, permission_id) VALUES ((SELECT id FROM roles WHERE roles.name = 'Administrator'), (SELECT id FROM permissions WHERE permissions.authority = 'db' and permissions.name = 'Wipe')) ON CONFLICT DO NOTHING; - --- Add clear graph db FF -INSERT INTO feature_flags (created_at, updated_at, key, name, description, enabled, user_updatable) VALUES (current_timestamp, current_timestamp, 'clear_graph_data', 'Clear Graph Data', 'Enables the ability to delete all nodes and edges from the graph database.', true, false) ON CONFLICT DO NOTHING; diff --git a/cmd/api/src/database/migration/migrations/v5.8.1.sql b/cmd/api/src/database/migration/migrations/v5.8.1.sql index e04ae102b..229fc4880 100644 --- a/cmd/api/src/database/migration/migrations/v5.8.1.sql +++ b/cmd/api/src/database/migration/migrations/v5.8.1.sql @@ -43,6 +43,3 @@ ADD COLUMN IF NOT EXISTS logic_apps BIGINT DEFAULT 0, ADD COLUMN IF NOT EXISTS managed_clusters BIGINT DEFAULT 0, ADD COLUMN IF NOT EXISTS vm_scale_sets BIGINT DEFAULT 0, ADD COLUMN IF NOT EXISTS web_apps BIGINT DEFAULT 0; - --- Add new risk exposure calc FF -INSERT INTO feature_flags (created_at, updated_at, key, name, description, enabled, user_updatable) VALUES (current_timestamp, current_timestamp, 'risk_exposure_new_calculation', 'Use new tier zero risk exposure calculation', 'Enables the use of new tier zero risk exposure metatree metrics.', false, false) ON CONFLICT DO NOTHING;