函数、触发器和行级安全策略允许用户将代码插入到后端服务器中,其他用户可能会无意中执行。
因此,这些机制允许用户相对容易地“特洛伊木马”其他用户。最强大的保护方式是:允许哪些角色可以定义对象,进行严格控制。
如果这是不可行的,那么编写查询时只引用具有受信任所有者的对象。从search_path
中删除任何允许不受信任用户创建对象的模式。
在后端服务器进程中运行的函数带有数据库服务器守护进程的操作系统权限。如果用于函数的编程语言允许非检查的内存访问,它就可能改变服务器的内部数据结构。因此,在很多其他事情中,这些函数可能绕开任何系统访问控制。允许这种访问的函数语言被认为是“不可信的”,并且PostgreSQL只允许超级用户创建用这些语言编写的函数。