PostgreSQL: запуск хранимых процедур Python от имени обычного пользователя - PullRequest
7 голосов
/ 17 мая 2010

Я установил PL / Python на свой сервер postgresql в postgres привилегии:

netherlands=# CREATE PROCEDURAL LANGUAGE plpythonu;
CREATE LANGUAGE      

Теперь мне нужно предоставить разрешения, чтобы я мог использовать его как обычный пользователь:

netherlands=# GRANT ALL ON LANGUAGE plpythonu TO adam;
ERROR:  language "plpythonu" is not trusted
HINT:  Only superusers can use untrusted languages.

Я знаю, что python не является «доверенным» языком, но я готов рискнуть здесь. Есть ли способ убедить PostgreSQL разрешить мне запускать хранимые процедуры Python от имени обычного пользователя?

Ответы [ 3 ]

9 голосов
/ 17 мая 2012
UPDATE pg_language SET lanpltrusted = true WHERE lanname = 'plpythonu';
1 голос
/ 17 мая 2010

GRANT [USAGE] для языков означает, что рассматриваемый пользователь может создавать функции на этом языке. После создания вы должны использовать GRANT EXECUTE, чтобы позволить другим пользователям использовать их.

postgres@dev:~$ psql
Welcome to psql 8.3.9, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

postgres=# \c plpythonu_test
You are now connected to database "plpythonu_test".
plpythonu_test=# create language plpythonu;
CREATE LANGUAGE
plpythonu_test=# CREATE FUNCTION pymax (a integer, b integer)
plpythonu_test-#   RETURNS integer
plpythonu_test-# AS $$
plpythonu_test$#   if a > b:
plpythonu_test$#     return a
plpythonu_test$#   return b
plpythonu_test$# $$ LANGUAGE plpythonu;
CREATE FUNCTION
plpythonu_test=# grant execute on function pymax (a integer, b integer) to plpythonu_test;
GRANT
plpythonu_test=#



C:\Users\milen>psql.exe -U plpythonu_test -h ...
Password for user plpythonu_test:
psql (8.4.4, server 8.3.9)
WARNING: psql version 8.4, server version 8.3.
         Some psql features might not work.
WARNING: Console code page (866) differs from Windows code page (1251)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

plpythonu_test=> select pymax(1,2);
 pymax
-------
     2
(1 row)


plpythonu_test=>
1 голос
/ 17 мая 2010

К сожалению, я не верю, что можно запускать ненадежных переводчиков, если у вашей учетной записи postgres нет прав суперпользователя. Если вы являетесь администратором сервера баз данных, createuser спросит вас, должна ли новая учетная запись быть суперпользователем.

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

Если вы не можете работать от имени пользователя postgres или создать учетную запись суперпользователя, я боюсь, что вам придется пропустить pl / python и предложить вместо этого проверить pl / pgsql. http://www.postgresql.org/docs/8.3/interactive/plpgsql.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...