PostgreSQL 可信语言列表?

tin*_*lyx 4 postgresql security functions postgresql-extensions

我正在尝试查找 PostgreSQL可信过程语言 (PL)的列表,因为我经常需要在非超级用户环境中使用 PL。

但我找不到确切的答案。例如,这里Postgres 文档表明 perl 有一个受信任和一个不受信任的 PL,这是一种我不太熟悉的语言。这里,它说TRUSTED关键字是您在创建 PL 语言时可以指定的内容,在某些情况下可能会被忽略。

但我也有(可能是错误的)印象,即某些 PL 语言仅受信任(例如 JavaScript PL/V8)或仅不受信任(Python)。其他帖子似乎表明可以调整 pg 以使用以下内容制作甚至是python一种可信赖的语言:

UPDATE pg_language SET lanpltrusted = true WHERE lanname = 'plpythonu';
Run Code Online (Sandbox Code Playgroud)

我的问题比理论更实际。基本上:

是否可以将任何 PL 设置为可信和不可信?

如果不是,可以设置为受信任或受信任的特定语言是什么。

“受信任”是指普通用户在 PL 语言中创建/执行/修改函数时应该具有有效的相同权限。另外,我使用的是 Postgres 9.x)

Cra*_*ger 8

是否可以将任何 PL 设置为可信和不可信?

不。任何 PL 都可以标记为受信任或不受信任,但是如果您将一个不支持以受信任方式运行的 PL 停放,它会注意到这一点,ERROR或者它会在没有沙箱的情况下静默运行,就好像它不受信任一样。

不要直接修改目录。

如果不是,可以设置为受信任或受信任的特定语言是什么。

就这些,

  • PL/PgSQL 作为可信运行。
  • PL/Perl 可以作为受信任或不受信任的方式运行。
  • PL/TCL 可以作为受信任或不受信任运行。

这就是内置 PL。值得注意的是,由于CPython 解释器的基本设计限制使得无法创建受限制的执行环境,PL/Python 无法以可信方式运行。可以创建一个“受信任的”Python 运行时,在其中攻击者可以免受简单错误的影响,但可以通过努力突破沙箱,但 PL/Python 不支持此功能,也没有任何补丁使其可能被接受.

还有一堆树外过程语言,其中一些支持可信模式。值得注意的是,PL/V8 (JavaScript)、PL/Lua 和 PL/Java 支持可信模式。可能还有其他人。

(顺便说一句,我真的很想看到采用内核中启用了受信任的 PL/Javascript 作为默认内核 PL,或者甚至更好,PL/C# 通过 Mono 或 .NET Core 用于 .NET)。

  • 这里有一个 [矩阵](https://wiki.postgresql.org/wiki/PL_Matrix)。我定义 +1 制作 pl/v8 核心 pl。 (2认同)
  • 是的,通过 Mono 或 .NET Core 实现 .NET 的 PL/C# 会很棒! (2认同)