PostgreSQL: Под управлением хранимые процедуры Python как обычный пользователь

Я установил МН / 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 как обычному пользователю?

7
задан Stephane Rolland 21 March 2013 в 22:22
поделиться

2 ответа

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

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

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

1
ответ дан 6 December 2019 в 23:02
поделиться

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
ответ дан 6 December 2019 в 23:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: