기록/개인
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;