PostgreSQL

PostgreSQL: 데이터베이스 레벨 접근 권한 설정

dewstream 2025. 9. 9. 08:00
728x90

※ PostgreSQL: Configuring Database-Level Access Privileges.
 
안녕하세요. 듀스트림입니다.
 
일하다 갑자기 슥 받은 질문이 있었는데, 아래 그림의 빨간 네모에 들어간 값이 뭘 의미하냐는 질문을 받았었습니다.

 
질문에 대한 대답은 "\l에서 보이는 Access privileges는 데이터베이스 레벨에서 설정된 접근 권한을 의미합니다."입니다.
 
그래서 하는 오늘의 포스팅은 Database-level Access privileges에 관한 내용입니다.


1. Access privileges?

Access privileges 컬럼에 표시되는 값은 GRANT를 통해 부여된 권한 리스트입니다.
 
▸ 의미는 아래와 같습니다:

rolename=CTc/grantor
  • rolename: 권한을 받은 사용자 또는 그룹(role).
  • CTc: 권한 종류 (알파벳 한 글자).
  • grantor: 권한을 부여한 사용자.
"=c/postgres"의 의미는 모든 사용자에게 허용되었다는 의미입니다.
최초 데이터베이스 생성 시 꼭 아래 명령을 수행해 주시기 바랍니다.
-- 최초 인스턴스 생성시
REVOKE ALL ON DATABASE template1 FROM PUBLIC;

-- 최초 데이터베이스 생성시
REVOKE ALL ON DATABASE db_name FROM PUBLIC;

 
▸ 데이터베이스 레벨에서 설정 가능한 권한은 다음과 같습니다:

표시 권한 설명
C CREATE 데이터베이스 안에서 새로운 스키마를 만들 수 있음
T TEMP 임시 테이블을 만들 수 있음
c CONNECT 해당 데이터베이스에 접속할 수 있음
CTc ALL 위 모든 권한을 의미

 

rolename=c*/grantor에서 *는 "WITH GRANT OPTION"을 의미합니다.
해당 권한을 다른 사용자에게 재부여할 수 있는 권한(grant option)이 포함되어 있다는 뜻입니다.

2. 설정 방법

▸ 권한 부여 (GRANT)

-- 특정 사용자에게 connect 권한 부여
GRANT CONNECT ON DATABASE db_name TO user_name;

-- 특정 사용자에게 schema 생성 권한 부여
GRANT CREATE ON DATABASE db_name TO user_name;

-- 특정 사용자에게 temp 테이블 생성 권한 부여
GRANT TEMP ON DATABASE db_name TO user_name;

-- 모든 권한을 한 번에 부여
GRANT ALL ON DATABASE db_name TO user_name;

 
▸ 권한 회수 (REVOKE)

-- 특정 사용자에게 connect 권한 회수
REVOKE CONNECT ON DATABASE db_name FROM user_name;

-- 특정 사용자에게 schema 생성 권한 회수
REVOKE CREATE ON DATABASE db_name FROM user_name;

-- 특정 사용자에게 temp 테이블 생성 권한 회수
REVOKE TEMP ON DATABASE db_name FROM user_name;

-- 모든 권한을 한 번에 회수
REVOKE ALL ON DATABASE db_name FROM user_name;

3. 테스트 예시

▸ test 데이터베이스에 대한 test_user 계정의 권한이 아무 것도 없는 상태

 
▸ 접근 권한 부여

 

※ 다른 권한이 있어도 CONNECT 권한이 없으면 의미 없습니다.

 
권한은 꼭 필요한 범위 내에서만 부여하는 게 사고를 예방하는 지름길입니다.
 
오늘은 여기까지~
 

728x90

'PostgreSQL' 카테고리의 다른 글

PostgreSQL: LIKE vs ILIKE  (0) 2025.09.12
PostgreSQL: 인덱스 - 연산자 클래스  (0) 2025.09.10
PostgreSQL: DBMS 성능 튜닝  (0) 2025.09.02
PostgreSQL 쿼리 튜닝: 인덱스, LATERAL 사용  (1) 2025.09.01
PostgreSQL: work_mem 최적화  (0) 2025.08.07