PostgreSQL 8.4에서 트리거 기능을 실행하는 데 필요한 권한은 무엇입니까?


11

PostgreSQL 8.4에서 트리거 기능을 실행하는 데 필요한 권한은 무엇입니까?

역할로 설정된 권한은 트리거 기능을 실행하는 데 중요하지 않은 것 같습니다. 나는 언젠가 트리거 함수를 실행하는 데 필요한 권한이 EXECUTE 권한이지만 테이블 소유자에게는 트리거 기능을 호출하는 트리거를 발생시키는 작업을 수행하는 실제 역할이 아니라는 것을 알았습니다.

그 요점을 설명하는 문서 부분을 찾을 수 없습니다.

답변:


10

트리거 기능은 특권에 관한 한 다른 기능과 동일하게 작동합니다. 사소한 예외가 있습니다 :

테이블에서 트리거를 작성하려면 사용자에게 테이블에 대한 TRIGGER 권한이 있어야합니다. 또한 사용자는 EXECUTE트리거 기능에 대한 권한이 있어야합니다 .

업데이트 의견에 대한 피드백을 얻은 후 조사했습니다. Postgres Wiki 에는 오픈 TODO 아이템 이 있습니다 :

트리거 권한 검사 강화

Postgres 해커의이 스레드에 연결되었습니다 . 현재 EXECUTE트리거 기능에 대한 권한은 트리거 생성 시 에만 확인 되지만 런타임에는 확인되지 않습니다. 따라서 트리거 기능에서 EXECUTE를 취소해도 한 번 생성 된 트리거에는 영향을 미치지 않습니다. 당신의 관찰은 올바른 것 같습니다.

이것은 객체를 조작 할 수있는 추가 권한을 부여하지 않습니다. 호출 역할에 기능 본문 (일부)을 실행하는 데 필요한 권한이 없으면 일반적인 예외가 발생합니다. 길을 개척하기 위해 권한을 가진 사용자 OWNER를 만들고 기능을 사용할 수 있습니다.

SECURITY DEFINER

절로서 여기 매뉴얼에 문서화 . 호출자 대신 소유자 의 권한으로 함수가 실행되도록합니다 (기본값).

소유자가 수퍼 유저 인 경우 EXECUTE권한 을 부여한 사람 과 남용을 피하기 위해 기능이 수행 할 수있는 작업에 대해 특히 주의해야합니다 . 당신은 할 수 있습니다

REVOKE ALL ON FUNCTION foo() FROM public;

기능을 시작하고 사용 SET search_path합니다. 안전하게 함수 작성에
관한 장을 읽으십시오 .SECURITY DEFINER

SO 관련 답변에서 코드 예제를 찾으십시오 .


아니, 내가 원하지 않는 SECURITY DEFINER내가 원하는, SECURITY INVOKER. 그러나 기본 옵션 ( SECURITY INVOKER) 을 사용하면 (정상 기능이 아닌 트리거 기능의 경우 ) 그렇게 작동하지 않는 것 같습니다.

1
@EtienneRouxel : 트리거 함수는 권한에 관한 한 다른 함수와 같은 함수입니다. 당신이 다르게 생각하게 만드는 것은 무엇입니까?
Erwin Brandstetter

@EtienneRouxel : 사소한 예외를 문서화하기 위해 매뉴얼에 견적을 추가했습니다.
Erwin Brandstetter

1
테스트 :을 발생시키는 간단한 트리거 함수를 만들었습니다 NOTICE. 함수 소유자와 ALL권한을 제거했습니다 PUBLIC. 그런 다음 소유자 또는 해당 기능에 대한 권한이없는 다른 역할을 사용하는 경우 권한 부족으로 인해 오류가 발생하지만 모든 것이 성공적으로 실행됩니다.

2
@EtienneRouxel : 흥미 롭습니다. 나는 또한 테스트했다. 트리거 기능에 대한 실행 권한이 없으면 트리거를 작성할 수 없습니다. 그러나 트리거를 생성 한 후에도 해당 실행 권한을 취소 할 수 있으며 트리거가 작동을 멈추지 않습니다. 나는 약간의 연구를했다. 질문에 대한 링크 추가 ...
Erwin Brandstetter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.