본문으로 건너뛰기
데이터베이스 기초집LESSON 19

데이터베이스 보안: 계정, 권한, 비밀 정보

난이도초급 → 중급
예상 시간35분
선수지식이전 강의

19강. 데이터베이스 보안: 계정, 권한, 비밀 정보

1. 이번 강의에서 해결할 문제

FastAPI가 superuser로 접속하거나 .env를 커밋하면 SQL 주입이나 저장소 유출이 전체 DB 장악으로 이어질 수 있습니다. 실행 주체별 역할과 최소 권한, 비밀 교체 절차를 설계합니다.

2. 학습 목표

3. 핵심 개념

PostgreSQL은 사용자와 그룹을 모두 role로 표현합니다. 애플리케이션 계정은 필요한 스키마와 테이블 권한만 받고 객체 생성·역할 관리 권한은 받지 않습니다. 마이그레이션 계정은 별도로 두고 배포 시에만 사용합니다. 비밀은 환경 변수나 비밀 관리 서비스로 주입하고 노출되면 삭제 커밋만 하지 말고 즉시 폐기·재발급합니다.

4. 단계별 예시

파일 경로: C:\dev\game-ranking-service\database\sql\19-roles.sql

database/sql/19-roles.sql
CREATE ROLE ranking_app LOGIN;
CREATE ROLE ranking_readonly LOGIN;

GRANT CONNECT ON DATABASE game_ranking_dev TO ranking_app, ranking_readonly;
GRANT USAGE ON SCHEMA ranking TO ranking_app, ranking_readonly;
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA ranking TO ranking_app;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA ranking TO ranking_app;
GRANT SELECT ON ALL TABLES IN SCHEMA ranking TO ranking_readonly;

ALTER DEFAULT PRIVILEGES IN SCHEMA ranking
GRANT SELECT, INSERT, UPDATE ON TABLES TO ranking_app;
ALTER DEFAULT PRIVILEGES IN SCHEMA ranking
GRANT SELECT ON TABLES TO ranking_readonly;
PowerShell · 관리자 실행 후 암호 대화형 설정
psql -U postgres -d game_ranking_dev -v ON_ERROR_STOP=1 -f .\database\sql\19-roles.sql
psql -U postgres -d game_ranking_dev
# psql 안에서 실행: \password ranking_app
.env.example
DATABASE_URL=postgresql+psycopg://ranking_app:CHANGE_ME@localhost:5432/game_ranking_dev

5. 동작 원리

CONNECT, 스키마 USAGE, 테이블 DML, 시퀀스 권한은 서로 별도입니다. 기본 권한은 앞으로 해당 소유자가 만드는 객체에 적용되므로 실제 마이그레이션 소유자로 실행해야 합니다. .env.example은 키 이름만 공유하고 실제 .env.gitignore에 포함합니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

데이터베이스 보안: 계정, 권한, 비밀 정보 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“데이터베이스 보안: 계정, 권한, 비밀 정보” 작업 전 검토에서 채택해야 할 안전 기준은 무엇인가요?
  2. 문제 2‘노출된 키를 Git에서만 삭제’ 실수를 판단할 때 “데이터베이스 보안: 계정, 권한, 비밀 정보” 강의가 제시한 기준은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

19강. 데이터베이스 보안: 계정, 권한, 비밀 정보 미완료 상태