Aurélien Sibiril
33119f9306
Scope PGCheckpointer queries by tenant GID
...
Each Save and Load now derives tenant_id from the run GID and pins it
in the WHERE clause. A caller that supplies an ID from another tenant
fails closed instead of silently reading or overwriting cross-tenant
checkpoint data. Also rejects oversize checkpoints on load as a
read-side guard against a tampered or migrated row exceeding
MaxCheckpointBytes.
Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com >
2026-04-26 22:58:21 +02:00
..
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-04-02 14:37:29 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-18 19:19:04 +01:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-04-13 18:10:14 +02:00
2026-03-21 19:16:19 +01:00
2026-03-31 13:31:30 +02:00
2026-04-02 14:37:29 +02:00
2026-04-02 14:37:29 +02:00
2026-03-31 13:31:30 +02:00
2026-04-02 14:37:29 +02:00
2026-04-02 14:37:29 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-03-31 13:31:30 +02:00
2026-04-02 14:37:29 +02:00
2026-04-13 18:10:14 +02:00
2026-04-02 14:37:29 +02:00
2026-04-02 14:49:13 +02:00
2026-04-02 14:49:13 +02:00
2026-04-13 18:10:14 +02:00
2026-04-02 10:59:25 +02:00
2026-04-03 08:33:37 +02:00
2026-04-03 17:51:31 +02:00
2026-04-19 12:00:53 +02:00
2026-04-19 12:00:53 +02:00
2026-04-13 18:10:14 +02:00
2026-04-09 18:18:30 +02:00
2026-04-09 18:18:30 +02:00
2026-04-09 18:18:30 +02:00
2026-04-09 13:06:06 +02:00
2026-04-13 18:10:14 +02:00
2026-04-16 00:01:13 +02:00
2026-04-13 14:50:41 +04:00
2026-04-19 12:00:53 +02:00
2026-04-13 14:52:21 +04:00
2026-04-15 10:21:00 +04:00
2026-04-19 12:00:53 +02:00
2026-04-19 12:00:53 +02:00
2026-04-15 14:39:27 +02:00
2026-04-20 15:07:30 +02:00
2026-04-19 12:00:53 +02:00
2026-04-22 17:17:30 +02:00
2026-04-22 17:17:29 +02:00
2026-04-23 20:50:25 +02:00
2026-04-21 11:06:36 +02:00
2026-04-20 14:44:00 +02:00
2026-04-20 15:37:39 +02:00
2026-04-21 19:36:17 +02:00
2026-04-21 11:40:21 +04:00
2026-04-21 14:18:32 +04:00
2026-04-22 15:22:03 +04:00
2026-04-24 12:18:12 +04:00
2026-04-24 16:05:11 +02:00
2026-04-24 12:18:12 +04:00
2026-04-24 17:13:11 +04:00
2026-04-24 17:13:12 +04:00
2026-04-24 17:13:12 +04:00
2026-04-24 19:01:27 +04:00
2026-04-24 19:01:27 +04:00
2026-04-26 22:58:21 +02:00