도쿄사는 외노자

RDS PostgreSQL에서 유저 권한 부여하기 본문

Tech/DB・SQL

RDS PostgreSQL에서 유저 권한 부여하기

Enrai 2020. 3. 3. 00:56

RDS에 PostgreSQL을 깔고 DB를 구축했다.
DB에는 MasterTransaction의 두가지 스키마를 만들었고, 아래와 같이 롤을 부여하기로 했다.

Role

이름 Master Transaction 설명
master_user CRUD - 마스터 테이블 유지보수용 롤
readonly_user R R 열람용 롤
normal_user R CRUD 시스템 가동에 필요한 권한 부여 롤
super_admin CRUD CRUD 전 권한 부여

User

이름 Role
master_user_01 master_user
readonly_user_01 readonly_user
normal_user_01 normal_user
normal_user_02 normal_user
super_admin_01 super_admin

바로 본론으로 들어가, 소스는 다음과 같다.

-- ROLE
CREATE ROLE master_user;
CREATE ROLE readonly_user;
CREATE ROLE normal_user;
CREATE ROLE super_admin;

-- USER
CREATE USER master_user_01 WITH PASSWORD 'aaa';
CREATE USER readonly_user_01 WITH PASSWORD 'bbb';
CREATE USER normal_user_01 WITH PASSWORD 'ccc';
CREATE USER normal_user_02 WITH PASSWORD 'ddd';
CREATE USER super_admin_01 WITH PASSWORD 'eee';

-- GRANT USAGE
GRANT USAGE ON SCHEMA master TO master_user, readonly_user, normal_user;
GRANT USAGE ON SCHEMA transaction TO readonly_user, normal_user;

-- GRANT
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA master TO master_user;
GRANT SELECT ON ALL TABLES IN SCHEMA master TO readonly_user;
GRANT SELECT ON ALL TABLES IN SCHEMA transaction TO readonly_user;
GRANT SELECT ON ALL TABLES IN SCHEMA master TO normal_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA transaction TO normal_user;

-- GRANT SUPERUSER ROLE TO super_admin
GRANT rds_superuser TO super_admin;

-- GRANT ROLE TO USER
GRANT master_user TO master_user_01;
GRANT readonly_user TO readonly_user_01;
GRANT normal_user TO normal_user_01;
GRANT normal_user TO normal_user_02;
GRANT super_admin TO super_admin_01;

Grant Usage

Grant가 테이블의 CRUD 권한을 부여하는 것이라면, Grant Usage는 스키마에 대한 엑세스 권한을 부여한다.
테이블 권한이 있더라도, 스키마를 사용할 수 없다면 그 안의 테이블을 만질 수 없다는 것.
자세한 것은 What GRANT USAGE ON SCHEMA exactly do?를 참조.

RDS for PostgreSQL의 ADMIN권한

RDS for PostgreSQL에서는 ADMIN권한을 가진 Role이 존재한다.
이름하야 「rds_superuser」.
이것만 GRANT로 발라주면, 그 유저/롤은 바로 슈퍼유저가 된다.

참조

PostgreSQL Grant