에듀테크 프로젝트 대시보드
보안
핵심은 '앱은 필요한 만큼만' — 슈퍼유저로 앱을 돌리지 않는 것부터 시작합니다.
-- 앱 역할은 로그인 + 자기 스키마 권한만
CREATE ROLE school LOGIN PASSWORD '...';
REVOKE ALL ON DATABASE school FROM PUBLIC;
GRANT CONNECT ON DATABASE school TO school;
GRANT USAGE ON SCHEMA app TO school;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA app TO school;
-- DDL 은 마이그레이션 전용 역할로 분리password_encryption = scram-sha-256 (md5 금지)pg_hba.conf 는 DB·유저·CIDR 를 좁게, 마지막 줄 rejecthostssl + 클라이언트 sslmode=verify-full.env·.pgpass 는 chmod 600, git 제외ALTER TABLE notes ENABLE ROW LEVEL SECURITY;
CREATE POLICY note_owner ON notes
USING (owner_id = current_setting('app.user_id')::bigint);
-- 앱이 트랜잭션마다 주입
SET LOCAL app.user_id = '42';
SELECT * FROM notes; -- 42 의 행만 보임$1, %s). 자세히는 SQL 인젝션SET search_path = pg_catalog, pg_temp 를 명시(하이재킹 방지)SECURITY DEFINER 함수는 특히 주의