瀏覽代碼

fix(db): grant app user permissions on players and games tables

PostgreSQL 15+ revokes CREATE from non-superusers in public schema by default.
Child 1's migration created the tables as postgres superuser, leaving the
txt_game_scores app user with no privileges — causing "permission denied"
on every request in production.

Adds a numbered provision migration to GRANT SELECT/INSERT/UPDATE on players
and games, plus USAGE/SELECT on games_id_seq, to the app user.

Task: d1c49d59-57bd-4eba-9e22-f25a04157ad4
fix/db-permissions
Warre (hal-developer) 1 月之前
父節點
當前提交
1e7772ad29
共有 1 個檔案被更改,包括 29 行新增0 行删除
  1. +29
    -0
      migrations/provision/postgres/001-grant-permissions.ts

+ 29
- 0
migrations/provision/postgres/001-grant-permissions.ts 查看文件

@@ -0,0 +1,29 @@
import pg from "pg";

const client = new pg.Client({
host: process.env.PROVISION_HOST,
port: parseInt(process.env.PROVISION_PORT ?? "5432"),
user: process.env.PROVISION_USER,
password: process.env.PROVISION_PASSWORD,
database: process.env.PROVISION_DATABASE,
});

await client.connect();

try {
// The HAL postgres provisioner names the app user identically to the database.
// PROVISION_DATABASE = "txt_game_scores" = the app user that server.mjs connects as.
const appUser = process.env.PROVISION_DATABASE as string;

await client.query(
`GRANT SELECT, INSERT, UPDATE ON TABLE players, games TO "${appUser}"`
);

await client.query(
`GRANT USAGE, SELECT ON SEQUENCE games_id_seq TO "${appUser}"`
);

console.log(`[txt-game migration-001] permissions granted to ${appUser}`);
} finally {
await client.end();
}

Loading…
取消
儲存