<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Anes1032</title>
    <description>The latest articles on Forem by Anes1032 (@sena_moriwaki_2c3fc4534e4).</description>
    <link>https://forem.com/sena_moriwaki_2c3fc4534e4</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3658897%2Ff0e5d223-2f70-424a-919a-7594d2990fd9.png</url>
      <title>Forem: Anes1032</title>
      <link>https://forem.com/sena_moriwaki_2c3fc4534e4</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sena_moriwaki_2c3fc4534e4"/>
    <language>en</language>
    <item>
      <title>Built an Audit System in a Single 15MB Binary That Even DBAs Can't Fool</title>
      <dc:creator>Anes1032</dc:creator>
      <pubDate>Fri, 12 Dec 2025 16:50:15 +0000</pubDate>
      <link>https://forem.com/sena_moriwaki_2c3fc4534e4/i-built-an-audit-system-in-a-single-15mb-binary-that-even-dbas-cant-fool-51f5</link>
      <guid>https://forem.com/sena_moriwaki_2c3fc4534e4/i-built-an-audit-system-in-a-single-15mb-binary-that-even-dbas-cant-fool-51f5</guid>
      <description>&lt;p&gt;When auditors ask you to prove your data hasn't been tampered with, what do you show them?&lt;/p&gt;

&lt;p&gt;Access logs? Backups? pgaudit output?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But what if the DBA who generated those logs is the one committing fraud? How would you detect that?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DBAs are gods (Superusers). They have the power to modify data and erase the evidence. "We just have to trust the admins" — is that really acceptable?&lt;/p&gt;

&lt;p&gt;I built an OSS called &lt;strong&gt;Witnz&lt;/strong&gt; to answer this question: &lt;strong&gt;No Kafka, no dedicated DB, no additional servers, no complex configuration — just a single 15MB binary.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://github.com/Anes1032/witnz" rel="noopener noreferrer"&gt;https://github.com/Anes1032/witnz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Witnz in 5 Seconds
&lt;/h2&gt;

&lt;p&gt;Here's what happens when an attacker tries to tamper with data that should never change:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftoa0hgqwivlolb19ff2w.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftoa0hgqwivlolb19ff2w.gif" alt="Witnz detecting tampering" width="640" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Witnz monitors PostgreSQL's transaction log (WAL) externally and &lt;strong&gt;instantly detects&lt;/strong&gt; unauthorized changes — regardless of who made them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparison with Other Solutions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;th&gt;Migration Required&lt;/th&gt;
&lt;th&gt;Deployment&lt;/th&gt;
&lt;th&gt;Trust Model&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Witnz&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Sidecar binary (~15MB)&lt;/td&gt;
&lt;td&gt;Distributed Raft nodes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;pgaudit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PostgreSQL extension&lt;/td&gt;
&lt;td&gt;Single server logs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;immudb&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (full DB replacement)&lt;/td&gt;
&lt;td&gt;Dedicated database&lt;/td&gt;
&lt;td&gt;immudb server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Amazon QLDB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (full DB replacement)&lt;/td&gt;
&lt;td&gt;AWS managed service&lt;/td&gt;
&lt;td&gt;AWS infrastructure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hyperledger Fabric&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (new infrastructure)&lt;/td&gt;
&lt;td&gt;Multi-GB blockchain&lt;/td&gt;
&lt;td&gt;Consortium nodes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  vs pgaudit
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;pgaudit only logs queries; Witnz actively verifies data integrity&lt;/li&gt;
&lt;li&gt;pgaudit logs can be tampered; Witnz uses distributed hash chains&lt;/li&gt;
&lt;li&gt;Witnz provides real-time alerts on tampering&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  vs immudb / Amazon QLDB
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No migration required - works with existing PostgreSQL&lt;/li&gt;
&lt;li&gt;Same trust model (see Security Considerations below)&lt;/li&gt;
&lt;li&gt;Significantly lower deployment cost&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  vs Hyperledger Fabric
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;1000x lighter (~15MB vs multi-GB infrastructure)&lt;/li&gt;
&lt;li&gt;Hours to deploy vs weeks/months&lt;/li&gt;
&lt;li&gt;No blockchain complexity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Witnz delivers a &lt;strong&gt;blockchain-like trust model&lt;/strong&gt; with the simplicity of &lt;strong&gt;a sidecar you can drop next to your app servers&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Can It Detect DBA Fraud?
&lt;/h2&gt;

&lt;p&gt;The key is &lt;strong&gt;monitoring from outside the DB and locking evidence via distributed consensus&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh5xxtbkz3nf0bwnqf8kd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh5xxtbkz3nf0bwnqf8kd.png" alt=" " width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Two Layers of Defense
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Layer 1: Real-time WAL Monitoring (Instant)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Receives change events via PostgreSQL Logical Replication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instantly detects&lt;/strong&gt; &lt;code&gt;UPDATE&lt;/code&gt; / &lt;code&gt;DELETE&lt;/code&gt; and alerts&lt;/li&gt;
&lt;li&gt;Even if the DBA deletes logs, Witnz has already captured the WAL&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Layer 2: Merkle Root Verification (Periodic, Fast)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Periodically fetches all records in &lt;strong&gt;a single query&lt;/strong&gt; and computes Merkle Root&lt;/li&gt;
&lt;li&gt;Compares against stored Merkle Root Checkpoint &lt;strong&gt;instantly&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Catches tampering that bypasses Logical Replication:

&lt;ul&gt;
&lt;li&gt;Direct DB file manipulation&lt;/li&gt;
&lt;li&gt;Manual SQL during node downtime&lt;/li&gt;
&lt;li&gt;Restore from tampered backups&lt;/li&gt;
&lt;li&gt;Phantom inserts via unmonitored methods&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Distributed Consensus for Tamper Resistance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Raft consensus&lt;/strong&gt; (3+ nodes recommended, works with 1)&lt;/li&gt;
&lt;li&gt;Nodes share "the correct DB state" (Hash Chain + Merkle Root)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BoltDB embedded&lt;/strong&gt;: Evidence stored locally, zero external DB dependency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Even if a DBA tampers with the DB, it won't match the "ground truth" held by the Witnz cluster — and gets caught immediately.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Issues
&lt;/h3&gt;

&lt;p&gt;Raft consensus operates on a feudal-style system with the Leader as sovereign, lacking mechanisms to prevent tampering by the Leader node.&lt;br&gt;
→ This will be addressed through monitoring by Witness nodes, as described below.&lt;/p&gt;


&lt;h2&gt;
  
  
  Tech Stack: Simplicity First
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Language: Go (easy cross-compilation)
- DB Integration: PostgreSQL Logical Replication (jackc/pglogrepl)
- Consensus: Raft (hashicorp/raft)
- Storage: BoltDB (etcd-io/bbolt)
- Hashing: SHA256 + Merkle Tree
- Binary Size: ~15MB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Zero additional infrastructure.&lt;/strong&gt; No Kafka, no dedicated DB, no Java VM.&lt;/p&gt;


&lt;h2&gt;
  
  
  Protection Mode: For Append-Only Tables
&lt;/h2&gt;

&lt;p&gt;Witnz is designed for &lt;strong&gt;append-only tables&lt;/strong&gt; like audit logs and transaction histories.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;protected_tables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;audit_logs&lt;/span&gt;
    &lt;span class="na"&gt;verify_interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;30m&lt;/span&gt;  &lt;span class="c1"&gt;# Merkle Root verification every 30 min&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;financial_transactions&lt;/span&gt;
    &lt;span class="na"&gt;verify_interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10m&lt;/span&gt;  &lt;span class="c1"&gt;# Higher frequency (still seconds for 1M records)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What Attacks Can It Detect?
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attack Scenario&lt;/th&gt;
&lt;th&gt;Detection Method&lt;/th&gt;
&lt;th&gt;Timing&lt;/th&gt;
&lt;th&gt;Performance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;UPDATE&lt;/code&gt; / &lt;code&gt;DELETE&lt;/code&gt; via SQL&lt;/td&gt;
&lt;td&gt;Logical Replication&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Instant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real-time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Direct DB file manipulation&lt;/td&gt;
&lt;td&gt;Merkle Root verification&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Next check&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast (seconds)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tampering during node downtime&lt;/td&gt;
&lt;td&gt;Merkle Root verification&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;On startup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast (seconds)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phantom Insert&lt;/td&gt;
&lt;td&gt;Merkle Root verification&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Next check&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast (seconds)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Restore Tampered DB backup&lt;/td&gt;
&lt;td&gt;Merkle Root verification&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Next check&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fast (seconds)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Getting Started (Single Node)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Enable Logical Replication in PostgreSQL
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SHOW&lt;/span&gt; &lt;span class="n"&gt;wal_level&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;-- Should be 'logical'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Download Witnz
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Linux (amd64)&lt;/span&gt;
curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; https://github.com/Anes1032/witnz/releases/latest/download/witnz-linux-amd64 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/local/bin/witnz
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x /usr/local/bin/witnz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Create Config
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# witnz.yaml&lt;/span&gt;
&lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${DB_HOST}&lt;/span&gt;           &lt;span class="c1"&gt;# e.g., "postgres" or "prod-db.example.com"&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${DB_PORT}&lt;/span&gt;           &lt;span class="c1"&gt;# e.g., 5432&lt;/span&gt;
  &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${DB_NAME}&lt;/span&gt;       &lt;span class="c1"&gt;# e.g., "witnzdb"&lt;/span&gt;
  &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${DB_USER}&lt;/span&gt;           &lt;span class="c1"&gt;# e.g., "witnz"&lt;/span&gt;
  &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${DB_PASSWORD}&lt;/span&gt;   &lt;span class="c1"&gt;# Use environment variable&lt;/span&gt;

&lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;algorithm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sha256&lt;/span&gt;

&lt;span class="na"&gt;node&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node&lt;/span&gt;
  &lt;span class="na"&gt;data_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/data&lt;/span&gt;
  &lt;span class="na"&gt;bootstrap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;peer_addrs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;

&lt;span class="na"&gt;protected_tables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;audit_log&lt;/span&gt;
    &lt;span class="na"&gt;verify_interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;30s&lt;/span&gt;

&lt;span class="na"&gt;alerts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Run
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;witnz init &lt;span class="nt"&gt;--config&lt;/span&gt; witnz.yaml
witnz start &lt;span class="nt"&gt;--config&lt;/span&gt; witnz.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;That's it.&lt;/strong&gt; A scalable audit system running from a single 15MB binary.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It with Docker
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Anes1032/witnz.git
&lt;span class="nb"&gt;cd &lt;/span&gt;witnz
docker-compose up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three Witnz nodes spin up and start monitoring PostgreSQL.&lt;/p&gt;




&lt;h2&gt;
  
  
  Current Status
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Implemented Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Append-only mode with real-time UPDATE/DELETE detection&lt;/li&gt;
&lt;li&gt;Merkle Root verification with specific tampered record identification&lt;/li&gt;
&lt;li&gt;3-node Raft cluster with automatic failover&lt;/li&gt;
&lt;li&gt;PostgreSQL Logical Replication integration&lt;/li&gt;
&lt;li&gt;Slack webhook alerts&lt;/li&gt;
&lt;li&gt;Multi-platform support (Linux, macOS, Windows)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security Considerations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Raft Leader Compromise
&lt;/h3&gt;

&lt;p&gt;Witnz has a fundamental limitation: if a Raft leader node is compromised with &lt;strong&gt;root access&lt;/strong&gt;, it can submit false hash values that followers will accept.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;However, this requires:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Root access to the leader node's server&lt;/li&gt;
&lt;li&gt;Ability to modify the running binary or restart with a tampered version&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Same Applies to Other Solutions
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;th&gt;Server Root Compromise&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Witnz&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Attacker can submit false hashes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;immudb&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Attacker can submit false data and proofs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Amazon QLDB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Attacker with AWS access can manipulate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Any software&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Root access = full control&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;No software-only solution can protect against server root compromise.&lt;/strong&gt; This is a fundamental limitation shared by all database integrity tools, including immudb.&lt;/p&gt;

&lt;p&gt;The only theoretical protection is hardware-based root of trust (TPM, AWS Nitro Enclave, Intel SGX), which requires trusting the hardware vendor.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Witnz Protects Against
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Database administrator misconduct (without server root access)&lt;/li&gt;
&lt;li&gt;SQL injection attacks modifying audit records&lt;/li&gt;
&lt;li&gt;Direct database file tampering (detected via Merkle Root)&lt;/li&gt;
&lt;li&gt;Application-level bugs causing unauthorized modifications&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://github.com/Anes1032/witnz" rel="noopener noreferrer"&gt;https://github.com/Anes1032/witnz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>opensource</category>
      <category>go</category>
      <category>distributedsystems</category>
    </item>
  </channel>
</rss>
