ОШИБКА: отказано в разрешении для языка c - PullRequest
27 голосов
/ 10 августа 2011

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

ERROR: permission denied for language c SQL state: 42501

Созданная функция:

CREATE OR REPLACE FUNCTION dblink_connect (text)
RETURNS text
AS '$libdir/dblink','dblink_connect'
LANGUAGE C STRICT;

Но если я хочу дать разрешение на языке C моему не суперпользователю, я получаю ошибку ниже: postgres=# grant usage on language c to caixa; ERROR: language "c" is not trusted

Это означает, что не суперпользователь не может создать функцию с языком C?или что-то еще я делаю не так?

Ответы [ 2 ]

34 голосов
/ 10 августа 2011

Это верно, согласно doc :

Только суперпользователи могут создавать функций на ненадежных языках

Быстрая проверка:

SELECT lanpltrusted FROM pg_language WHERE lanname LIKE 'c';
 lanpltrusted 
--------------
 f
(1 row)

Если вы действительно хотите этого, то вы можете изменить системный каталог pg_language (ALTER LANGUAGE такой опции не имеет):

UPDATE pg_language SET lanpltrusted = true WHERE lanname LIKE 'c';

Для пользователя @Otheus ниже: оператор UPDATE должен выполняться в БД, где будет находиться функция.

15 голосов
/ 22 марта 2013

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

как суперпользователь:

create role dba with superuser noinherit;
grant dba to user;

, затем войдите в систему как пользователь, которого вы можете set role dba

И затем вы можете создавать хранимые процедуры в C, пока у вас временнороль dba.

reset role;, когда вы закончите, чтобы вернуться к нормальным правам.

Подробнее здесь: https://dba.stackexchange.com/questions/37336/cannot-create-function-in-plpython3u-permission-denied

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