docs(session-persistence): clarify SQLite permission limits
This commit is contained in:
@@ -659,8 +659,9 @@ export interface Config {
|
|||||||
* opens an in-process database (tests). On filesystems with POSIX modes,
|
* opens an in-process database (tests). On filesystems with POSIX modes,
|
||||||
* missing directories and databases are created owner-only; existing path
|
* missing directories and databases are created owner-only; existing path
|
||||||
* modes are preserved. Filesystem setup errors other than an existing database
|
* modes are preserved. Filesystem setup errors other than an existing database
|
||||||
* fail initialization. The backend does not protect integrity when another
|
* fail initialization. The backend does not protect confidentiality or
|
||||||
* principal can replace the database entry in its parent directory.
|
* integrity when another principal can replace the database entry in its
|
||||||
|
* parent directory.
|
||||||
*/
|
*/
|
||||||
path: string
|
path: string
|
||||||
/**
|
/**
|
||||||
@@ -683,7 +684,7 @@ export interface Config {
|
|||||||
export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist'
|
export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist'
|
||||||
```
|
```
|
||||||
|
|
||||||
Source: [`packages/session-persistence/session-persistence-sqlite/src/index.ts:54`](../packages/session-persistence/session-persistence-sqlite/src/index.ts)
|
Source: [`packages/session-persistence/session-persistence-sqlite/src/index.ts:55`](../packages/session-persistence/session-persistence-sqlite/src/index.ts)
|
||||||
|
|
||||||
## `@deepseek-ai/dsh-session-query`
|
## `@deepseek-ai/dsh-session-query`
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Each `SessionEvent` maps 1:1 onto a row in an `events` table `(session_id, seq,
|
|||||||
|
|
||||||
The repository's Node range supports unflagged `node:sqlite`. The database enables foreign keys and uses the configured journal mode (`wal` by default; use a rollback mode where WAL shared-memory files are unsuitable). `PRAGMA user_version` stores the table-layout version; databases with any other version are rejected because this unreleased format has no migrations.
|
The repository's Node range supports unflagged `node:sqlite`. The database enables foreign keys and uses the configured journal mode (`wal` by default; use a rollback mode where WAL shared-memory files are unsuitable). `PRAGMA user_version` stores the table-layout version; databases with any other version are rejected because this unreleased format has no migrations.
|
||||||
|
|
||||||
On filesystems with POSIX modes, the backend creates missing directories as `0700` and exclusively creates a missing database as `0600` before SQLite opens it. New WAL sidecars receive the database's owner-only mode. Existing directories, database files, and sidecars keep their modes; filesystem setup errors other than an existing database fail initialization. These defaults prevent incidental exposure through the process umask, but do not protect database integrity when another principal can replace the database entry in its parent directory.
|
On filesystems with POSIX modes, the backend requests mode `0700` for missing directories and exclusively creates a missing database with mode `0600` before SQLite opens it; the process umask may further restrict both. New WAL sidecars receive the database's resulting owner-only mode. Existing directories, database files, and sidecars keep their modes; filesystem setup errors other than an existing database fail initialization. These defaults prevent incidental exposure through a permissive process umask, but do not protect database confidentiality or integrity when another principal can replace the database entry in its parent directory.
|
||||||
|
|
||||||
## Contract semantics over rows
|
## Contract semantics over rows
|
||||||
|
|
||||||
|
|||||||
@@ -38,8 +38,9 @@ function surfaceBindings(event: SessionEvent): [string | null, string | null] {
|
|||||||
/**
|
/**
|
||||||
* Exclusively create a missing database file with owner-only permissions.
|
* Exclusively create a missing database file with owner-only permissions.
|
||||||
* Existing files retain their modes, and errors other than `EEXIST` propagate.
|
* Existing files retain their modes, and errors other than `EEXIST` propagate.
|
||||||
* `DatabaseSync` reopens by path, so this does not protect integrity when
|
* `DatabaseSync` reopens by path, so this does not protect confidentiality or
|
||||||
* another principal can replace the database entry in its parent directory.
|
* integrity when another principal can replace the database entry in its parent
|
||||||
|
* directory.
|
||||||
*/
|
*/
|
||||||
async function createDatabaseFile(path: string): Promise<void> {
|
async function createDatabaseFile(path: string): Promise<void> {
|
||||||
try {
|
try {
|
||||||
@@ -57,8 +58,9 @@ export interface Config {
|
|||||||
* opens an in-process database (tests). On filesystems with POSIX modes,
|
* opens an in-process database (tests). On filesystems with POSIX modes,
|
||||||
* missing directories and databases are created owner-only; existing path
|
* missing directories and databases are created owner-only; existing path
|
||||||
* modes are preserved. Filesystem setup errors other than an existing database
|
* modes are preserved. Filesystem setup errors other than an existing database
|
||||||
* fail initialization. The backend does not protect integrity when another
|
* fail initialization. The backend does not protect confidentiality or
|
||||||
* principal can replace the database entry in its parent directory.
|
* integrity when another principal can replace the database entry in its
|
||||||
|
* parent directory.
|
||||||
*/
|
*/
|
||||||
path: string
|
path: string
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user