Commit d201f244 authored by pem@mysql.com's avatar pem@mysql.com

Fixed BUG#14256: definer in view definition is not fully qualified

  Changed the parser test for wildcards in hostname to checking for empty
  strings instead (analogous with the test in default_view_definer()),
  since wildcards do appear in the definer's host-part sometimes.
parent ca31cf8d
...@@ -2198,7 +2198,7 @@ r_object_id users_names ...@@ -2198,7 +2198,7 @@ r_object_id users_names
120001a080000542 guser02 120001a080000542 guser02
drop view v1, v2; drop view v1, v2;
drop table t1, t2; drop table t1, t2;
create definer=some_user@__% sql security invoker view v1 as select 1; create definer=some_user@`` sql security invoker view v1 as select 1;
ERROR HY000: View definer is not fully qualified ERROR HY000: View definer is not fully qualified
create definer=some_user@localhost sql security invoker view v1 as select 1; create definer=some_user@localhost sql security invoker view v1 as select 1;
Warnings: Warnings:
......
...@@ -307,3 +307,30 @@ use mysqltest; ...@@ -307,3 +307,30 @@ use mysqltest;
create view v1 as select * from t1; create view v1 as select * from t1;
revoke all privileges on mysqltest.* from mysqltest_1@localhost; revoke all privileges on mysqltest.* from mysqltest_1@localhost;
drop database mysqltest; drop database mysqltest;
drop view if exists v1;
create table t1 as select * from mysql.user where user='';
delete from mysql.user where user='';
flush privileges;
grant all on test.* to 'test14256'@'%';
use test;
create view v1 as select 42;
show create view v1;
View Create View
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`test14256`@`%` SQL SECURITY DEFINER VIEW `v1` AS select 42 AS `42`
select definer into @v1def1 from information_schema.views
where table_schema = 'test' and table_name='v1';
drop view v1;
create definer=`test14256`@`%` view v1 as select 42;
show create view v1;
View Create View
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`test14256`@`%` SQL SECURITY DEFINER VIEW `v1` AS select 42 AS `42`
select definer into @v1def2 from information_schema.views
where table_schema = 'test' and table_name='v1';
drop view v1;
select @v1def1, @v1def2, @v1def1=@v1def2;
@v1def1 @v1def2 @v1def1=@v1def2
test14256@% test14256@% 1
drop user test14256;
insert into mysql.user select * from t1;
flush privileges;
drop table t1;
...@@ -2082,7 +2082,7 @@ drop table t1, t2; ...@@ -2082,7 +2082,7 @@ drop table t1, t2;
# DEFINER information check # DEFINER information check
# #
-- error ER_NO_VIEW_USER -- error ER_NO_VIEW_USER
create definer=some_user@__% sql security invoker view v1 as select 1; create definer=some_user@`` sql security invoker view v1 as select 1;
create definer=some_user@localhost sql security invoker view v1 as select 1; create definer=some_user@localhost sql security invoker view v1 as select 1;
show create view v1; show create view v1;
drop view v1; drop view v1;
......
...@@ -406,3 +406,48 @@ connection root; ...@@ -406,3 +406,48 @@ connection root;
revoke all privileges on mysqltest.* from mysqltest_1@localhost; revoke all privileges on mysqltest.* from mysqltest_1@localhost;
drop database mysqltest; drop database mysqltest;
#
# BUG#14256: definer in view definition is not fully qualified
#
--disable_warnings
drop view if exists v1;
--enable_warnings
# Backup anonymous users and remove them. (They get in the way of
# the one we test with here otherwise.)
create table t1 as select * from mysql.user where user='';
delete from mysql.user where user='';
flush privileges;
# Create the test user
grant all on test.* to 'test14256'@'%';
connect (test14256,localhost,test14256,,test);
connection test14256;
use test;
create view v1 as select 42;
show create view v1;
select definer into @v1def1 from information_schema.views
where table_schema = 'test' and table_name='v1';
drop view v1;
create definer=`test14256`@`%` view v1 as select 42;
show create view v1;
select definer into @v1def2 from information_schema.views
where table_schema = 'test' and table_name='v1';
drop view v1;
select @v1def1, @v1def2, @v1def1=@v1def2;
connection root;
drop user test14256;
# Restore the anonymous users.
insert into mysql.user select * from t1;
flush privileges;
drop table t1;
...@@ -9026,8 +9026,7 @@ view_user: ...@@ -9026,8 +9026,7 @@ view_user:
(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) (LEX_USER*) thd->alloc(sizeof(st_lex_user))))
YYABORT; YYABORT;
view_user->user = $3; view_user->host=$5; view_user->user = $3; view_user->host=$5;
if (strchr(view_user->host.str, wild_many) || if (view_user->host.length == 0)
strchr(view_user->host.str, wild_one))
{ {
my_error(ER_NO_VIEW_USER, MYF(0)); my_error(ER_NO_VIEW_USER, MYF(0));
YYABORT; YYABORT;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment