전체 용어 목록

역할과 권한

PostgreSQL에서 역할과 권한은 어떻게 동작하나요?

PostgreSQL에서는 사용자와 그룹이 모두 역할입니다. GRANT는 역할에 객체에 대한 권한을 부여하며, 다른 역할의 멤버인 역할은 그 역할의 권한을 사용할 수 있습니다.

PostgreSQL은 역할로 접근을 제어합니다. 역할은 사용자(LOGIN 속성이 있는 경우)나 그룹, 또는 둘 다로 동작할 수 있으며, 역할은 데이터베이스 객체를 소유합니다. SELECT, INSERT, UPDATE, USAGE 같은 권한은 GRANT로 특정 객체에 대해 부여하고 REVOKE로 회수합니다.

한 역할을 다른 역할의 멤버로 만들면 그 역할의 권한을 사용할 수 있으므로, 그룹 역할에 권한을 부여하고 로그인 역할을 해당 그룹에 추가하는 것이 일반적인 패턴입니다. 역할은 데이터베이스별이 아니라 데이터베이스 클러스터 전체에 존재합니다. 객체의 소유자와 슈퍼유저는 그 객체에 대해 무엇이든 할 수 있으므로, 애플리케이션 역할은 소유자 및 슈퍼유저와 분리해 두세요.

예제

이 예제는 reporting이라는 그룹 역할과 여기에 속한 analyst라는 로그인 역할을 만들고, 그룹에 SELECT 권한을 부여합니다. has_table_privilege로 analyst가 테이블을 읽을 수는 있지만 삽입할 수는 없음을 확인합니다.

CREATE ROLE reporting NOLOGIN;
CREATE ROLE analyst LOGIN IN ROLE reporting;

CREATE TABLE revenue_daily (day date PRIMARY KEY, amount numeric);
GRANT SELECT ON revenue_daily TO reporting;

SELECT has_table_privilege('analyst', 'revenue_daily', 'SELECT') AS can_select,
       has_table_privilege('analyst', 'revenue_daily', 'INSERT') AS can_insert;

확장 없이 기본 PostgreSQL 16 또는 17에서 실행되는 일반 SQL입니다. 버려도 되는 빈 데이터베이스에서 실행하세요.

출처

PostgreSQL 공식 문서(영문)입니다.

관련 용어