Superuser 로 연결 금지
Default postgres 유저가 superuser — 모든 권한 체크 우회, DB drop 가능. 프로덕션 앱이 필요한 권한만 가진 least-privilege role 로 연결해야: 보통 앱 테이블에 SELECT, INSERT, UPDATE, DELETE, 그 이상 없음.
Role 과 grant
앱 role (app) 생성 + 특정 권한 grant. GRANT USAGE ON SCHEMA + GRANT SELECT, INSERT ON TABLE 사용. ALTER DEFAULT PRIVILEGES 가 나중에 만드는 테이블에 자동으로 같은 권한 grant.
Row-Level Security
RLS 가 multi-tenant 룰을 DB 자체로 push: "의사가 자기 환자만 봄", "유저가 자기 post 만 봄". 정책이 테이블에 attach; 그 테이블에 대한 모든 쿼리가 정책 투명하게 적용. Supabase 의 auth story 가 거의 전부 RLS 위에 세워짐.
SQL injection — 해결된 문제
파라미터화 쿼리 (드라이버 레벨) 가 injection 구조적으로 불가능하게. 어디서나 사용. 유저 입력 SQL 에 절대 연결 금지. Client 제공 식별자 이름 절대 신뢰 금지; 동적으로 컬럼 골라야 하면 allowlist 검증 + quote_ident.