31.7. 安全性 #
能够修改订阅端表模式的用户可以以超级用户身份执行任意代码。限制此类表的所有权和 TRIGGER 权限,仅授予超级用户信任的角色。此外,如果不受信任的用户可以创建表,则仅使用显式列出表的发布。也就是说,只有在超级用户信任发布端或订阅端上允许创建非临时表的每个用户时,才创建 FOR ALL TABLES 的订阅。
用于复制连接的角色必须具有 REPLICATION 属性(或为超级用户)。如果该角色既没有 SUPERUSER,也没有
BYPASSRLS,则发布端的行安全性策略可能会生效。如果该角色不信任所有表所有者,请在连接字符串中包含
options=-crow_security=off;这样一来,如果某个表所有者随后添加了行安全性策略,复制将停止,而不是执行该策略。该角色的访问权限必须在
pg_hba.conf 中配置,并且它还必须具有
LOGIN 属性。
复制连接所用输出插件的名称必须包含在服务器的 output_plugin_libraries 中。(对于订阅,所用插件名为
pgoutput。)超级用户可以在连接字符串中包含
options=-coutput_plugin_libraries=...,按连接修改受信任列表。
为了能够复制初始表数据,用于复制连接的角色必须对已发布的表具有
SELECT 权限(或者是超级用户)。
要创建发布,用户必须在数据库中具有 CREATE 权限。
要向发布添加表,用户必须对该表拥有所有权。要创建自动发布所有表的发布,用户必须是超级用户。
要创建订阅,用户必须是超级用户。
订阅应用进程将以超级用户的权限在本地数据库中运行。
权限只在复制连接开始时检查一次。不会在读取发布端的每条变更记录时重新检查,也不会在应用每条变更时重新检查。
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.