PostgreSQL

PostgreSQL: ROLE

dewstream 2025. 6. 9. 08:00

※ PostgreSQL: ROLE.

 

안녕하세요. 듀스트림입니다.

 

오늘 포스팅은 PostgreSQL의 Role(User)에 관한 내용입니다.


PostgreSQL에서 Role은 데이터베이스 사용자 또는 사용자 그룹을 의미합니다.

각 역할은 데이터베이스 객체의 소유자가 될 수 있으며, 다른 역할에게 권한을 부여하거나 회수할 수 있습니다.

또한 역할 간의 상속을 통해 권한을 계층적으로 관리할 수 있습니다.

 

일반적으로 LOGIN 속성을 설정한 Role을 사용자가 직접 접속하는 User로 사용하고, NOLOGIN 속성의 Role을 권한 관리용 Group Role로 사용합니다.

 

기본 구문은 아래와 같습니다.

-- 사용자 역할 생성
CREATE ROLE admin LOGIN PASSWORD 'password';

-- 그룹 역할 생성
CREATE ROLE developers NOLOGIN;

-- 역할에 속성 부여
ALTER ROLE admin WITH SUPERUSER;

 

Role에 부여 가능한 속성 목록

속성 설명
LOGIN 해당 ROLE로 로그인(세션 접속) 가능하게 함
SUPERUSER 슈퍼유저 권한. 모든 권한을 무제한적으로 가짐 (주의 필요)
CREATEDB 새로운 데이터베이스를 생성할 수 있음
CREATEROLE 다른 ROLE을 생성하거나 수정할 수 있음
INHERIT 상속 받은 ROLE의 권한을 자동으로 사용할 수 있게 함
NOINHERIT 상속 받은 ROLE의 권한을 자동으로 사용하지 않음 (SET ROLE 필요)
REPLICATION 스트리밍 복제 및 base backup 수행 가능
BYPASSRLS Row-Level Security (RLS) 정책을 무시하고 테이블 접근 가능
CONNECTION LIMIT 동시에 접속 가능한 세션 수 제한 (예: CONNECTION LIMIT 10)
PASSWORD ROLE에 암호를 설정하여 인증 시 사용 (예: PASSWORD 'abc123')
VALID UNTIL ROLE의 유효 기한을 설정 (예: VALID UNTIL '2025-12-31')

 

자세한 내용은 공식 문서 참고 부탁드립니다.

 

CREATE ROLE

CREATE ROLE CREATE ROLE — define a new database role Synopsis CREATE ROLE name [ [ WITH ] option [ …

www.postgresql.org


역할 간의 상속 및 그룹 역할 관리 (Membership)

역할 간의 상속을 통해 권한을 계층적으로 관리할 수 있습니다.

그룹 역할을 생성하고 다른 역할을 해당 그룹에 추가함으로써 권한을 일괄적으로 부여하거나 회수할 수 있습니다.

-- 그룹 역할 생성
CREATE ROLE DML NOLOGIN;

-- 사용자 역할 생성
CREATE ROLE kim LOGIN PASSWORD 'password';

-- 사용자 역할을 그룹 역할에 추가
GRANT DML TO kim;

-- 그룹 역할에서 사용자 역할 제거
REVOKE DML FROM kim;

 

자세한 내용은 공식 문서 참고 부탁드립니다.

 

21.3. Role Membership

21.3. Role Membership # It is frequently convenient to group users together to ease management of privileges: that way, privileges can …

www.postgresql.org


권한 부여 (GRANT) 및 회수 (REVOKE)

PostgreSQL에서는 GRANT 및 REVOKE 명령어를 사용하여 역할에 권한을 부여하거나 회수할 수 있습니다.

 

권한은 DATABASE, SCHEMA, TABLE, SEQUENCE, FUNCTION 등 개별 객체에 대해 명시적으로 지정해야 하며 각 객체에 대한 권한은 별도로 부여해야 합니다.

-- 테이블에 대한 SELECT 권한 부여
GRANT SELECT ON test_1 TO kim;

-- 테이블에 대한 SELECT 권한 회수
REVOKE SELECT ON employees FROM kim;

 

객체별 부여 가능한 권한 항목 표

Object Type 부여 가능한 권한 (Privileges) 설명
DATABASE CONNECT, CREATE, TEMPORARY (또는 TEMP) 데이터베이스에 연결하거나 그 안에 객체를 생성할 수 있는 권한
SCHEMA CREATE, USAGE 스키마 내 객체 생성 또는 사용 가능 여부 제어
TABLE / VIEW / FOREIGN TABLE SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER 테이블 조회, 삽입, 갱신, 삭제, TRUNCATE, 외래키 참조, 트리거 생성 권한
SEQUENCE USAGE, SELECT, UPDATE nextval, currval, setval 사용에 대한 제어
FUNCTION / PROCEDURE / ROUTINE EXECUTE 함수/프로시저 실행 권한
TYPE USAGE 사용자 정의 타입을 사용하는 권한
LANGUAGE USAGE 사용자 정의 함수에서 특정 언어(SQL, PL/pgSQL 등) 사용 권한
FOREIGN DATA WRAPPER USAGE FDW를 사용하는 권한
FOREIGN SERVER USAGE foreign server를 사용하는 권한
TABLESPACE CREATE 테이블스페이스에 객체 생성 권한
COLUMN (in TABLE) SELECT, INSERT, UPDATE, REFERENCES 특정 컬럼 단위 권한 제어 가능
(PostgreSQL은 컬럼 권한을 명시적으로 지원함)

 

자세한 내용은 공식 문서 참고 부탁드립니다.

 

GRANT

GRANT GRANT — define access privileges Synopsis GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | …

www.postgresql.org

 

REVOKE

REVOKE REVOKE — remove access privileges Synopsis REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE …

www.postgresql.org


실제 롤관리는 아래 예시처럼 할 수 있습니다.

-- 그룹 역할 생성
CREATE ROLE developers NOLOGIN;
CREATE ROLE analysts NOLOGIN;

-- 사용자 역할 생성
CREATE ROLE kim LOGIN PASSWORD 'password';
CREATE ROLE lee LOGIN PASSWORD 'password';

-- 사용자 역할을 그룹 역할에 추가
GRANT developers TO kim;
GRANT analysts TO lee;

-- 테이블에 대한 권한 부여
GRANT SELECT, INSERT ON table_1 TO developers;
GRANT SELECT ON table_1 TO analysts;
  • developers 그룹에 SELECT, INSERT 권한을 부여하고, analysts 그룹에 SELECT 권한만 부여하였습니다.
  • kim은 developers 그룹의 일원이므로 SELECT, INSERT 권한을 가지며, lee는 analysts 그룹의 일원이므로 SELECT 권한만을 가집니다.

오늘은 여기까지~

 

'PostgreSQL' 카테고리의 다른 글

PostgreSQL: Disk I/O 및 WAL 흐름  (0) 2025.06.11
PostgreSQL: Streaming Replication  (0) 2025.06.10
PostgreSQL: 병렬 INSERT가 되지 않는 이유  (1) 2025.06.08
PostgreSQL: EXPLAIN  (0) 2025.05.29
PostgreSQL: postgres_fdw vs dblink  (0) 2025.05.28