2. DBMS이야기/01. PostgreSQL

PostgreSQL Privileges Test 1

OSSW(Open Source System SoftWare 2014. 7. 28. 22:08

TEST 1 : GRANT

      테이블에 SELECT 권한 부여시, 테이블 조회가 가능한가


첫번째 시나리오는 grant 구문을 테스트하는 시나리오입니다.


- Create Schema

edb=# create schema newyork;

CREATE SCHEMA


- Create Table

edb=# create table newyork.test_02(col1 number(1), col2 number(2));

CREATE TABLE

edb=# \dp newyork.test_02

 

Schema

Name

Type

Access privileges
Access privileges

Column access privilege

newyork

test_02

table

(1 row)

 

edb=# insert into newyork.test_02 values (1,34);

INSERT 0 1

edb=# insert into newyork.test_02 values (2,56);

INSERT 0 1

edb=# commit;

COMMIT

 

- Create Role

edb=# create user hoon with password 'hoon1234';

CREATE ROLE


- 계정에 권한 부여

edb=# grant select (col2) on newyork.test_02 to hoon;

GRANT

edb=# \dp newyork.test_02;

 

Schema

Name

Type

Access privileges

Access privileges

Column access privileges

newyork

test_02

table

enterprisedb=arwdDxt/enterprisedb

col2: hoon=r/enterprisedb

(1 row)


위 사항을 보시면 각 컬럼에 대해 권한 부여가 가능하다는 것을 알 수 있습니다.

arwdDxt = all privis (for tables, varies for other objects)

a : insert

r : select

w : update

d : delete

D : truncate

x : references

t : trigger

만약에 컬럼 각각이 아닌 select table 로 권한을 부여한다면

column access privileges의 컬럼에는 아무것도 나오지 않게됩니다.


- 계정으로 테이블 조회

edb=# \c edb hoon

Password for user hoon:

You are now connected to database "edb" as user "hoon".

edb=> select * from newyork.test_02;

ERROR:  permission denied for schema newyork

LINE 1: select * from newyork.test_02;

 

에러가 난 이유는 스키마에 대한 권한이 없기 때문이며 아까 object ownership에서 보신 그림을 생각하시면 됩니다.

 

- Schema에 대한 Access 권한 부여

edb=# grant usage on schema newyork to hoon;

GRANT

edb=# \dns+

Name

Owner

Access privileges

Access privileges

Description

dbms_job_procedure

enterprisedb

enterprisedb=UC/enterprisedb+=U/enterprisedb

dbms_job what procedures

dbo

enterprisedb

enterprisedb=UC/enterprisedb+=U/enterprisedb

dbo schema

enterprisedb

enterprisedb

newyork

enterprisedb

enterprisedb=UC/enterprisedb+hoon=U/enterprisedb

pgagent

enterprisedb

pgAgent system tables

public

enterprisedb

enterprisedb=UC/enterprisedb+=UC/enterprisedb

Standard public schema

sys

enterprisedb

enterprisedb=UC/enterprisedb+=U/enterprisedb

sys schema

(7 rows)


- 계정으로 Table 조회

edb=> select * from newyork.test_02;

ERROR:  permission denied for relation test_02

edb=> select col2 from newyork.test_02;

col2

34

56

(2 rows)

 

col2에만 권한을 부여했기 때문에 전체는 볼 수 없고 col2만 보는 것이 가능합니다.

 

- Object 권한 추가

edb=# grant select (col1) on newyork.test_02 to hoon;

GRANT

edb-# \dp newyork.test_02



Schema

Name

Type

Access privileges
Access privilege

Column access privilege

newyork

test_02

table

enterprisedb=arwdDxt/enterprisedb

col1: hoon=r/enterprisedb
col2: hoon=r/enterprisedb

(2 rows)


- 계정으로 Table 조회

edb=> select * from newyork.test_02;

col1

 col2

1

34

2

56

(2 rows)

 

- Object 권한 추가

 

edb=# grant select (col1) on newyork.test_02 to hoon;

GRANT

edb-# \dp newyork.test_02

 

Schema

Name

Type

Access privileges
Access privilege

Column access privilege

newyork

test_02

table

enterprisedb=arwdDxt/enterprisedb

col1: hoon=r/enterprisedb
col2: hoon=r/enterprisedb

(2 rows)

 

- 계정으로 Table 조회

edb=> select * from newyork.test_02;

col1

 col2

1

34

2

56

(2 rows)


col1 에 대한 권한을 주고 나서야 전체 테이블을 조회할 수 있게 되었습니다.

해당 테스트 시나리오를 통해 테이블에 SELECT 권한 부여시, 테이블 조회가 가능한가? 라는 질문에 대한 결과를 알 수 있습니다.


Post by. 김지선 (2014.07.27)


'2. DBMS이야기 > 01. PostgreSQL' 카테고리의 다른 글

Postgres SQL과 Oracle의 Engine 비교  (0) 2014.07.31
PostgreSQL vs MySQL 비교  (0) 2014.07.30
PG_RESTORE  (0) 2014.07.26
PHP에서 PostgreSQL 사용하기  (0) 2014.07.25
SQL_DUMP VS SQL_DUMPALL  (0) 2014.07.24