programing

오류: 언어 c에 대한 사용 권한이 거부되었습니다.

minimums 2023. 11. 4. 10:32
반응형

오류: 언어 c에 대한 사용 권한이 거부되었습니다.

슈퍼 유저가 아닌 사용자로 이와 같은 기능을 만들 때 아래와 같은 오류가 나타납니다.

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 언어로 기능을 만들 수 없는 것입니까? 아니면 제가 잘못하고 있는 것이 있습니까?

문서에 의하면 그렇습니다.

슈퍼유저만 신뢰할 수 없는 언어로 함수를 만들 수 있습니다.

빠른 확인:

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 문은 함수가 위치할 DB에서 수행해야 합니다.

언어를 나쁘고 위험한 신뢰할 수 있는 것으로 설정하는 대신 역할을 사용하여 사용자가 저장 프로시저를 조작하는 동안 슈퍼유저 권한을 일시적으로 제공해야 합니다.

슈퍼유저로서:

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

RDS 포스트그레스 12.5의 uuid 함수에 대한 나의 경우.제가 해야 할 일은

CREATE EXTENSION IF NOT EXISTS "uuid-ossp';

아마도 제 답변은 관련 주제를 다루는 사람에게 도움이 될 것입니다.

한 프로젝트에서 다른 프로젝트로 DB를 이동하는 동안 함수를 다시 만들고 복구하려고 했습니다.uuid_generate_v1GCP Postres 설치 시:

CREATE OR REPLACE FUNCTION public.uuid_generate_v1()
 RETURNS uuid
 LANGUAGE c
 PARALLEL SAFE STRICT
AS '$libdir/uuid-ossp', $function$uuid_generate_v1$function$;

문제와 같은 오류로 실패한 것입니다.ERROR: language "c" is not trusted.

GCP가 Postgres에 대한 슈퍼유저 액세스를 제공하지 않기 때문에 제공된 답변을 사용할 수 없었습니다.하지만 누군가에게 도움이 될 수 있는 방법을 찾았습니다.

이 기능은 다른 기능들과 마찬가지로 나타났습니다 (uuid_generate_v1mc,uuid_generate_v3,uuid_generate_v4,uuid_generate_v5,uuid_nil,uuid_ns_dns,uuid_ns_oid,uuid_ns_url,uuid_ns_x500)와 함께 제공됩니다.uuid-ossp내선그래서 필요한 모든 기능을 제공하는 확장 기능을 만들었을 뿐입니다.

CREATE EXTENSION "uuid-ossp";

언급URL : https://stackoverflow.com/questions/7014437/error-permission-denied-for-language-c

반응형