根据文档:
PL/Python 仅作为“不受信任”的语言提供,这意味着它不提供任何方式来限制用户可以在其中执行的操作,因此被命名为 plpythonu。如果在 Python 中开发了一种安全的执行机制,那么未来可能会出现一个受信任的变体 plpython。
为什么要为 Python 开发安全的执行机制却很难为其他语言(例如 Perl)开发安全执行机制?
根据文档:
PL/Python 仅作为“不受信任”的语言提供,这意味着它不提供任何方式来限制用户可以在其中执行的操作,因此被命名为 plpythonu。如果在 Python 中开发了一种安全的执行机制,那么未来可能会出现一个受信任的变体 plpython。
为什么要为 Python 开发安全的执行机制却很难为其他语言(例如 Perl)开发安全执行机制?
这与 Python 的对象模型有关——总有一种方法可以获取对可能不安全的对象的引用。有关问题的一些信息,请参阅rexec 模块文档和文档的受限执行章节,以及:
这些限制与 PostgreSQL 本身没有任何关系,它们是 CPython 解释器实现所固有的,甚至可能是 Python 语言本身所固有的。
其他一些语言已经检查了运行时,例如 Perl、Java、JavaScript 和 Lua。他们中的大多数人都面临着一系列安全问题,因为这种受限的执行环境很难防范所有可能的越狱漏洞。
没有什么能阻止 PostgreSQL 添加一个半可信的 Python 解释器,因为 rexec 对于许多用途来说“足够好”。不过,PostgreSQL 并不倾向于只热衷于大多数情况下可能还不错。如果标记为仅限超级用户,它可能只会被接受,但您始终可以为特定用户授予对它的访问权限。它会比不受信任的 Python 更好。
我个人认为 PL/V8 或类似的东西是这里的未来,并希望看到它在核心中得到支持。
我还模糊地探索了一个受信任的 Mono 的想法,它可以加载用 C#、VB.NET、IronPython 或其他任何东西编写的“安全”程序集,但在该主题上还没有做太多事情。