| 1 | PRAGMA foreign_keys = ON;
|
|---|
| 2 |
|
|---|
| 3 | -- Drop child tables first
|
|---|
| 4 | DROP TABLE IF EXISTS security_alerts;
|
|---|
| 5 | DROP TABLE IF EXISTS network_connections;
|
|---|
| 6 | DROP TABLE IF EXISTS sysmon_events;
|
|---|
| 7 | DROP TABLE IF EXISTS computer_processes;
|
|---|
| 8 | DROP TABLE IF EXISTS computer_history;
|
|---|
| 9 | DROP TABLE IF EXISTS computers;
|
|---|
| 10 |
|
|---|
| 11 | DROP TABLE IF EXISTS admin_sessions;
|
|---|
| 12 | DROP TABLE IF EXISTS env_tokens;
|
|---|
| 13 | DROP TABLE IF EXISTS environments;
|
|---|
| 14 |
|
|---|
| 15 | DROP TABLE IF EXISTS memberships;
|
|---|
| 16 | DROP TABLE IF EXISTS users;
|
|---|
| 17 | DROP TABLE IF EXISTS tenants;
|
|---|
| 18 |
|
|---|
| 19 |
|
|---|
| 20 | CREATE TABLE tenants (
|
|---|
| 21 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|---|
| 22 | name TEXT NOT NULL,
|
|---|
| 23 | owner_email TEXT NOT NULL,
|
|---|
| 24 | created_at TEXT NOT NULL
|
|---|
| 25 | );
|
|---|
| 26 |
|
|---|
| 27 | CREATE TABLE users (
|
|---|
| 28 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|---|
| 29 | email TEXT NOT NULL UNIQUE,
|
|---|
| 30 | name TEXT,
|
|---|
| 31 | picture TEXT,
|
|---|
| 32 | created_at TEXT NOT NULL
|
|---|
| 33 | );
|
|---|
| 34 |
|
|---|
| 35 | CREATE TABLE memberships (
|
|---|
| 36 | user_id INTEGER NOT NULL,
|
|---|
| 37 | tenant_id INTEGER NOT NULL,
|
|---|
| 38 | role TEXT NOT NULL DEFAULT 'admin',
|
|---|
| 39 | created_at TEXT NOT NULL,
|
|---|
| 40 | PRIMARY KEY (user_id, tenant_id),
|
|---|
| 41 | FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|---|
| 42 | FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
|
|---|
| 43 | );
|
|---|
| 44 |
|
|---|
| 45 |
|
|---|
| 46 | CREATE TABLE environments (
|
|---|
| 47 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|---|
| 48 | name TEXT NOT NULL,
|
|---|
| 49 | created_at TEXT NOT NULL,
|
|---|
| 50 | tenant_id INTEGER NOT NULL,
|
|---|
| 51 | FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE,
|
|---|
| 52 | UNIQUE (tenant_id, name)
|
|---|
| 53 | );
|
|---|
| 54 |
|
|---|
| 55 | CREATE TABLE env_tokens (
|
|---|
| 56 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|---|
| 57 | env_name TEXT NOT NULL,
|
|---|
| 58 | token TEXT NOT NULL UNIQUE,
|
|---|
| 59 | created_at TEXT NOT NULL,
|
|---|
| 60 | expires_at TEXT,
|
|---|
| 61 | tenant_id INTEGER NOT NULL,
|
|---|
| 62 | FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
|
|---|
| 63 | -- (env_name is "soft FK" because SQLite cannot FK to a non-unique column across tenants)
|
|---|
| 64 | );
|
|---|
| 65 |
|
|---|
| 66 | CREATE TABLE admin_sessions (
|
|---|
| 67 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|---|
| 68 | token TEXT NOT NULL UNIQUE,
|
|---|
| 69 | created_at TEXT NOT NULL,
|
|---|
| 70 | tenant_id INTEGER NOT NULL,
|
|---|
| 71 | FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
|
|---|
| 72 | );
|
|---|
| 73 |
|
|---|
| 74 |
|
|---|
| 75 | CREATE TABLE computers (
|
|---|
| 76 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|---|
| 77 | name TEXT NOT NULL,
|
|---|
| 78 | user TEXT,
|
|---|
| 79 | ip TEXT,
|
|---|
| 80 | os TEXT,
|
|---|
| 81 | first_seen TIMESTAMP,
|
|---|
| 82 | last_seen TIMESTAMP,
|
|---|
| 83 | sysmon_available BOOLEAN DEFAULT 0,
|
|---|
| 84 | env_name TEXT NOT NULL DEFAULT 'default',
|
|---|
| 85 | tenant_id INTEGER NOT NULL,
|
|---|
| 86 | FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE,
|
|---|
| 87 | UNIQUE (tenant_id, name)
|
|---|
| 88 | );
|
|---|
| 89 |
|
|---|
| 90 | CREATE TABLE computer_history (
|
|---|
| 91 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|---|
| 92 | computer_id INTEGER NOT NULL,
|
|---|
| 93 | cpu_usage REAL,
|
|---|
| 94 | ram_usage REAL,
|
|---|
| 95 | disk_usage REAL,
|
|---|
| 96 | network_sent_mb REAL,
|
|---|
| 97 | network_recv_mb REAL,
|
|---|
| 98 | timestamp TIMESTAMP,
|
|---|
| 99 | FOREIGN KEY (computer_id) REFERENCES computers(id) ON DELETE CASCADE
|
|---|
| 100 | );
|
|---|
| 101 |
|
|---|
| 102 | CREATE TABLE computer_processes (
|
|---|
| 103 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|---|
| 104 | computer_id INTEGER NOT NULL,
|
|---|
| 105 | pid INTEGER,
|
|---|
| 106 | name TEXT,
|
|---|
| 107 | cpu_percent REAL,
|
|---|
| 108 | memory_mb REAL,
|
|---|
| 109 | username TEXT,
|
|---|
| 110 | cmdline TEXT,
|
|---|
| 111 | timestamp TIMESTAMP,
|
|---|
| 112 | FOREIGN KEY (computer_id) REFERENCES computers(id) ON DELETE CASCADE
|
|---|
| 113 | );
|
|---|
| 114 |
|
|---|
| 115 | CREATE TABLE sysmon_events (
|
|---|
| 116 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|---|
| 117 | computer_id INTEGER NOT NULL,
|
|---|
| 118 | event_id INTEGER,
|
|---|
| 119 | event_type TEXT,
|
|---|
| 120 | message TEXT,
|
|---|
| 121 | timestamp TIMESTAMP,
|
|---|
| 122 | details TEXT,
|
|---|
| 123 | FOREIGN KEY (computer_id) REFERENCES computers(id) ON DELETE CASCADE
|
|---|
| 124 | );
|
|---|
| 125 |
|
|---|
| 126 | CREATE TABLE network_connections (
|
|---|
| 127 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|---|
| 128 | computer_id INTEGER NOT NULL,
|
|---|
| 129 | pid INTEGER,
|
|---|
| 130 | local_address TEXT,
|
|---|
| 131 | remote_address TEXT,
|
|---|
| 132 | status TEXT,
|
|---|
| 133 | process_name TEXT,
|
|---|
| 134 | timestamp TIMESTAMP,
|
|---|
| 135 | FOREIGN KEY (computer_id) REFERENCES computers(id) ON DELETE CASCADE
|
|---|
| 136 | );
|
|---|
| 137 |
|
|---|
| 138 | CREATE TABLE security_alerts (
|
|---|
| 139 | id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|---|
| 140 | computer_id INTEGER NOT NULL,
|
|---|
| 141 | alert_type TEXT,
|
|---|
| 142 | severity TEXT,
|
|---|
| 143 | description TEXT,
|
|---|
| 144 | timestamp TIMESTAMP,
|
|---|
| 145 | resolved BOOLEAN DEFAULT 0,
|
|---|
| 146 | FOREIGN KEY (computer_id) REFERENCES computers(id) ON DELETE CASCADE
|
|---|
| 147 | );
|
|---|
| 148 |
|
|---|