PostgreSQL
확장 가능성 및 표준 준수를 강조하고 구조화된 데이터를 저장, 구성 및 관리하는데 널리 사용되는 객체-관계형 데이터베이스 관리 시스템 (ORDBMS)
Row Level Security
Row Level Security (RLS)는 오픈 소스 PostgreSQL DB에서 제공하는 보안 기능으로 데이터베이스 관리자는 특정 데이터 행이 하나 이상의 역할에 대해 표시되고 작동하는 방식을 제어하는 정책을 정의하는 것으로 SELECT, INSERT, UPDATE 및 DELETE와 같은 특정 명령을 포함하여 테이블의 행 수준에서 세분화된 액세스 제어를 구현할 수 있는 기능
※ PostgreSQL 11 Version 이상에서 사용 가능
Row Level Security Policy
- ALTER TABLE : 지정된 테이블에 대한 행 보안 활성화 및 비활성화
- CREATE POLICY : 명령을 사용하여 정책 생성
- ALTER POLICY : 명령을 사용하여 변경
- DELETE POLICY : 명령을 사용하여 삭제
PostgreSQL RLS Example
해당 Sample은 pgAdmin4 GUI Tool 기반으로 진행하였습니다.
1. 샘플 테이블 생성
CREATE TABLE employees (
id int,
name TEXT,
age int
)
2. 샘플 데이터 추가
INSERT INTO employees (id, name, age) VALUES (1,'admin',30);
INSERT INTO employees (id, name, age) VALUES (2,'tester',20);
3. RLS 정책 적용
※ 정책 : 로그인한 사용자의 ID와 샘플 데이터의 name 필드 값이 같은 데이터만 조회 가능하도록 구성
-- ROW LEVEL SECURITY 활성화 - Table 수준
ALTER TABLE employees ENABLE ROW LEVEL SECURITY;
-- 정책 생성
-- CURRENT_USER → 현재 로그인한 사용자의 ID
CREATE POLICY "employees are public" ON employees FOR ALL TO PUBLIC USING (name=CURRENT_USER);
4. 샘플 테이블 조회 (Super User) → 모든 데이터 출력
5. 테스트 계정 (tester) 및 조회 권한 추가
-- 계정 추가 (tester)
CREATE USER tester WITH PASSWORD 'tester';
-- 권한 추가 (employees 조회 권한)
GRANT SELECT ON employees TO tester;
6. 테스트 계정 로그인 → CURRENT_USER 를 통해 계정 ID 조회 가능
7. 샘플 테이블 조회 (tester) → 정책에 따라 필터
마치며 (개인적인 생각)
지금까지 PostgreSQL에서 제공하는 ROW LEVEL SECURITY 기능에 대해 살펴보았습니다. 간단한 예제와 함께 기능을 검토해 보니 실제 개발에서도 유용하게 쓸 수 있을 것으로 보입니다. 위의 예제는 단순히 CURRENT_USER를 통해 현재 로그인한 ID 값을 비교하여 데이터를 필터 해보았지만 사용하는 HR, 권한, 세션 정보를 통해 조건 비교하여 정책을 부여할 수 있게 제공하고 있기 때문에 해당 기능을 사용한다면 데이터에 대한 보안을 한층 더 강화시킬 수 있을 것으로 같습니다. 그러나 해당 기능을 사용하는 것은 모든 쿼리에 WHERE 절을 추가하는 것을 의미하기 때문에 성능에 영향을 주기 때문에 사용해야 할 경우 신중하게 사용해야 할 것 같습니다.
PostgreSQL에서 테이블의 행 단위로 액세스 제어를 할 수 있는 기능
Reference
PostgreSQL Row Level Security (RLS): Basics and Examples
Learn about PostgreSQL Row Level Security, a security feature that lets you selectively allow access to rows in a database table.
satoricyber.com
5.8. Row Security Policies
5.8. Row Security Policies In addition to the SQL-standard privilege system available through GRANT, tables can have row security policies that …
www.postgresql.org