2. DBMS이야기/01. PostgreSQL

PostgreSQL Privilege Part.1

OSSW(Open Source System SoftWare 2014. 6. 15. 01:05

PostgreSQL  Privileges Part.1


1) Privilege 란?

Privilege란 특정 User Database에 접속 후 특정 오브젝트에 대해 작업을 수행할 수 있는 권한을 의미합니다각 오브젝트에 특정 권한은 DBA가 부여해야 해야만 user가 작업이 가능합니다.


2) Privilege 의 종류

privilege의 종류로는 총 12가지로 SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER, CREATE, CONNECT, TEMPORARY, EXECUTE, USAGE 가 있습니다.


각각의 권한들에 대해 설명하면 

select는 데이터를 조회할 수 있는 권한,

insert는 데이터를 삽입할 수 있는 권한,

update는 데이터를 변경할 수 있는 권한,

delete truncate 는 데이터를 지울 수 있는 권한,

referenceforeign key constraints를 생성할 수 있는 권한,

trigger는 특정 테이블에 트리거 생성을 할 수 있는 권한,

create는 오브젝트를 생성할 수 있는 권한,

connect는 특정 데이터베이스에 접속할 수 있는 권한,

temporary, 약어로 temp 라고 하는 이 권한은 temporary table 을 생성할 수 있는 권한,

execute 는 실행할 수 있는 권한, 

usageschema, sequence, type, domain, foreign-data wrappers, server 에 대해 사용이 가능하게 하는 권한입니다.


3) Privilege 적용 : Grant

Privilege를 적용하려면 Grant 명령어를 사용하여 권한을 적용할 수 있습니다.

grant 문의 문법은 다음과 같습니다.


GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
         [, ...] | ALL [ PRIVILEGES ] }
  ON { [ TABLE ] table_name [, ...]
     | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT role_name [, ...] TO role_name [, ...] [ WITH ADMIN OPTION ]

ALL PRIVILEGES : Grant all of the available privileges at once. 
                     The PRIVILEGES key word is optional in PostgreSQL
                     though it is required by strict SQL.

위 구문을 보면 특정 테이블이나 특정 스카마의 전체 테이블에 대해 특정 role 이나 public 에 대해 SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER 권한 혹은 

모든 권한을 한꺼번에 부여할 수 있는 all privilege있습니다.


with grant option을 통해 다른 유저에게 자신이 가진 권한을 부여할 수 있게 됩니다. 

이 옵션은 public에게는 줄 수 없으며, 먼저 권한을 준 유저의 권한을 해제 시 다음 유저에게 주었던 권한이 자동으로 해제됩니다.


  •     WITH GRANT OPTION vs WITH ADMIN OPTION

WITH ADMIN OPTION 은 해당 롤의 권한을 다른 롤에게수있는 옵션입니다. 언뜻보기에는 자신의 권한을 다른 유저에게 줄 수 있다는 점에서 with grant option 과 유사해 보이지만

이 옵션은 자신이 가진 권한을 그대로 주기 때문에 권한 일부를 선택하여 주는 것이 불가능합니다. 또한 권한을 준 유저의 권한을 해제 시에도 다른 유저의 권한을 해제하지는 않습니다.


  •     EXAMPLES
 1) GRANT ALL PRIVILEGES ON kinds TO manuel;
 2) GRANT INSERT ON films TO PUBLIC;

위 grant 예제에서 
첫 문장은 manual 이란 rolekinds 라는 테이블에 모든 권한을 부여한다는 의미이며, 
두번째 문장은 publicfilms 라는 테이블에 insert 권한을 부여한다는 의미입니다.

Post by. 김지선(2014.06.14)