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