文档中心>消息队列 CKafka 版>通用参考>连接器>数据库变更订阅>连接器订阅 PostgreSQL 时用户权限设置参考

连接器订阅 PostgreSQL 时用户权限设置参考

最近更新时间:2022-11-25 15:39:00

我的收藏

背景

在使用 CKafka 连接器订阅 Postgresql 数据库时,需要给 连接管理 中配置的 PostgreSQL 用户分配相应的权限。只有拥有相应权限的用户从被允许的主机访问数据库时,才能够进行消息的同步。
本文从用户权限设置以及主机访问权限设置两方面进行说明。

用户权限设置

权限赋予是分 decode 插件的,不同插件需要的权限不一样。

使用 decoderbufs 插件时用户权限设置

通过超级用户登录 PostgreSQL,新建一个角色,给角色赋予至少 REPLICATIONLOGIN 两种权限。
赋予权限:
CREATE ROLE userName REPLICATION LOGIN;
说明
超级用户默认拥有必要的权限,如果是超级用户,大部分无需赋予上面权限。但出于安全考虑不建议使用超级用户。

使用 pgoutput 插件时用户权限设置

注意
pgoutput 插件需要连接管理配置的用户拥有超级用户权限。
第一步: 验证用户是否拥有超级用户权限
// 登录postgresql,执行 \\du 命令查看用户权限
postgres=# \\du
Role name | List of roles Attributes
admin | Superuser
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS
slave | Replication

// 如果配置的用户不包含 Superuser 权限,需要进行授权
postgres=# ALTER USER userName WITH SUPERUSER;
第二步: 用户拥有超级用户权限后,按照以下步骤进行授权 connector pgoutput插件通过订阅 postgresql 节点上的 publication 来获取变更事件,您可以在启动 connector 前手动创建 publication,也可以授予配置的用户创建 publication 的权限。 赋予用户以下权限:ReplicationCREATESELECT
CREATE ROLE userName REPLICATION LOGIN;

GRANT CREATE ON DATABASE databaseName TO userName;

GRANT SELECT ON TABLE tableName TO userName;
连接管理中配置的用户需要拥有订阅的表的所有者权限,可通过以下方式授予用户表的所有者权限:
1. 创建 replication group。
CREATE ROLE <replication_group>;
2. 将表的所有者加入到 replication group。
GRANT REPLICATION_GROUP TO <original_owner>;
3. 将 connector 用户添加到 replication group。
GRANT REPLICATION_GROUP TO <replication_user>;
4. 将表的所有者权限转移到 replication group。
ALTER TABLE <table_name> OWNER TO REPLICATION_GROUP;

主机访问权限设置(自建集群需要配置)

您需要配置数据库允许 connector 的主机访问,通过配置 pg_hba.conf 文件来设置相应的策略, pg_hba.conf 详细介绍可参见 pg_hba.conf。配置文件格式如下:
host databaseName userName 11.163.0.0/16 md5
host databaseName userName 11.163.0.0/16 trust