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 |
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 |
Column access privilege |
newyork |
test_02 |
table |
enterprisedb=arwdDxt/enterprisedb |
col1:
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 |
Column access privilege |
newyork |
test_02 |
table |
enterprisedb=arwdDxt/enterprisedb |
col1:
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 |