跳到主要内容

PostgreSQL 与 Sybase 复制链路权限说明

本文汇总 PostgreSQL 和 Sybase 相关复制场景中的常见权限要求,适用于以下链路:

  • Sybase -> PostgreSQL
  • PostgreSQL -> Sybase
  • Sybase <-> PostgreSQL(双向)

使用建议

  • 本文以“任务可以创建、通过预检查并稳定运行”为目标,总结源端和目标端的常见权限要求。
  • 全量权限通常包含结构权限和全量数据权限。增量权限是在全量权限基础上补充 CDC 或逻辑复制相关权限。
  • 企业环境中还可能叠加白名单、SSL、审计策略、对象 owner 限制等控制项,因此最终请以控制台预检查结果和 DBA 策略为准。

权限速查表

数据库场景源端常见权限目标端常见权限额外说明
PostgreSQL结构若涉及视图、函数、触发器等对象,建议 SUPERUSER若涉及 TABLESPACEFOREIGN KEYTYPE 等写权限,建议 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 OwnerSUPERUSER目标库读写权限;若目标库不存在,还需 CREATEDB / CREATEROLE;如需禁用触发器,PostgreSQL >= 15 需 GRANT SET ON PARAMETER session_replication_role,PostgreSQL < 15 需 SUPERUSER开启 DDL 复制时只能使用 SUPERUSER 方案
Sybase全量SELECTSELECTINSERTDELETETRUNCATE适用于 Sybase 作为源端或目标端的全量任务
Sybase增量sa_role;双向复制场景还需 sso_roleSELECTINSERTDELETETRUNCATE;如果需要禁用触发器,还需 replication_role双向复制创建额外 schema 时需补充 sso_role

PostgreSQL 相关权限

权限明细

场景源端常见权限目标端常见权限补充说明
结构若涉及视图、函数、触发器等其他对象,建议 SUPERUSER若涉及 TABLESPACEFOREIGN KEYTYPE 等写权限,建议使用 DB Owner 或 SUPERUSER;若目标库不存在,还需 CREATEDB结构权限通常作为全量和增量任务的前置条件
全量USAGE on schema + SELECT on tables目标库读写权限;如需禁用触发器,PostgreSQL >= 15 需 GRANT SET ON PARAMETER session_replication_role,PostgreSQL < 15 需 SUPERUSER全量权限包含结构权限和全量数据权限
增量REPLICATION + DB OwnerSUPERUSER目标库读写权限;若目标库不存在,还需 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 DATABASESUPERUSER
源端增量双向复制创建 _nd_repl_ schema 和 nd_repl_de_cycle_v3DB Owner 或 CREATE ON DATABASE
源端增量开启 DDL 采集,执行 CREATE EVENT TRIGGER xxx;SUPERUSER
目标端全量写入并清空目标表SELECTINSERTTRUNCATE
目标端增量执行行级同步写入SELECTINSERTUPDATEDELETE

Sybase 相关权限

权限明细

场景源端常见权限目标端常见权限补充说明
全量SELECTSELECTINSERTDELETETRUNCATE适用于全量任务的基本 DML 权限
增量sa_role;双向复制创建额外 schema 时还需 sso_roleSELECTINSERTDELETETRUNCATE;禁用触发器时还需 replication_role双向复制和触发器控制场景需要额外角色权限

常见授权示例

-- 增量源端
GRANT sa_role TO {user_name};
GRANT sso_role TO {user_name};

-- 增量目标端
GRANT replication_role TO {user_name};

相关文档