函数和规则
函数和规则允许用户在其他用户可能不知道的情况下向后端服务器里插入代码。因此,两种机制都允许用户使用
特洛伊木马对付其他用户。唯一有效的保护措施是牢牢控制谁可以定义函数(即是向关系中写入
SQL 域)和规则。我们还建议在
pg_class,
pg_user 和
pg_group
上设置跟踪和警告器。
函数
用 SQL 以外的语言写的在后端服务器进程里运行的函数拥有用户
postgres
的权限(后端服务器带着设置为
postgres 的真实有效的用户标识运行。)用户有可能从一个被信任的函数里面修改服务器的内部数据结构。因此,除了别的问题外,这样的函数可以巧取任何系统访问控制。这是一个用户定义的
C 函数的固有毛病。
规则
就象 SQL 函数一样,规则总是以激活后端服务器的用户的标识和权限运行。
注意事项
我们没有计划准备显式地支持
Postgres
内部数据的加密(当然我们无法阻止用户在用户定义函数里对数据进行加密)。我们也没有计划准备显式地支持加密的网络联接,那样将导致前/后端协议的完全重写。
用户名,组名和相关系统标识(比如,pg_user.usesysid 的内容)都是假设在整个数据库里唯一的。如果不是这样,会造成不可预料的结果。