Security Controls
Authentication
Authentication
Require authentication for all API requests
false, the API can accept unauthenticated requests and fall back to the built-in default user.
Set to true in any environment where the API is reachable by untrusted clients.JWT token settings
FASTAPI_USERS_JWT_SECRET must be the same across all instances (e.g., all Kubernetes pods) so that a token issued by one pod is accepted by another. Use a long, randomly generated string in production and never commit the real value to version control.JWT_LIFETIME_SECONDS controls how long a bearer token or cookie remains valid before the user must log in again.Data Protection
Data Protection
API Key Storage
false, API keys are stored as plaintext in the relational database.
When true, each key is hashed with SHA-256 before storage. The raw key is shown to the user only once at creation time and cannot be recovered afterward.Local File System Access
true, Cognee accepts local filesystem paths as data sources (e.g., /etc/passwd). This is convenient for local development but dangerous when Cognee is exposed as a multi-user backend — an authenticated user could read arbitrary files that the Cognee process has access to.Set to false when running Cognee as a backend service:Cypher Query Access
true, users can execute raw Cypher queries against the graph database (SearchType.CYPHER) and use natural language-to-Cypher translation (SearchType.NATURAL_LANGUAGE). Disable this to limit users to higher-level semantic search only:Encrypting Neo4j Aura Credentials
When using theneo4j_aura_dev dataset database handler for multi-user mode, Cognee stores per-dataset Neo4j Aura database connection info in the relational database. The stored database password is encrypted with Fernet symmetric encryption; the encryption key is derived from NEO4J_ENCRYPTION_KEY:"test_key" is intentionally insecure. Replace it with a long random string in any environment that stores real Neo4j Aura credentials.The Aura API credentials used to create or delete instances (
NEO4J_CLIENT_ID, NEO4J_CLIENT_SECRET, and NEO4J_TENANT_ID) are read from environment variables when needed and are not stored in the relational database by this handler.Multi-User Isolation
Multi-User Isolation
Dataset & Multi-User Isolation
| Layer | Supported backends |
|---|---|
| Relational | SQLite, PostgreSQL |
| Vector | LanceDB, PGVector |
| Graph | Kuzu, Neo4j Aura (neo4j_aura_dev handler) |
Recommended Production Settings
For detailed instructions on the multi-user permission system (users, tenants, roles, and ACL), see Cognee Permissions System.
Permissions Setup
Enable dataset isolation and access control
Multi-User Mode
Understand multi-tenant architecture