SQL Cook: 4. 7 특정 열에 대한 삽입 차단하기

0

SQL_COOK

목록 보기
28/35
post-thumbnail

Q. 어떤 프로그램(소프트웨어)가 특정 테이블의 열에 값을 삽입하는 것을 방지하려고 한다

예를 들어, 어떤 프로그램이(나쁜 놈들) 'EMP' 테이블에 값을 삽입하는 것은 허용하되, 'EMPNO', 'ENAME', 'JOB'열에만 삽입하도록 한다.

못된 놈이라면 다 막는 게 맞지 않을까?
문제가 그렇게 가정하고 있으니 그려러니 한다.

A. 테이블에 표시할 열만 노출되는 VIEW를 생성한다

그런 다음, 모든 삽입 내용이 해당 VIEW를 통과하도록한다.

create view new_emps as
select empno, ename, job from emp;

VIEW에 존재하는 세 개의 필드만 채울 수 있도록 허용된 사용자 및 프로그램이 있을 것이다. 이 부분은 권한 부여와 관련이 있다.
이들 사용자에게 'EMP' 테이블에 대한 삽입 권한은 부여하지 않을 수 있다.

허나, 만약,
다음 쿼리와 같이 단순 VIEW에 삽입(INSERT INTO)를 실행하면, 데이터베이스 서버는 삽입 내용을 기본 테이블로 변환한다.

insert into new_emps
(empno, ename, job)
values(1, 'Jonathan', 'Editor')

위의 쿼리는, 다음과 같이 변환된다.

insert into emp
(empno, ename, job)
values(1, 'Jonathan', 'Editor')

인라인 뷰에 삽입할 수도 있지만, 현재 Oracle에서만 지원된다.

insert into
(select empno, ename, job
	from emp)
    values(1, 'Jonathan', 'Editor')

물론, 인라인 뷰가 아닌 상단의 쿼리 또한 Oracle에서 지원된다.

select * from new_emps;
>>
EMPNO	ENAME	JOB
7839	KING	PRESIDENT
7698	BLAKE	MANAGER
7782	CLARK	MANAGER
7566	JONES	MANAGER
7788	SCOTT	ANALYST
7902	FORD	ANALYST
7369	SMITH	CLERK
7499	ALLEN	SALESMAN
7521	WARD	SALESMAN
7654	MARTIN	SALESMAN
7844	TURNER	SALESMAN
7876	ADAMS	CLERK
7900	JAMES	CLERK
7934	MILLER	CLERK
14 rows selected.

그러나, 이러한 쿼리는 '외부의 잘못된 접근으로부터, 특정 테이블의 열에 값이 삽입되는 것을 방지하려한다'는 주제와는 맞지 않은 듯하다.

VIEW 삽입은 복잡한 주제이며, VIEW에 삽입하는 기능을 사용하기 위해서는, 해당 문제에 관한 벤더 문서를 참조하라는 안내만 나와있을 뿐이다.


'EMP' 테이블을 직접적으로 노출시키지 않기 위해, VIEW 'NEW_EMPS'를 생성하고, 모든 삽입 내용이 'NEW_EMPS'를 통과하도록 의도하는 것 같다.

애초에 VIEW는 보안을 위해서 생성되기도 한다.
수 많은 칼럼들을 노출시키지 않기 위해서, 사용자가 특정 칼럼만을 선택하여 VIEW를 만들고 이에 대한 작업을 처리하기도 한다.

엑세스 권한 부여를 달리함으로써 사용자 지정 VIEW에도 접근을 제한하고, VIEW에 관련된 본 Table에 대한 직접적인 접근을 제한함으로써 보안을 강화하는 형세다.

책에서의 서술이 굉장히 두루뭉술하며, 자세한 내용을 다루고 있지는 않다.

현재로서는,
1. 정보 노출을 막기 위해서는 View를 생성하여 특정 칼럼만을 조회할 것
2. 엑세스 권한을 확고히 할 것
3. View에서 노출하고 있는 열에 대해서는 값의 삽입을 허용하되, 이외의 열에 대한 정보를 감출 것
이 정도가 보안에 대한 최소한의 방법으로 생각된다.
추후 설명에서 서술하는 부분이 있다면 내용을 추가할 수 있도록 해야겠다.

굉장히 실망스러운 설명이었다.

0개의 댓글