pg에서 db 생성은 template1이라는 표준 시스템 db를 복사해서 만든다.
따라서 우리가 template1에 대한 권한을 특정 role에 부여를 하면 앞으로도 새로 db가 생성될 때 해당 role이 권한을 행사할 수 있게 되는 것이다.
\c template1
-- public 스키마 사용 권한
GRANT USAGE ON SCHEMA public TO monitoring_user;
-- 기존 테이블/시퀀스에 대한 SELECT 권한
GRANT SELECT ON ALL TABLES IN SCHEMA public TO monitoring_user;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO monitoring_user;
-- 향후 생성될 객체에 대한 기본 권한 설정
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public
GRANT SELECT ON TABLES TO monitoring_user;
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public
GRANT SELECT ON SEQUENCES TO monitoring_user;
즉 이런 식으로 우리가 monitoring_user 라는 role을 만들고 앞으로 생성될 모든 db를 조회할 수 있는 권한을 부여하고 싶다면, template1에 설정을 해두면 된다. 앞으로 pg는 우리가 설정해둔 template1 db를 복사해서 db를 생성할 것이기에 권한이 전파가 되는 것이다.
우리가 설정해놓은 select grant는 postgres라는 role이 db를 생성했을 때만이라, 또 다른 role이 만들게 될 경우 적용이 되지 않는다. 따라서 또 다른 role이 있다면 추가해야한다.