PostgreSQL 행 수준 보안에서 SECURITY DEFINER 함수를 사용하여 순환 종속성 해결하기
PostgreSQL의 행 수준 보안은 멀티 테넌트 애플리케이션에 매우 유용한 기능 중 하나입니다. 아이디어는 간단합니다. 테이블에 정책을 정의하여 특정 사용자가 어떤 행을 보거나 수정할 수 있는지 PostgreSQL에 알려주고, 데이터베이스 엔진은 어떤 애플리케이션 코드가 요청을 했는지에 관계없이 모든 쿼리에서 이를 강제합니다.문제는 정책이 순환을 형성할 때 발생합니다. 이는 생각보다 흔하며, PostgreSQL에서 가장 혼란스러운 실패 모드 중 하나를 생성합니다. 즉, 데이터를 반환해야 하는 쿼리가 오류 없이 아무것도 반환하지 않는 것입니다.