Question

RDS중: rds-mysql 에 view 업데이트를 하니, 아래와 같은 메시지가 나옵니다. 확인 부탁 드립니다.


MySQL Database Error: Access denied; you need (at least one of) the SUPER privilege(s) for this operation


1. RDS 서비스 메뉴에서 Parameter Groups 항목 선택.

2. 현재 MySQL 인스턴스에 적용된 Parameters Group을 편집한다.

3. 항목 중 log_bin_trust_function_creators라는 항목의 값을 0에서 1로 바꿔준다.(default값으로 0이 설정 되어있다.)


default parameter group은 메트릭 변경이 불가능하시며 새로운 파라미터 그룹을 생성하여 변경하신 뒤 서버 재시작 하셔야 합니다.


Answer


뷰 생성

SQL 구문
CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;


뷰 수정

SQL 구문
CREATE OR REPLACE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;


user가 생성한 해당 database에 관해 superuser 권한을 가지고 싶으신 것이라면 아래 방법을 확인해 주시기 바랍니다.


그래도 동일한 에러가 발생한다면 

definer 에러를 해결하기 위해 아래의 단계도 시도하여 보시기 바랍니다. 

definer 에러는 여러 방법으로 해결할 수 있습니다.

  • definer line 제거

  • definer user 이름 바꾸기 

  • definer 옵션 없이 view를 생성하거나 수정하여 보시기 바랍니다.


==> definer line 제거

/*!50017 DEFINER=`root`@`localhost`*/


이제 line에 다음과 같은 출력이 표시됩니다.

/*!50003 CREATE*/ /*!50003 TRIGGER customer_update AFTER UPDATE ON `customer` FOR EACH ROW


===> definer user 이름 바꾸기

루트 이름을 master user로, localhost를 %host로 바꿉니다.

/*!50003 CREATE*/ /*!50017 DEFINER=`masteruser`@`%`*/ /*!50003 TRIGGER customer_update AFTER UPDATE ON `customer` FOR EACH ROW

참고: 모든 호스트에 대해 %를 와일드카드로 사용할 수 있습니다.

===> definer 옵션 없이 view를 생성하거나 수정하여 보기

참고문서 [3], [4]

위의 방법을 모두 완료하신 후에도 에러가 계속된다면 추가 조사를 위해 아래 언급된 출력을 제공하여 주시기 바랍니다.

1) View 업데이트에 사용하려는 View Syntax를 공유하여 주시기 바랍니다.

2) 업데이트하고자 하는 이미 저장된 View Syntax를 공유하여 주시기 바랍니다. 

- SHOW CREATE VIEW view_name

Or

SHOW CREATE VIEW v\G

3) View를 만든 테이블 구조를 공유합니다.

- SHOW CREATE TABLE table_name

Or

SHOW CREATE TABLE t\G

==========



Reference

▶ 참고문서 [1] : Mysql 뷰 생성
https://dev.mysql.com/doc/refman/8.0/en/create-view.html

▶ 참고문서 [2] : mysqldump를 사용하여 Amazon RDS for MySQL DB 인스턴스로 데이터를 가져올 때 1227 및 정의자 오류를 해결하는 방법
https://repost.aws/ko/knowledge-center/definer-error-mysqldump

▶ 참고문서 [3] : CREATE VIEW 문
# https://dev.mysql.com/doc/refman/5.7/en/create-view.html

▶ 참고문서 [4] : ALTER VIEW 문
https://dev.mysql.com/doc/refman/8.0/en/alter-view.html