64 lines
2.8 KiB
SQL
64 lines
2.8 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,
|
|
node_id TEXT REFERENCES cpe_nodes(id),
|
|
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);
|
|
|
|
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.
|
|
|
|
-- Preserve original Red Hat CSAF product IDs, relationships and status rules.
|
|
CREATE TABLE IF NOT EXISTS redhat_advisories (
|
|
id TEXT PRIMARY KEY,
|
|
title TEXT,
|
|
initial_release_date TEXT,
|
|
current_release_date TEXT,
|
|
product_tree_json TEXT NOT NULL
|
|
);
|
|
CREATE TABLE IF NOT EXISTS redhat_advisory_cves (
|
|
id TEXT PRIMARY KEY,
|
|
advisory_id TEXT NOT NULL REFERENCES redhat_advisories(id) ON DELETE CASCADE,
|
|
cve_id TEXT NOT NULL REFERENCES vulnerabilities(id) ON DELETE CASCADE,
|
|
product_status_json TEXT NOT NULL,
|
|
remediations_json TEXT NOT NULL,
|
|
UNIQUE(advisory_id,cve_id)
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_redhat_advisory_cves_cve
|
|
ON redhat_advisory_cves(cve_id);
|