services:
postgres:
image: postgres
container_name: postgres
restart: unless-stopped
shm_size: 512mb
environment:
TZ: Asia/Seoul
POSTGRES_USER: 유저명 # 사용자명
POSTGRES_PASSWORD: 비밀번호 # 비밀번호
POSTGRES_DB: postgres # 초기 접속 DB
ports:
- "5432:5432" # 호스트 포트:컨테이너 포트
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:도커 컨테이너 접속
docker exec -it 도커 컨테이너명 sh
postgres 접속
psql -U 유저명 -d 초기접속DB명
유저 전체 목록 출력
\du
유저 생성
CREATE USER app_user WITH PASSWORD 'password';
데이터베이스 목록 출력
\l
데이터베이스 생성
CREATE DATABASE 데이터베이스 명;
데이터베이스 접근 권한 부여
// 1. 해당 데이터베이스로 접속
\c 데이터베이스명
// 2. PUBLIC 권한 제거(모든 유저, 데이터베이스 주인, 슈퍼유저 제외)
REVOKE ALL ON DATABASE get_job_db FROM PUBLIC;
// 3. 유저에게 DB 접속 권한 부여
GRANT CONNECT ON DATABASE get_job_db TO app_user;
// 4. 사용자에게 public 스키마에 대한 접근 권한 부여
GRANT USAGE ON SCHEMA public TO app_user;
// 5. 사용자로부터 public 스키마의 생성 권한 제거
REVOKE CREATE ON SCHEMA public FROM app_user;
// 6. 사용자에게 테이블 CRUD 권한 부여
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;
// 7. 앞으로 생성될 테이블에 대한 CRUD 권한 자동 부여
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_user;