简体   繁体   中英

ERROR: permission denied for language c

When creating a function like this with a non-super user I am getting the error below:

ERROR: permission denied for language c SQL state: 42501

The function created is:

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

But if I wanted to give permission on language C to my non-super user, I am getting the error below: postgres=# grant usage on language c to caixa; ERROR: language "c" is not trusted postgres=# grant usage on language c to caixa; ERROR: language "c" is not trusted

That means, non-super user can't create function with language C? or is there anything else I am doing wrong?

That's right, according to doc :

Only superusers can create functions in untrusted languages

Quick check:

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

If you really want this, then you could modify pg_language system catalog ( ALTER LANGUAGE doesn't have such option):

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

Per user @Otheus below: the UPDATE statement must be done in the DB where the function will reside.

Instead of setting the language to trusted which is considered bad , and dangerous , you should rather use roles to provide superuser privilege temporarily to the user during the time he manipulates the stored procedures:

as superuser:

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

then logged-in as user you can set role dba

And then you could create stored procedures in C while you temporarily have the role dba .

reset role; when you're finished to come back to normal rights.

More info here: https://dba.stackexchange.com/questions/37336/cannot-create-function-in-plpython3u-permission-denied

In my case for uuid functions in RDS postgres 12.5. All I had to do is:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp';

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM