Files
sub2api-cn-relay-manager/internal/store/migrations/0016_user_key_control_plane.sql

27 lines
1.2 KiB
MySQL
Raw Normal View History

CREATE TABLE IF NOT EXISTS user_key_audit_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
event_id TEXT UNIQUE NOT NULL,
actor_subject_id TEXT NOT NULL,
actor_role TEXT NOT NULL CHECK (actor_role IN ('admin','user','system')),
target_key_id TEXT NOT NULL,
action TEXT NOT NULL CHECK (action IN ('create','reset','pause','resume','delete')),
result TEXT NOT NULL CHECK (result IN ('success','denied','failed')),
reason TEXT NOT NULL DEFAULT '',
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ','now'))
);
CREATE INDEX IF NOT EXISTS idx_user_key_audit_target_key_id ON user_key_audit_events(target_key_id, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_user_key_audit_actor_subject_id ON user_key_audit_events(actor_subject_id, created_at DESC);
CREATE TABLE IF NOT EXISTS subject_rate_limits (
id INTEGER PRIMARY KEY AUTOINCREMENT,
subject_id TEXT NOT NULL,
action TEXT NOT NULL,
window_start TEXT NOT NULL,
hit_count INTEGER NOT NULL DEFAULT 0,
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ','now')),
UNIQUE(subject_id, action, window_start)
);
CREATE INDEX IF NOT EXISTS idx_subject_rate_limits_lookup ON subject_rate_limits(subject_id, action, window_start);