Files
vuln-builder/sql/schema.sql
T
2026-11-12 16:40:01 +01:00

38 lines
2.1 KiB
SQL

PRAGMA foreign_keys=ON;
CREATE TABLE IF NOT EXISTS meta (key TEXT PRIMARY KEY,value TEXT NOT NULL);
CREATE TABLE IF NOT EXISTS sources (name TEXT PRIMARY KEY, revision TEXT NOT NULL, indexed INTEGER NOT NULL DEFAULT 0, documents INTEGER NOT NULL DEFAULT 0);
CREATE TABLE IF NOT EXISTS vulnerabilities (id TEXT PRIMARY KEY, published TEXT, modified TEXT, state TEXT, summary TEXT);
CREATE TABLE IF NOT EXISTS aliases (alias TEXT NOT NULL, vulnerability_id TEXT NOT NULL REFERENCES vulnerabilities(id) ON DELETE CASCADE, PRIMARY KEY(alias,vulnerability_id));
CREATE INDEX IF NOT EXISTS idx_aliases_vuln ON aliases(vulnerability_id);
CREATE TABLE IF NOT EXISTS affected_packages (
id TEXT PRIMARY KEY, vulnerability_id TEXT NOT NULL REFERENCES vulnerabilities(id) ON DELETE CASCADE,
ecosystem TEXT, package_name TEXT, ranges_json TEXT NOT NULL, versions_json TEXT NOT NULL, source TEXT NOT NULL);
CREATE INDEX IF NOT EXISTS idx_affected_vuln ON affected_packages(vulnerability_id);
CREATE INDEX IF NOT EXISTS idx_affected_package ON affected_packages(ecosystem,package_name);
CREATE TABLE IF NOT EXISTS cpe_matches (
id TEXT PRIMARY KEY, vulnerability_id TEXT NOT NULL REFERENCES vulnerabilities(id) ON DELETE CASCADE,
criteria TEXT, vulnerable INTEGER, version_start_including TEXT, version_start_excluding TEXT,
version_end_including TEXT, version_end_excluding TEXT, source TEXT NOT NULL);
CREATE INDEX IF NOT EXISTS idx_cpe_vuln ON cpe_matches(vulnerability_id);
CREATE TABLE IF NOT EXISTS cpe_nodes (
id TEXT PRIMARY KEY,
vulnerability_id TEXT NOT NULL
REFERENCES vulnerabilities(id)
ON DELETE CASCADE,
parent_id TEXT REFERENCES cpe_nodes(id),
operator TEXT NOT NULL
CHECK (operator IN ('AND', 'OR')),
negate INTEGER NOT NULL DEFAULT 0
CHECK (negate IN (0, 1)),
source TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_cpe_nodes_vuln
ON cpe_nodes(vulnerability_id);
ALTER TABLE cpe_matches
ADD COLUMN node_id TEXT REFERENCES cpe_nodes(id);
CREATE INDEX IF NOT EXISTS idx_cpe_matches_node
ON cpe_matches(node_id);
-- Conditions expressed as AND, OR and negate are deliberately NOT converted into independent vulnerability assertions.