기록/개인

PostgreSQL 권한 관리(DCL) 배운 것 정리

als982001 2025. 4. 19. 17:52

 

 

1. DCL

 DCL(Data Control Language)은 데이터베이스에서 데이터를 제어하는 언어로, 사용자 권한을 제어하는 SQL 명령어를 포함한다. 이 글에서는 아래의 두 명령어를 중심으로 정리를 할 예정이다.

주요 명령어 설명
GRANT 권한 부여
REVOKE 권환 회수

 

2. Role, User

구분 설명
Role 권한을 모아둔 그룹 역할
User 실제 로그인 가능한 계정 (내부적으로도 Role)

 

PostgreSQL에서는 User도 Role의 일종이다.

 

3. 예시 코드

3-1. 역할(Role)과 권한 관리

-- 1. 로그인 가능한 role 생성
CREATE ROLE marketer WITH LOGIN PASSWORD 'marketing4ever';

-- 2. 특정 테이블에 대한 권한 부여
GRANT SELECT, UPDATE ON movies TO marketer;
GRANT SELECT, INSERT ON statuses, directors TO marketer;

-- 3. public 스키마 내 모든 테이블에 SELECT 권한 부여
GRANT SELECT ON ALL TABLES IN SCHEMA public TO marketer;

-- 4. 일부 권한 회수
REVOKE INSERT ON statuses, directors FROM marketer;

-- 5. 전체 테이블에 INSERT 부여 후 다시 회수
GRANT INSERT ON ALL TABLES IN SCHEMA public TO marketer;
REVOKE INSERT ON ALL TABLES IN SCHEMA public FROM marketer;

 

3-2. 사용자 계정과 Role 연결

-- 1. Role 생성
CREATE ROLE editor;

-- 2. 해당 역할에 권한 부여
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO editor;

-- 3. 실제 사용자 생성
CREATE USER editor_one WITH PASSWORD 'words4ever';

-- 4. 사용자가 editor 역할을 사용할 수 있게 허용
GRANT editor TO editor_one;

 

3-3. 권한 세부 설정

-- editor에게 movies 테이블 권한 제거
REVOKE ALL ON movies FROM editor;

-- 대신 열(column) 단위로 권한 부여
GRANT SELECT (title) ON movies TO editor;
GRANT UPDATE (budget) ON movies TO editor;

 

3-4. 접속 제한 설정

-- editor_one 유저는 동시 접속 1개로 제한
ALTER ROLE editor_one WITH CONNECTION LIMIT 1;