본문 바로가기
MySQL별책부록

8. alter 하지 않고 view의 definer 수정하기

by 모모레 2011. 10. 23.
이번에 MySQL News Letter에 소개된 글로 다음의 글을 번역하여 정리한 것이다. 

http://palominodb.com/blog/2011/10/05/change-views-definer-without-alter-view-how-fix-thousands-views


 MySQL의 View는 보안을 위해 DEFINER와 SQL SECURITY 설정을 통해 VIEW의 접근을 관리한다. 
만약 'user123'@'192.168.1.%'라는 계정을 사용하여 다음의 구문을 실행한다고 가정하자.

CREATE VUEW view1 SELECT * FROM tbl1;

그럼 다음과 같은 구문으로 생성되어 저장된다.

CREATE ALGORITHM=UNDEFINED DEFINER='user123'@'192.168.1.%'
SQL SECURITY DEFINER
VIEW 'view1' AS select <ommitted> from 'tbl1';

 위와 같이 생성한 경우 다음과 같은 문제가 발생할 수 있다. 

'user123'@'192.168.1.%'  계정이 삭제되는 경우 view에 어느 계정도 접근할 수 없다.  

그렇기 때문에  이와 같은 경우 alter view 구문을 사용 하여 definer를 수정하던지 sql security를 수정하게 해줘야 한다.   view가 하나인 경우에는 크게 문제 되지 않지만, 만약 많은 view를 사용중이라면 이것은 굉장히 힘이 많이 드는 일일 수 있다.

이때에 다음과 같은 해결책을 사용하면 쉽게 해결할 수 있다.

 

 
  • /tmp/list_views.txt 리스트는 계정정보를 수정할 필요가 있는 것이다. 
  • /tmp/view_backup.tar는 기존 frm 파일에 대한 백업본이다.
  • 각 view 파일별로 frm 파일을 frm.old파일로 복사하고, sed구문을 사용하여 해당 내용을 변경하여 저장하고, frm.old 파일을 remove 한다.
  • 모든 열린 테이블을 닫고 다시 열어서 변경된 내용이 적용되도록 한다.