Share this page with your security team. Architecture, command whitelist, audit schema, and a customer-run lockdown script — everything needed for enterprise procurement.
The proxy runs on your server. It calls out to TuneVault. TuneVault never calls in. No inbound firewall rules, no VPN, no SSH from our side.
tunevault system user with /sbin/nologin, restricted to /opt/tunevault only.Storage behavior depends on how you connect. No mode ever stores plaintext passwords.
| Connection Mode | Oracle Credentials Stored? | Storage Method | Plaintext on Disk? |
|---|---|---|---|
| Direct TCP — session-only | No — not persisted | In-process only, discarded after use | Never |
| Direct TCP — saved connection | Yes — encrypted at rest | AES-256-GCM ciphertext in oracle_connections |
Never |
| Proxy / HTTP agent | API key only | API key stored as AES-256 ciphertext; Oracle OS auth via proxy — no password transmitted | Never |
| Agent tunnel (install.sh) | No Oracle password stored | OS authentication via tunnel; tunnel token encrypted at rest | Never |
These are the only EBS operational commands TuneVault can issue. The list is seeded in the database at deployment time and validated server-side on every request — user input never flows into command construction.
| Slug | Label | Category | Command Preview | Risk | Dry-run |
|---|---|---|---|---|---|
|
Loading live whitelist from database...
|
|||||
audit_log rejection row — before any Oracle command is even considered. The slug validation happens against the database, not a client-supplied list. If a slug isn't in ebs_control_commands, it cannot be executed, ever.
The audit_log table captures every EBS control preview attempt — allowed and rejected — as append-only rows. No row is ever updated or deleted.
CREATE TABLE audit_log ( id BIGSERIAL PRIMARY KEY, user_id INTEGER NOT NULL REFERENCES users(id), action TEXT NOT NULL, -- e.g. 'ebs_control.preview' slug TEXT NOT NULL, -- command slug attempted allowed BOOLEAN NOT NULL, -- true = whitelisted, false = rejected rejection_reason TEXT, -- null when allowed=true metadata JSONB DEFAULT '{}', -- ip, user_agent, risk_level created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- No UPDATE/DELETE permissions granted on this table. -- Application role has INSERT + SELECT only.
allowed=false and a rejection_reason — before returning HTTP 403.TuneVault reads performance and configuration metadata from Oracle system views. We never read table data, application schemas, or anything that could contain customer PII.
Your security team runs these scripts on your servers — not us. The bundle contains a hardening script, README with compliance framework mappings, and a command hash whitelist for integrity verification.
tunevault-lockdown.sh — hardening script (root-only, idempotent)README.md — plain-English explanation + SOC2/ISO 27001/NIST framework mappingwhitelist.json — machine-readable command catalog with SHA-256 hashestunevault system user with /sbin/nologin — no interactive shell, no home directory, system account only./opt/tunevault with mode 750. Log directory is 700. No other users can read proxy files./opt/tunevault and /tmp only. Oracle binary and scripts remain protected.*.tunevault.app for the proxy user. All other outbound traffic is blocked.admanagedsrvctl.sh status commands as oracle. No start/stop/restart./var/log/tunevault-audit.log — every action logged with timestamp and syslog tag.The table below maps each realistic attack scenario to the controls that block it. Every row is a question your security team will ask. Every cell is a concrete, verifiable answer.
| Attack Scenario | What the Attacker Needs | Controls That Block It | Risk |
|---|---|---|---|
| Access another tenant's Oracle connection | Valid session + target connection ID | Server-side ownership check on every connection operation. Guessing an integer ID returns 404, not the connection. All credential columns are AES-256 encrypted — even a DB dump is ciphertext only. | BLOCKED |
| Steal Oracle credentials from TuneVault's database | Full Neon DB dump + the ENCRYPTION_KEY env var (separate secret) |
AES-256-GCM encryption at rest. The key is a Render environment variable — never in DB, never in git, never in logs. Compromising only the DB yields ciphertext with no decryption path. | BLOCKED |
| Inject arbitrary commands via the agent channel | A valid per-tunnel API key + ability to intercept TLS | Agent enforces a hard command allowlist — only named commands with typed argument validation execute. No shell=True, no string interpolation. TLS validates server certificate via system CA bundle. | BLOCKED |
| Escalate from viewer → admin via API manipulation | Valid session with any role | RBAC enforced server-side via requireRole() middleware. Client-side visibility is cosmetic only — never trusted for access decisions. Role hierarchy: viewer → junior_dba → senior_dba → admin. |
BLOCKED |
| Reuse a magic link / steal a session | Intercept email or session cookie | Magic links are single-use (database-enforced), 15-minute TTL, 256-bit entropy. Session cookies are HttpOnly + Secure + SameSite=Lax. Auth endpoint rate-limited: 10 requests/minute per IP. | HARDENED |
| Compromise the TuneVault cloud service | Full Render platform access | Even with cloud access, attacker can only issue commands from the agent channel allowlist. No shell access to the customer host is possible — agent is outbound-only, no inbound port, no SSH. Credentials still encrypted. | HARDENED |
| Run arbitrary SQL via SQL Console | senior_dba session + target connection ownership | SQL Console requires senior_dba role. Execution enforces connection ownership server-side. Every query logged to sql_audit_log with user, SQL text, connection, duration, and outcome — permanent append-only. |
AUDITED |
Answers to the procurement checklist questions that follow every Oracle tool evaluation in an enterprise environment.
V$, GV$, DBA_* catalog views and — if EBS is detected — APPS.FND_* views. It requires SELECT_CATALOG_ROLE plus CREATE SESSION. No DBA, no SYSDBA, no ALTER, no INSERT/UPDATE/DELETE on any schema. EBS Ops (bounce, restart) uses your explicitly supplied APPS credentials — never elevated or stored beyond the session.
Everything above is the live state of the system — not a marketing document. The command whitelist is fetched from the database in real time.