×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

5.8.5. Доверенный и недоверенный PL/Perl

Обычно PL/Perl устанавливается как «доверенный» программирования под названием plperl. В данной конфигурации определенные операции Perl отключены в целях обеспечения безопасности. Как правило, ограничиваются операции, взаимодействующие с внешней средой. К ним относятся операции с дескрипторами файлов, require, и использования (для внешних модулей). Использование этого языка не позволяет получить доступ к внутренним структурам серверного процесса базы данных или получить доступ на уровне ОС с правами серверного процесса, как это позволяют функции на языке C. Таким образом, использование данного языка может быть разрешено любому непривилегированному пользователю базы данных.

Предупреждение

Доверенный PL/Perl опирается на модуль Perl Opcode для обеспечения безопасности. В документации Perl отмечается, что данный модуль недостаточно эффективен для сценария использования доверенного PL/Perl. Если требования безопасности несовместимы с неопределенностью, указанной в данном предупреждении, следует рассмотреть возможность выполнения команды REVOKE USAGE ON LANGUAGE plperl FROM PUBLIC.

Ниже приведен пример функции, работа которой невозможна, поскольку операции с файловой системой запрещены из соображений безопасности:

CREATE FUNCTION badfunc() RETURNS integer AS $$
    my $tmpfile = "/tmp/badfile";
    open my $fh, '>', $tmpfile
        or elog(ERROR, qq{could not open the file "$tmpfile": $!});
    print $fh "Testing writing to a file\n";
    close $fh or elog(ERROR, qq{could not close the file "$tmpfile": $!});
    return 1;
$$ конструкция LANGUAGE plperl;

Создание этой функции завершится ошибкой, так как использование запрещенной операции будет обнаружено механизмом проверки.

Иногда возникает необходимость в написании Perl-функций без подобных ограничений. Например, может потребоваться функция на языке Perl для отправки электронной почты. Для таких случаев PL/Perl также может быть установлен как «untrusted» язык (обычно называемый PL/PerlU). В данном случае доступен полный набор возможностей языка Perl. При установке процедурного языка его имя plperlu выберет недоверенный вариант языка PL/Perl.

Разработчик PL/PerlU функции должен позаботиться о том, чтобы эту функцию нельзя было использовать для совершения каких-либо нежелательных действий, поскольку она сможет выполнять любые операции, доступные пользователю, вошедшему в систему с правами администратора базы данных. Обратите внимание, что система баз данных разрешает создавать функции на недоверенных языках только суперпользователям базы данных.

Если бы вышеуказанная функция была создана суперпользователем с использованием языка plperlu, выполнение прошло бы успешно.

Таким же образом анонимные блоки кода, написанные на языке Perl, могут использовать ограниченные операции, если в качестве языка указан plperlu , а не plperl, но вызывающий пользователь должен иметь права суперпользователя.

Примечание

В то время как PL/Perl функции выполняются в отдельном интерпретаторе Perl для каждой SQL-роли, все PL/PerlU функции, выполняемые в рамках данного сеанса, запускаются в одном интерпретаторе Perl (который не совпадает ни с одним из тех, что используются для PL/Perl функций). Это позволяет PL/PerlU функциям свободно обмениваться данными, однако взаимодействие невозможно между PL/Perl и PL/PerlU функциями.

Примечание

Интерпретатор Perl не поддерживает несколько интерпретаторов в рамках одного процесса, если только он не был собран с соответствующими флагами, а именно либо usemultiplicity или useithreads. (usemultiplicity является предпочтительным, если только не требуется использование потоков. Для получения дополнительных сведений см. perlembed страницу руководства man.) Если PL/Perl используется с копией Perl, которая не была собрана таким образом, то в рамках одного сеанса возможен только один интерпретатор Perl, и, следовательно, в любом сеансе могут выполняться либо PL/PerlU функции, либо PL/Perl функции, которые вызываются одной и той же SQL-ролью.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению