能够修改订阅端表结构的用户可以作为拥有修改这些表的订阅的角色执行任意代码。限制这些表的所有权和TRIGGER
权限只给受信任的角色。
此外,如果不受信任的用户可以创建表,请仅使用明确列出表的publication。也就是说,在超级用户信任每个被允许在发布者或订阅者上创建非临时表的用户时,才创建FOR ALL TABLES
或FOR TABLES IN SCHEMA
的订阅。
用于复制连接的角色必须具有REPLICATION
属性(或者是超级用户)。
如果角色缺少SUPERUSER
和 BYPASSRLS
,发布者的行安全策略可以执行。
如果角色不信任全部表所有者,则在连接字符串中包含options=-crow_security=off
;如果表所有者随后添加行安全策略,则该设置将导致复制中断,而不是执行该策略。
角色的访问权限必须在pg_hba.conf
中配置,并且必须具有LOGIN
属性。
为了能够拷贝初始表数据,用于复制连接的角色必须在被发布的表上具有SELECT
特权(或者是一个超级用户)。
要创建发布,用户必须在数据库中有CREATE
特权。
要向publication添加表格,用户必须对表格拥有所有权。要向publication添加模式中的所有表格, 用户必须是超级用户。要创建一个自动发布所有表格或模式中所有表格的publication, 用户必须是超级用户。
要创建订阅,用户必须是一个超级用户。
订阅申请流程将在本地数据库中以订阅所有者的权限运行。
在发布者端,权限仅在复制连接开始时检查一次,并且在读取每个更改记录时不会重新检查。
在订阅者端,每次应用时都会重新检查订阅所有者的特权。如果一个工作者正在应用事务时, 订阅的所有权被并发事务更改,当前事务的应用将在旧所有者的特权下继续。