他のバージョンの文書11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

21.4. 信頼された PL/Per および信頼されない PL/Perl

通常、PL/Perl は plperl という名前で "信頼された"プログラミング言語としてインストールされます。この設定では、セキュリティを確保するために、Perl の特定の操作は無効にされます。一般的には、制限される操作はその環境に作用するものです。これには、ファイルハンドル操作や requireuse(外部モジュール用) が含まれます。 C 関数では可能ですが、Perl では、データベースのバックエンド内部にアクセスする方法や、PostgreSQL ユーザ ID 権限による OS レベルのアクセスを行う方法はありません。 この結果、データベースの全ての非特権ユーザはこの言語を使用することができます。

セキュリティ上の理由により許されていないファイルシステム操作を行うため、うまく動作しない関数の例を以下に示します。

CREATE FUNCTION badfunc() RETURNS integer AS '
    open(TEMP, ">/tmp/badfile");
    print TEMP "Gotcha!\n";
    return 1;
' LANGUAGE plperl;

関数を作成することは成功しますが、実行させることはできません。

制限のない Perl 関数の作成が望ましい場合があります。 例えば、Perl 関数を使用してメールを送信するような場合です。 このような場合を扱うために、PL/Perl を"信頼されない"言語として (通常 PL/PerlU と呼ばれます) インストールすることもできます。この場合は完全なPerl言語を使用することができます。 createlang プログラムが言語のインストールに使用された場合、plperlu という言語名によって、信頼されない PL/Perl のバリアントが選択されます。

PL/PerlU 関数の作成者は、その関数を不必要なことに使用できないように注意する必要があります。この関数は、データベース管理者としてログインしたユーザが実行できることをすべて実行できるからです。データベースシステムはデータベースのスーパユーザにのみ信頼されない言語による関数作成を許可していることに注意して下さい。

上記の関数が、スーパユーザによって plperlu 言語を使用して作成された場合、実行は可能となります。