Skip to content

Commit d789db5

Browse files
docs: tighten securityPolicy section and note CWD path resolution (#308)
Trim the restricted-execution prose and add a note that DuckDB resolves relative paths against the host process CWD, not Malloy's workingDirectory, when sandboxed. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 31dd35f commit d789db5

1 file changed

Lines changed: 6 additions & 8 deletions

File tree

src/documentation/setup/config.malloynb

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,17 +86,15 @@ malloy-config-local.json
8686

8787
#### Restricted execution
8888

89-
For untrusted code, Malloy offers a single `securityPolicy` property with three levels:
89+
`securityPolicy` has three levels:
9090

91-
- `"none"` — no security policy applied. Ordinary DuckDB behavior. This is the default.
92-
- `"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).
93-
- `"sandboxed"` — no network access AND filesystem confined to `allowedDirectories` (defaults to `workingDirectory`). The reviewed strict recipe for untrusted Malloy. POSIX only.
91+
- `"none"` — default. Ordinary DuckDB behavior.
92+
- `"local"` — disables network access.
93+
- `"sandboxed"` — `"local"` plus a DuckDB directory allowlist (`allowedDirectories`, defaulting to `workingDirectory`). POSIX only.
9494

9595
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.
9696

97-
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.
98-
99-
The reviewed strict recipe:
97+
Under `"sandboxed"`, DuckDB resolves relative file paths against the host process working directory (`getcwd()`), not against Malloy's `workingDirectory`. Relative-path reads only succeed when the process CWD is inside an allowed directory.
10098

10199
```json
102100
{
@@ -111,7 +109,7 @@ The reviewed strict recipe:
111109
}
112110
```
113111

114-
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.
112+
Policies set a floor, not a ceiling. `allowedDirectories` and `tempDirectory` can be set explicitly. 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. Policies do not set resource limits — configure `threads`, `memoryLimit`, and timeouts separately.
115113

116114
#### Concurrency
117115

0 commit comments

Comments
 (0)