별 재미 없는 내용이 될지도 모르겠는데요.
2명의 User가 1 user당 1개의 세션으로 PostgreSQL에 접속합니다.
A Session의 1번 User는 testDB의 owner이자 테이블의 owner입니다.
TABLE은 M <= N
즉, N은 M을 상속받고 있습니다.
create table M(a text, b text, c text);
create table N(d text, e text) INHERITS(M);
1번 유저는
INSERT INTO N(a,b,c,d,e) VALUES('v','w','x','y','z');
N table에 값을 입력했습니다.
1번 유저가 B Session의 2번유저에게 select, update, insert, delete권한을
상속관계에 있는 M테이블에게 주었습니다.
1번 USER는 M테이블의 내용을 볼수 있을까요?
--> 없습니다. 최소 select 권한이라도 N테이블에 주어야 되더군요. 저장이야 N테이블에 되어 있을테니까요
장난기가 발동했습니다.
1번 User가 M테이블에 lock table을 하였습니다.
BEGIN;
LOCK M IN EXCLUSIVE MODE; <-- 다른유저는 select 만을 허용하겠다는겁니다.
이때 2번 USER는 쉽게 M 테이블의 내용을 변경할 수 있었습니다.
UPDATE N
SET a='xxx', b='yyy', c='zzz' <--- a,b,c는 M에서 계승받은 컬럼입니다
WHERE a='v' AND b='w' AND c='x';
--------------------------------------------------------------
UPDATED 1
트랜잭션을 종료시키고 1번유저가 테이블을 보니 놀랬습니다.
바뀌었으니까요
하지만
UPDATE M
SET a='xxx', b='yyy', c='zzz' <--- a,b,c는 M에서 계승받은 컬럼입니다
WHERE a='v' AND b='w' AND c='x';
----------------------------------------
하면 행상태에 놓이게 되더군요.
락거나마나 자신의 attribute도 쉽게 자식필드에서 바뀌어 지네요.
엄청 헤깔립니다.이거
a,b,c,d,e가 table N에 저장되어 있어서 그런걸까요?
|