PostgreSQL 受信任語言列表?
我正在嘗試查找 PostgreSQL受信任的過程語言 (PL) 列表,因為我經常需要在非超級使用者環境中使用 PL。
但我找不到明確的答案。例如,這裡的 Postgres 文件表明 perl 既有受信任的 PL 也有不受信任的 PL,我不太熟悉這種語言。在這裡,它說
TRUSTED
關鍵字是您可以在創建 PL 語言時指定的內容,在某些情況下可能會被忽略。但我也有(可能是錯誤的)印象,即某些 PL 語言僅受信任(例如 JavaScript PL/V8)或僅不受信任(Python)。其他文章似乎建議人們可以調整 pg 以使其成為
python
一種受信任的語言,例如:UPDATE pg_language SET lanpltrusted = true WHERE lanname = 'plpythonu';
我的問題比理論更實際。基本上:
任何 PL 都可以設置為受信任和不受信任,這通常是真的嗎?
如果不是,可以設置為受信任或受信任的特定語言是什麼。
(“受信任”是指普通使用者在使用 PL 語言創建/執行/修改函式時應該擁有相同的權限。另外,我使用的是 Postgres 9.x)
任何 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,或者更好的是,通過 Mono 或 .NET Core 為 .NET 採用 PL/C#)。