※ 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 |