nis2-agile/docs/sql/025_asset_import.sql
DevEnv nis2-agile 4924075142 [FEAT] Asset import CMDB/cloud + scoring automatico GV.OC-04 (P2)
- 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>
2026-05-30 09:14:12 +02:00

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;