권한 부여

2025. 5. 1. 11:20DB/Postgres

반응형

✅  회사 내부 시스템에서 사용되는 PostgreSQL

  • DB 관리자 (DBA): admin_user – 전체 권한 보유
  • 웹 애플리케이션: app_user – 특정 데이터베이스에만 SELECT/INSERT 권한
  • 백업 전용 계정: backup_user – 읽기 전용 권한 (SELECT만)
  • 보고서 생성 계정: report_user – SELECT + VIEW 권한

 

 

🔹  1. 유저 생성

-- 관리자 계정
CREATE ROLE admin_user WITH LOGIN PASSWORD 'secure_admin_pass';
ALTER ROLE admin_user WITH SUPERUSER;

-- 웹 애플리케이션 계정
CREATE ROLE app_user WITH LOGIN PASSWORD 'secure_app_pass';

-- 백업용 계정
CREATE ROLE backup_user WITH LOGIN PASSWORD 'secure_backup_pass';

-- 보고서용 계정
CREATE ROLE report_user WITH LOGIN PASSWORD 'secure_report_pass';

 

 

 

 

🔹 2. test DB로 접속

postgres=# \c test
psql (16.8 (Ubuntu 16.8-1.pgdg22.04+1), server 14.17 (Ubuntu 14.17-0ubuntu0.22.04.1))
You are now connected to database "test" as user "postgres".
test=#

 

 

 

 

🔹3. 권한 부여

 app_user: INSERT + SELECT만 가능

GRANT CONNECT ON DATABASE test TO app_user;
👉 app_user가 test 데이터베이스에 접속할 수 있도록 접속 권한 부여.

GRANT USAGE ON SCHEMA public TO app_user;
👉 public 스키마 안의 객체(테이블 등)를 이용할 수 있는 권한 부여 (접속은 가능하나, 개별 객체에 대한 권한은 별도로 필요함).

GRANT SELECT, INSERT ON sales_data TO app_user;
👉 sales_data 테이블에 대해 읽기(SELECT) 와 데이터 추가(INSERT) 권한을 부여.

❌ UPDATE, DELETE는 허용되지 않음

 

 

2. backup_user: SELECT만 가능 (백업 전용)

GRANT CONNECT ON DATABASE test TO backup_user;
GRANT USAGE ON SCHEMA public TO backup_user;
GRANT SELECT ON sales_data TO backup_user;
백업 용도로 읽기 전용 권한만 부여.

❌ INSERT, UPDATE, DELETE 권한 없음.

✔️ SELECT만 가능하므로 읽기 및 덤프(백업)에 사용 가능.

 

 

 

3. report_user: SELECT + VIEW 생성 가능
GRANT CONNECT ON DATABASE test TO report_user;
GRANT USAGE ON SCHEMA public TO report_user;
GRANT SELECT ON sales_data TO report_user;
GRANT CREATE ON SCHEMA public TO report_user;
✔️ SELECT로 데이터 조회 가능.

✔️ CREATE ON SCHEMA 덕분에 report_user는 스키마 안에 VIEW 또는 TABLE 생성 가능.
예: 보고서용 뷰(view)를 만들어 저장할 수 있음.

❌ 하지만 TABLE에 직접 INSERT하거나 DELETE하는 권한은 없음.

 

 

 

🔹 4. 권한 확인 명령어

-- 유저 확인
\du

-- 테이블 권한 확인
\z sales_data

 

 

반응형