Authentication
- SCRAM-SHA-256 for every wire-protocol connection, the same password mechanism modern PostgreSQL uses.
- No plain-text passwords at rest. Passwords for database users and minted credentials are stored as SCRAM verifiers.
- Short-lived credentials. Service accounts mint per-user credentials that expire after at most 24 hours and can be revoked individually. A service-account bearer can only mint for its own database, capped at its
max_roleandmax_ttl_secs. Only a hash of the bearer is stored. - Admin API tokens. The Admin API requires a bearer token on every request. Keep the admin token on your servers only.
- Fail closed. If Airhouse can’t reach its user registry, it rejects logins (SQLSTATE
53300) instead of letting them through. If it can’t determine a session’s role, it closes the connection instead of running with reduced privileges.
Authorization
- Roles on every statement.
reader,writer, andadminare checked before a statement reaches the query engine. See Users, roles, and security. - Schema-scoped writers. Credentials can be limited to writing in named schemas. See Schema-scoped writers.
- Extension allowlist. Users can only
INSTALLorLOADDuckDB extensions the operator allows.
Encryption
- In transit, clients: enable TLS on the server with a certificate and key (
[tls], ortlsin the Helm chart), and connect withsslmode=requireor stricter. With the Helm chart, TLS passes through HAProxy to the data plane. - In transit, Postgres: the Helm chart connects to the registry and catalog servers with
sslmode=requireby default. - In transit, object storage: set
use_ssl(S3_USE_SSL) to use HTTPS to your storage endpoint. - At rest: Airhouse stores data in your object storage and Postgres. Use their encryption at rest, such as server-side encryption on the bucket and encrypted Postgres storage.
Isolation
- Between databases. Each database has its own catalog, its own Postgres role, its own storage prefix, and its own users. See Multi-tenancy.
- Between connections. Each connection runs in its own DuckDB session, and per-user and per-database limits stop one workload from starving others.
- Your infrastructure. Airhouse runs in your environment. Your data doesn’t leave your storage and Postgres. See Where your data lives.
Auditing
Airhouse records executed queries, including the user, duration, row count, and outcome, in an audit log. Each credential minted by a service account gets its own unique username, and Airhouse stores it with thesubject your platform supplied and the issuing service account. Because the audit log records the username, you can trace each query back to one of your users.
Your responsibilities when you deploy
- Replace every default password and token. Generate the admin token with
openssl rand -hex 32and store it in a secret manager. - Enable TLS for any client traffic that crosses a network you don’t control.
- Keep port
8080(Admin API) reachable only from trusted networks. - Restrict access to the bucket and the Postgres servers to Airhouse and your administrators.
- Give each user the lowest role that works, and prefer short-lived credentials for applications.