You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: consolidate filesystemPolicy/networkPolicy into single securityPolicy
Replace the two separate policy knobs (filesystemPolicy, networkPolicy) with a
single securityPolicy property offering three levels: "none", "local", and
"sandboxed". This reflects the underlying DuckDB mechanism where
enable_external_access gates both filesystem and network access together.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- `networkPolicy: "closed"` — forces `enableExternalAccess=false`, blocks `httpfs` and `INSTALL`, rejects remote `databasePath` and `motherDuckToken`.
90
+
- `"none"` — no security policy applied. Ordinary DuckDB behavior. This is the default.
91
+
- `"local"` — no network access. DuckDB cannot reach the network, but local filesystem access is not sandboxed to specific directories. Appropriate when the host already provides filesystem isolation (e.g. a container boundary).
92
+
- `"sandboxed"` — no network access AND filesystem confined to `allowedDirectories` (defaults to `workingDirectory`). The reviewed strict recipe for untrusted Malloy. POSIX only.
93
93
94
-
The reviewed strict recipe uses both; each axis can also stand alone when an external boundary covers the other.
94
+
Both `"local"` and `"sandboxed"` force `enableExternalAccess=false`, block `httpfs` and `INSTALL`, reject remote `databasePath` and `motherDuckToken`, lock configuration, and encrypt temp files. `"sandboxed"` additionally enforces directory containment and derives a safe `tempDirectory` inside the sandbox.
95
+
96
+
DuckDB's `enable_external_access` is a single toggle that gates both filesystem reach and network reach. `allowed_directories` only takes effect when external access is disabled. This is why `securityPolicy` is a single axis — the underlying DuckDB mechanism does not support independent filesystem and network control.
97
+
98
+
The reviewed strict recipe:
95
99
96
100
```json
97
101
{
@@ -100,14 +104,13 @@ The reviewed strict recipe uses both; each axis can also stand alone when an ext
100
104
"is": "duckdb",
101
105
"databasePath": "data/app.duckdb",
102
106
"workingDirectory": {"config": "rootDirectory"},
103
-
"filesystemPolicy": "sandboxed",
104
-
"networkPolicy": "closed"
107
+
"securityPolicy": "sandboxed"
105
108
}
106
109
}
107
110
}
108
111
```
109
112
110
-
Policies set a floor, not a ceiling. `allowedDirectories` and `tempDirectory` can be set explicitly to customize the sandbox. Other policy-controlled settings accept matching values but reject weaker ones — connection creation fails closed. `setupSQL`, `additionalExtensions`, `motherDuckToken`, and remote `databasePath` are incompatible with a restricted policy; to use any of them, drop the policy and configure DuckDB directly. Policies do not set resource limits — configure `threads`, `memoryLimit`, timeouts, and host quotas separately.
113
+
Policies set a floor, not a ceiling. `allowedDirectories` and `tempDirectory` can be set explicitly to customize the sandbox. Other policy-controlled settings accept matching values but reject weaker ones — connection creation fails closed. `setupSQL`, `additionalExtensions`, `motherDuckToken`, and remote `databasePath` are incompatible with any restricted policy; to use them, keep `securityPolicy` at `"none"` and configure DuckDB directly. Policies do not set resource limits — configure `threads`, `memoryLimit`, timeouts, and host quotas separately.
0 commit comments