根据文档:
PL / Python仅作为一种“不受信任的”语言提供,这意味着它不提供任何限制用户可以执行的操作的方式,因此被称为plpythonu。如果在Python中开发了安全的执行机制,则将来可能会使用受信任的变体plpython。
为什么要为Python开发安全的执行机制而不是为Perl这样的其他语言开发安全的执行机制到底为什么呢?
根据文档:
PL / Python仅作为一种“不受信任的”语言提供,这意味着它不提供任何限制用户可以执行的操作的方式,因此被称为plpythonu。如果在Python中开发了安全的执行机制,则将来可能会使用受信任的变体plpython。
为什么要为Python开发安全的执行机制而不是为Perl这样的其他语言开发安全的执行机制到底为什么呢?
Answers:
这与Python的对象模型有关-总是有一种方法来获取对可能不安全的对象的引用。有关问题的一些信息,请参见rexec模块文档和文档的受限执行一章,以及:
限制与PostgreSQL本身无关,它们是CPython解释器实现甚至Python语言本身的固有属性。
其他一些语言也检查了运行时,例如Perl,Java,JavaScript和Lua。他们中的大多数人都面临一系列安全问题,因为这样的受限执行环境很难防范所有可能的越狱攻击。
确实没有什么可以阻止PostgreSQL添加半信任的Python解释器的,因为rexec对于许多用途来说“足够好”。PostgreSQL可能并不总是只热衷于某种程度的好。只有标记为“仅超级用户”,它才可能被接受,但是您始终可以向特定用户授予对其的访问权限。它将比不受信任的Python更好。
我个人认为PL / V8或类似产品在这里是未来,并且希望看到它朝着核心支持的方向发展。
我还模糊地探讨了一种可信任的Mono的想法,该想法可以加载用C#,VB.NET,IronPython或其他任何编写的“安全”程序集,但在该主题上却无能为力。
rexec
模块固有的不安全性而被弃用(如上链接),因此将其删除。我想也许使用PyPi的plpython可能能够提供Pg随后可以使用的受限模式。我没有看是否有很多工作。您也对“ Perl的特殊受信任版本”不正确-实际上这是完全普通的Perl,对于plperl和plperlu使用相同的解释器。区别在于运行时配置。