2017-04-08 1 views
0

배경

나는 다음과 같다 MySQL의 테이블 G.devTestMySQL의 뷰 정의 자 권한과 오류 1356

> create view devTestV as select * from devTest; 
Query OK, 0 rows affected (0.02 sec) 
> select * from devTestV; 
+----+------+ 
| id | j | 
... 

문제점

: 문제없이이 테이블에

내가 devTest에만 기반이보기를 사용하려면 :

> create view devTestV2 as select a.id, a.j, b.avg from devTest a cross 
join (select avg(j) avg from devTest) b; 

먼저 잘 작동하는 것처럼 보이지만 나는 그것을 선택하려고 할 때, 일이 틀려서 이동 :

> select * from devTestV2; 
ERROR 1356 (HY000): View 'G.devTestV2' references invalid table(s) 
or column(s) or function(s) or definer/invoker of view lack rights to use 
them 

분석

우리는 이 있고 그 열은 idj이므로 그 오류의 "정의 자/호출자"부분이 관련 항목이어야합니다. 내 사용자 l,보기의 정의 자 (기본적으로 정의 자 권한을 사용함)에는 약간의 권한이 없어야합니다. 이 결론은 루트 사용자가 만들 때 동일한보기에 액세스 할 수 있다는 사실에 의해 뒷받침됩니다.

하지만, 내 사용자는 G 데이터베이스의 모든 개체에 대한 모든 권한을 가지고

, 다음, devTestV2에서 선택 할 수없는 내 사용자의 부족을 무엇
> show grants; 
... 
| GRANT ALL PRIVILEGES ON `G`.* TO 'l'@'%' 
... 

?

+0

여기에 무슨 일이 일어나는지 알아 냈습니까? – Barmar

+0

@Barmar Nope! 나는 상황을 피하기 위해 루트 사용자로 뷰를 만드는 것에 의지했다. 아이디어가 있으십니까? – user3029121

답변

0

"보기 만들기 ..."대신 "SQL 보안 초대인보기 만들기 ..."를 시도하십시오. 변경하기 전까지 동일한 문제가있었습니다.