历史版本。 PostgreSQL 7.0 已结束支持。 请参阅 当前版本手册.
28.4. 函数和规则
函数和规则允许用户把代码插入到后端服务器中,而其他用户可能在不知情的情况下执行这些代码。因此,这两种机制都允许用户特洛伊木马攻击他人而相对不受惩罚。唯一真正的保护是严格控制谁能定义函数(例如,向带 SQL 字段的关系写入)和规则。也建议在pg_class、pg_user
和pg_group上建立审计追踪和告警器。
28.4.1. 函数
除 SQL 之外的语言编写的函数都在后端服务器进程内部以用户postgres的权限运行(后端服务器以其真实和有效用户 id 都设置为
postgres的方式运行。用户有可能从受信任的函数内部更改服务器的内部数据结构。因此,除许多其他事情外,这样的函数可以绕过任何系统访问控制。这是用户定义 C 函数固有的问题。
28.4.2. 规则
与 SQL 函数一样,规则总是以调用后端服务器的用户的身份和权限运行。
28.4.3. 注意事项
目前没有在Postgres内部显式支持加密数据的计划(不过没有什么能阻止用户在用户定义的函数内加密数据)。在前端/后端协议完全重写之前,也没有显式支持加密网络连接的计划。
用户名、组名和相关系统标识符(例如
pg_user.usesysid的内容)被假定在整个数据库中唯一。如果不是这样,可能出现不可预测的结果。