pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
通常,PL/Perl 作为一个名为 plperl 的“受信任”编程 语言安装。在这种设置下, 某些 Perl 操作被禁用以保障 安全。一般来说, 受限制的是那些与环境 交互的操作。这包括文件句柄操作、 require 和 use(用于 外部模块)。没有办法访问 数据库后端进程的内部,也无法以 PostgreSQL 用户 ID 的权限获得 OS 级访问——而 C 函数 可以做到。因此,任何非特权数据库 用户都可以被允许使用这种 语言。
下面是一个由于安全原因不允许文件系统 操作而不能工作的函数例子:
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 语言创建的, 执行就会成功。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。