PostgreSQL 与 Sybase 复制链路权限说明
本文汇总 PostgreSQL 和 Sybase 相关复制场景中的常见权限要求,适用于以下链路:
- Sybase -> PostgreSQL
- PostgreSQL -> Sybase
- Sybase <-> PostgreSQL(双向)
使用建议
- 本文以“任务可以创建、通过预检查并稳定运行”为目标,总结源端和目标端的常见权限要求。
- 全量权限通常包含结构权限和全量数据权限。增量权限是在全量权限基础上补充 CDC 或逻辑复制相关权限。
- 企业环境中还可能叠加白名单、SSL、审计策略、对象 owner 限制等控制项,因此最终请以控制台预检查结果和 DBA 策略为准。
权限速查表
| 数据库 | 场景 | 源端常见权限 | 目标端常见权限 | 额外说明 |
|---|---|---|---|---|
| PostgreSQL | 结构 | 若涉及视图、函数、触发器等对象,建议 SUPERUSER | 若涉及 TABLESPACE、FOREIGN KEY、TYPE 等写权限,建议 DB Owner 或 SUPERUSER;若目标库不存在,还需 CREATEDB | 适用于 PostgreSQL 作为源端或目标端时的结构相关预置权限 |
| PostgreSQL | 全量 | USAGE on schema + SELECT on tables | 目标库读写权限;如包含外键依赖且需要禁用触发器,PostgreSQL >= 15 需 GRANT SET ON PARAMETER session_replication_role,PostgreSQL < 15 需 SUPERUSER | 全量权限包含结构权限和全量数据权限 |
| PostgreSQL | 增量 | REPLICATION + DB Owner 或 SUPERUSER | 目标库读写权限;若目标库不存在,还需 CREATEDB / CREATEROLE;如需禁用触发器,PostgreSQL >= 15 需 GRANT SET ON PARAMETER session_replication_role,PostgreSQL < 15 需 SUPERUSER | 开启 DDL 复制时只能使用 SUPERUSER 方案 |
| Sybase | 全量 | SELECT | SELECT、INSERT、DELETE、TRUNCATE | 适用于 Sybase 作为源端或目标端的全量任务 |
| Sybase | 增量 | sa_role;双向复制场景还需 sso_role | SELECT、INSERT、DELETE、TRUNCATE;如果需要禁用触发器,还需 replication_role | 双向复制创建额外 schema 时需补充 sso_role |
PostgreSQL 相关权限
权限明细
| 场景 | 源端常见权限 | 目标端常见权限 | 补充说明 |
|---|---|---|---|
| 结构 | 若涉及视图、函数、触发器等其他对象,建议 SUPERUSER | 若涉及 TABLESPACE、FOREIGN KEY、TYPE 等写权限,建议使用 DB Owner 或 SUPERUSER;若目标库不存在,还需 CREATEDB | 结构权限通常作为全量和增量任务的前置条件 |
| 全量 | USAGE on schema + SELECT on tables | 目标库读写权限;如需禁用触发器,PostgreSQL >= 15 需 GRANT SET ON PARAMETER session_replication_role,PostgreSQL < 15 需 SUPERUSER | 全量权限包含结构权限和全量数据权限 |
| 增量 | REPLICATION + DB Owner 或 SUPERUSER | 目标库读写权限;若目标库不存在,还需 CREATEDB / CREATEROLE;如需禁用触发器,PostgreSQL >= 15 需 GRANT SET ON PARAMETER session_replication_role,PostgreSQL < 15 需 SUPERUSER | 开启 DDL 复制时只能使用 SUPERUSER 方案 |
常见授权示例
结构相关
-- 如果涉及视图、函数、触发器等对象,建议源端使用 SUPERUSER
ALTER ROLE sync_user WITH SUPERUSER;
-- 目标端方案一:DB Owner
for each db:
GRANT <db_owner> TO sync_user;
ALTER ROLE sync_user WITH CREATEDB;
-- 目标端方案二:SUPERUSER
ALTER ROLE sync_user WITH SUPERUSER;
全量相关
-- 源端:读取 repl_db schema 下的表
GRANT USAGE ON SCHEMA repl_db TO sync_user;
GRANT SELECT ON ALL TABLES IN SCHEMA repl_db TO sync_user;
-- 目标端:如果包含外键依赖、需要禁用触发器,且 PostgreSQL >= 15
GRANT SET ON PARAMETER session_replication_role TO sync_user;
-- 目标端:如果包含外键依赖、需要禁用触发器,且 PostgreSQL < 15
ALTER ROLE sync_user WITH SUPERUSER;
增量相关
-- 源端方案一:REPLICATION + DB Owner
ALTER ROLE sync_user WITH REPLICATION;
for each db:
GRANT <db_owner> TO sync_user;
-- 源端方案二:SUPERUSER
ALTER ROLE sync_user WITH SUPERUSER;
-- 目标端:如果目标数据库不存在,还需要创建数据库和角色权限
CREATE USER sync_user WITH CREATEDB CREATEROLE PASSWORD 'sync_user';
-- 目标端:如果包含外键依赖,且 PostgreSQL >= 15
GRANT SET ON PARAMETER session_replication_role TO sync_user;
-- 目标端:PostgreSQL < 15 需要 SUPERUSER
ALTER ROLE sync_user WITH SUPERUSER;
如果开启 DDL 复制,只能使用 SUPERUSER 方案。
运行时权限补充
| 角色 | 场景 | 系统行为或操作 | 常见所需权限 |
|---|---|---|---|
| 源端 | 全量 | 读取所有被复制表 | SELECT |
| 源端 | 增量 | 创建 replication slot,执行 SELECT * FROM pg_create_logical_replication_slot('<slot>', 'pgoutput'); | REPLICATION |
| 源端 | 增量 | 设置 REPLICA IDENTITY FULL,执行 ALTER TABLE <table> REPLICA IDENTITY FULL; | 表 Owner |
| 源端 | 增量 | 创建 publication,执行 CREATE PUBLICATION <pub> FOR TABLE <table>[, <table>]; 或 CREATE PUBLICATION <pub> FOR ALL TABLES; | 表 Owner、CREATE ON DATABASE 或 SUPERUSER |
| 源端 | 增量 | 双向复制创建 _nd_repl_ schema 和 nd_repl_de_cycle_v3 表 | DB Owner 或 CREATE ON DATABASE |
| 源端 | 增量 | 开启 DDL 采集,执行 CREATE EVENT TRIGGER xxx; | SUPERUSER |
| 目标端 | 全量 | 写入并清空目标表 | SELECT、INSERT、TRUNCATE |
| 目标端 | 增量 | 执行行级同步写入 | SELECT、INSERT、UPDATE、DELETE |
Sybase 相关权限
权限明细
| 场景 | 源端常见权限 | 目标端常见权限 | 补充说明 |
|---|---|---|---|
| 全量 | SELECT | SELECT、INSERT、DELETE、TRUNCATE | 适用于全量任务的基本 DML 权限 |
| 增量 | sa_role;双向复制创建额外 schema 时还需 sso_role | SELECT、INSERT、DELETE、TRUNCATE;禁用触发器时还需 replication_role | 双向复制和触发器控制场景需要额外角色权限 |
常见授权示例
-- 增量源端
GRANT sa_role TO {user_name};
GRANT sso_role TO {user_name};
-- 增量目标端
GRANT replication_role TO {user_name};