SuperAPI AI 工具集

electric-postgres-security

安全与审计

查看项目

更新于 10-16 05:07

技能介绍

用途:在将 Electric 同步服务部署到生产前,按清单核对 Postgres 的用户权限、表配置与连接设置。该技能建立在 electric-proxy-auth 之上,建议先阅读后者的代理安全模式。

主要能力与检查项:

  1. 用户权限:确认 Electric 用户具备 REPLICATION 角色(SELECT rolreplication FROM pg_roles WHERE rolname = 'electric_user';),对同步表有 SELECT(has_table_privilege),并通常需要数据库级 CREATE(has_database_privilege),除非启用 ELECTRIC_MANUAL_TABLE_PUBLISHING=true。对应修复为 ALTER ROLE electric_user WITH REPLICATION;、GRANT SELECT、GRANT CREATE ON DATABASE。
  2. 表配置:所有同步表应设置 REPLICA IDENTITY FULL(relreplident = 'f',否则为 'd' 或 'n'),修复命令 ALTER TABLE todos REPLICA IDENTITY FULL;;并确认表已加入 Electric 发布集(pg_publication_tables,pubname 为 electric_publication_default),手动模式下用 ALTER PUBLICATION ... ADD TABLE。
  3. 连接与数据库配置:DATABASE_URL 必须使用直连(如 postgres://user:pass@db-host:5432/mydb),不能指向连接池(如 6432 端口的 PgBouncer 或 Supabase pooler);池化查询应另设 ELECTRIC_POOLED_DATABASE_URL。wal_level 需为 logical,否则改为 logical 并重启 Postgres。

常见错误:使用连接池作为 DATABASE_URL(除 PgBouncer 1.23+ 外,连接池不支持逻辑复制);缺少 REPLICA IDENTITY FULL 会导致更新/删除无法流式传输完整行,非主键列可能缺失;Electric 用户未授予 REPLICATION 角色则无法使用逻辑复制。

部署前汇总:REPLICATION 角色、同步表 SELECT、数据库 CREATE(或手动发布)、全部同步表 REPLICA IDENTITY FULL、表在 Electric 发布集中、DATABASE_URL 直连、wal_level=logical、设置 ELECTRIC_SECRET(不使用 ELECTRIC_INSECURE=true)、机密仅在服务端注入。版本面向 Electric 同步服务 v1.x。