블루베리소르베

[PostgreSQL] 기본권한 부여하기 본문

DATA/PostgreSQL

[PostgreSQL] 기본권한 부여하기

블루베리소르베 2021. 5. 24. 23:13

보통 롤을 생성하고나면 롤에 종속되는 스키마를 만든다.

만들어진 스키마에 테이블도 만들고, 인덱스도 만들면서 신나게 작업하다보면

다른 롤에서도 해당 스키마에 접근하고 싶어진다.

 

그럴때 사용하는 명령어가 GRANT이다.

권한을 부여한다, 허가한다 라는 뜻의 GRANT.

--보통 GRANT 명령은 이런 식으로 사용한다.
GRANT [할당할 권한] ON TABLE [TABLE이름] TO [롤 이름];
GRANT SELECT ON TABLE table1 TO role1;

하지만 스키마에 테이블이 생성될 때 마다 GRANT명령으로 권한을 부여해야한다면

퇴근은 하지말라는 것이나 마찬가지다.

그런일은 없어야하니까, 스키마의 기본권한을 부여하는 방법으로 퇴근을 앞당겨보자.

ALTER DEFAULT PRIVILEGES IN SCHEMA [스키마 이름] GRANT [부여할 권한] ON TABLES TO [롤 이름];
ALTER DEFAULT PRIVILEGES IN SCHEMA schema1 GRANT SELECT ON TABLES TO role1;

단, 여기서 중요한점은 PostgreSQL에서는 스키마의 오너 롤로 접속하여 해당 권한을 주어야 한다는 것이다.

마냥 슈퍼유저 롤이라고 막강한 권한으로 여기저기에 권한을 부여할 수 있는게 아니다.

 

PostgreSQL에서는 슈퍼유저 롤로 접속하여 권한을 막 뿌리다보면 생각했던대로 권한부여가 되지 않는다.

롤과 스키마가 분리되어있는 개념이기 때문이다.

 

스키마는 롤에 종속되기 때문에 슈퍼유저 롤이라고 하더라도, 우리가 입력한 "schema1" 스키마는 슈퍼유저 롤에는 존재하지 않는다. 그러나 백만번을 명령어를 날려도 오류따위는 뜨지 않고, 존재하지 않는 스키마에 대한 권한 부여가 완료되었다는 해맑은 "권한부여 완료" 메시지만을 보여준다.

 

기본 권한이 설정이 잘 되었다면, 이후에 생성되는 테이블들에 대한 권한을 자동으로 해당 롤이 가지게된다.