0
배경
나는 다음과 같다 MySQL의 테이블 G.devTest
이MySQL의 뷰 정의 자 권한과 오류 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
분석
우리는 이 있고 그 열은 id
과 j
이므로 그 오류의 "정의 자/호출자"부분이 관련 항목이어야합니다. 내 사용자 l
,보기의 정의 자 (기본적으로 정의 자 권한을 사용함)에는 약간의 권한이 없어야합니다. 이 결론은 루트 사용자가 만들 때 동일한보기에 액세스 할 수 있다는 사실에 의해 뒷받침됩니다.
하지만, 내 사용자는 G
데이터베이스의 모든 개체에 대한 모든 권한을 가지고
devTestV2
에서 선택 할 수없는 내 사용자의 부족을 무엇
> show grants;
...
| GRANT ALL PRIVILEGES ON `G`.* TO 'l'@'%'
...
?
여기에 무슨 일이 일어나는지 알아 냈습니까? – Barmar
@Barmar Nope! 나는 상황을 피하기 위해 루트 사용자로 뷰를 만드는 것에 의지했다. 아이디어가 있으십니까? – user3029121