ドキュメントによると:
PL / Pythonは「信頼されていない」言語としてのみ利用可能です。つまり、ユーザーが実行できることを制限する方法が提供されていないため、plpythonuという名前が付けられます。セキュアな実行メカニズムがPythonで開発された場合、信頼できるバリアントplpythonが将来的に利用可能になる可能性があります。
Python用の安全な実行メカニズムを開発するのが難しいのに、Perlなどの他の言語用ではないのはなぜですか?
ドキュメントによると:
PL / Pythonは「信頼されていない」言語としてのみ利用可能です。つまり、ユーザーが実行できることを制限する方法が提供されていないため、plpythonuという名前が付けられます。セキュアな実行メカニズムがPythonで開発された場合、信頼できるバリアントplpythonが将来的に利用可能になる可能性があります。
Python用の安全な実行メカニズムを開発するのが難しいのに、Perlなどの他の言語用ではないのはなぜですか?
回答:
これは、Pythonのオブジェクトモデルに関連しています。安全ではない可能性があるオブジェクトへの参照を取得する方法は常にあります。問題に関するいくつかの情報については、rexecモジュールのドキュメントとドキュメントの制限付き実行の章を参照してください。
制限はPostgreSQL自体とは何の関係もありません。CPythonインタープリター実装に固有であり、Python言語自体にも固有のものです。
他のいくつかの言語は、Perl、Java、JavaScript、Luaなどのランタイムをチェックしています。それらのほとんどは一連のセキュリティ問題に直面しています。そのような制限された実行環境は、起こり得るすべての脱獄攻撃から保護することが非常に難しいためです。
rexecは多くの目的で「十分」であるので、PostgreSQLが半信頼できるPythonインタープリターを追加するのを妨げるものは何もありません。ただし、PostgreSQLは、ほとんどの場合に限っては十分ではないかもしれません。おそらく、スーパーユーザーのみとマークされている場合にのみ受け入れられますが、特定のユーザーに常にアクセスを許可することができます。信頼されていないPythonよりも優れています。
個人的には、ここではPL / V8などが未来だと思います。コアでサポートされるようになるのを期待しています。
また、C#、VB.NET、IronPythonなどで記述された「安全な」アセンブリをロードできる、信頼できるMonoのアイデアを漠然と調査しましたが、そのトピックについてはあまり実行できませんでした。
rexec
、上記のリンクのように、本質的に安全ではないため、Python モジュールが非推奨になった後に削除されました。PyPiを使用するplpythonが、Pgが使用できる制限付きモードを提供できる可能性があると思います。仕事がたくさんあるかどうか見たことがありません。あなたは「Perlの特別な信頼できるバージョン」についても正しくありません-それは実際には完全に普通のPerlであり、同じインタプリタがplperlとplperluに使用されています。違いはランタイム構成です。