- AssetScoringService::inferCriteria: euristica 6 criteri da campi CMDB (criticality, data_classification, internet_facing, dependencies, regulated) - AssetController::import (JWT org_admin/compliance_manager) + bulkUpsert condiviso: upsert dedup su external_ref, scoring auto GV.OC-04, max 1000 asset/batch - ServicesController::ingestAssets -> POST /services/assets-ingest (scope ingest:assets) per connettori CMDB/cloud - Migrazione 025: assets += external_ref + discovery_source + indice univoco dedup - Route POST:assetsIngest (services) + POST:import (assets) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
33 lines
1.9 KiB
SQL
33 lines
1.9 KiB
SQL
-- ============================================================================
|
|
-- Migration 025 - Asset import CMDB/cloud (P2)
|
|
-- ----------------------------------------------------------------------------
|
|
-- Abilita l'import bulk asset da CMDB/export cloud con dedup idempotente:
|
|
-- - assets.external_ref : ID asset nel sistema sorgente (CMDB/cloud)
|
|
-- - assets.discovery_source : provenienza (cmdb/aws/azure/csv/manual/...)
|
|
-- + indice univoco (organization_id, external_ref) per upsert.
|
|
--
|
|
-- Idempotente via information_schema. Rilanciabile.
|
|
-- mysql -h localhost nis2_agile_db -e "source docs/sql/025_asset_import.sql"
|
|
-- ============================================================================
|
|
|
|
DELIMITER //
|
|
DROP PROCEDURE IF EXISTS _mig025 //
|
|
CREATE PROCEDURE _mig025()
|
|
BEGIN
|
|
IF NOT EXISTS (SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='assets' AND COLUMN_NAME='external_ref') THEN
|
|
ALTER TABLE assets ADD COLUMN external_ref VARCHAR(190) NULL COMMENT 'ID asset nel sistema sorgente (dedup import)' AFTER serial_number;
|
|
END IF;
|
|
IF NOT EXISTS (SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='assets' AND COLUMN_NAME='discovery_source') THEN
|
|
ALTER TABLE assets ADD COLUMN discovery_source VARCHAR(40) NOT NULL DEFAULT 'manual' COMMENT 'Provenienza asset (cmdb/aws/azure/csv/manual)' AFTER external_ref;
|
|
END IF;
|
|
IF NOT EXISTS (SELECT 1 FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='assets' AND INDEX_NAME='uq_asset_external_ref') THEN
|
|
ALTER TABLE assets ADD UNIQUE KEY uq_asset_external_ref (organization_id, external_ref);
|
|
END IF;
|
|
END //
|
|
DELIMITER ;
|
|
CALL _mig025();
|
|
DROP PROCEDURE IF EXISTS _mig025;
|
|
|
|
-- ROLLBACK:
|
|
-- ALTER TABLE assets DROP INDEX uq_asset_external_ref, DROP COLUMN external_ref, DROP COLUMN discovery_source;
|