# this test mostly test privilege control (what doesn't work # in the embedded server by default). So skip the test in embedded-server mode. -- source include/not_embedded.inc -- source include/testdb_only.inc set local sql_mode=""; set global sql_mode=""; --replace_result 'Tables_in_INFORMATION_SCHEMA (T%)' 'Tables_in_information_schema (T%)' --sorted_result show tables from INFORMATION_SCHEMA like 'T%'; create database `inf%`; create database mbase; use `inf%`; show tables; # # Bug#18113 SELECT * FROM information_schema.xxx crashes server # Bug#17204 second CALL to procedure crashes Server # Crash happened when one selected data from one of INFORMATION_SCHEMA # tables and in order to build its contents server had to open view which # used stored function and table or view on which one had not global or # database-level privileges (e.g. had only table-level or had no # privileges at all). # --disable_view_protocol grant all privileges on `inf%`.* to 'mysqltest_1'@'localhost'; grant all privileges on `mbase`.* to 'mysqltest_1'@'localhost'; create table t1 (f1 int); delimiter |; --enable_prepare_warnings create function func1(curr_int int) returns int begin declare ret_val int; select max(f1) from t1 into ret_val; return ret_val; end| --disable_prepare_warnings delimiter ;| create view v1 as select f1 from t1 where f1 = func1(f1); create function func2() returns int return 1; use mbase; delimiter |; create procedure p1 () begin select table_name from information_schema.key_column_usage order by table_name; end| delimiter ;| create table t1 (f1 int(10) unsigned not null, f2 varchar(100) not null, primary key (f1), unique key (f2)); connect (user1,localhost,mysqltest_1,,"*NO-ONE*"); connection user1; --disable_result_log select * from information_schema.tables; call mbase.p1(); call mbase.p1(); call mbase.p1(); --enable_result_log connection default; use `inf%`; drop user mysqltest_1@localhost; drop table t1; select table_name, table_type, table_comment from information_schema.tables where table_schema='inf%' and func2(); select table_name, table_type, table_comment from information_schema.tables where table_schema='inf%' and func2(); drop view v1; drop function func1; drop function func2; drop database `inf%`; drop procedure mbase.p1; drop database mbase; disconnect user1; # # Bug#18282 INFORMATION_SCHEMA.TABLES provides inconsistent info about invalid views # use test; create table t1 (i int); create function f1 () returns int return (select max(i) from t1); create view v1 as select f1(); create table t2 (id int); create function f2 () returns int return (select max(i) from t2); create view v2 as select f2(); drop table t2; select table_name, table_type, table_comment from information_schema.tables where table_schema='test' order by table_name; drop table t1; select table_name, table_type, table_comment from information_schema.tables where table_schema='test' order by table_name; drop function f1; drop function f2; drop view v1, v2; --enable_view_protocol # # Bug#20543 select on information_schema strange warnings, view, different # schemas/users # # --disable_service_connection create database testdb_1; create user testdb_1@localhost; grant all on testdb_1.* to testdb_1@localhost with grant option; create user testdb_2@localhost; grant all on test.* to testdb_2@localhost with grant option; connect (testdb_1,localhost,testdb_1,,testdb_1); create table t1 (f1 char(4)); create view v1 as select f1 from t1; grant insert on v1 to testdb_2@localhost; create view v5 as select f1 from t1; grant select, show view on v5 to testdb_2@localhost; --error ER_SPECIFIC_ACCESS_DENIED_ERROR create definer=`no_such_user`@`no_such_host` view v6 as select f1 from t1; connection default; use testdb_1; create view v6 as select f1 from t1; grant select, show view on v6 to testdb_2@localhost; create table t2 (f1 char(4)); create definer=`no_such_user`@`no_such_host` view v7 as select * from t2; show fields from testdb_1.v6; show create view testdb_1.v6; show create view testdb_1.v7; show fields from testdb_1.v7; connection testdb_1; create table t3 (f1 char(4), f2 char(4)); create view v3 as select f1,f2 from t3; grant insert(f1), insert(f2) on v3 to testdb_2@localhost; connect (testdb_2,localhost,testdb_2,,test); create view v2 as select f1 from testdb_1.v1; create view v4 as select f1,f2 from testdb_1.v3; show fields from testdb_1.v5; show create view testdb_1.v5; show fields from testdb_1.v6; show create view testdb_1.v6; connection testdb_1; show fields from testdb_1.v7; show create view testdb_1.v7; revoke insert(f1) on v3 from testdb_2@localhost; revoke select,show view on v5 from testdb_2@localhost; connection default; use testdb_1; revoke select,show view on v6 from testdb_2@localhost; connection testdb_2; --error ER_TABLEACCESS_DENIED_ERROR show fields from testdb_1.v5; --error ER_TABLEACCESS_DENIED_ERROR show create view testdb_1.v5; --error ER_TABLEACCESS_DENIED_ERROR show fields from testdb_1.v6; --error ER_TABLEACCESS_DENIED_ERROR show create view testdb_1.v6; --error ER_TABLEACCESS_DENIED_ERROR show fields from testdb_1.v7; --error ER_TABLEACCESS_DENIED_ERROR show create view testdb_1.v7; show create view v4; #--error ER_VIEW_NO_EXPLAIN show fields from v4; show fields from v2; show fields from testdb_1.v1; show create view v2; --error ER_TABLEACCESS_DENIED_ERROR show create view testdb_1.v1; select table_name from information_schema.columns a where a.table_name = 'v2'; select view_definition from information_schema.views a where a.table_name = 'v2'; select view_definition from information_schema.views a where a.table_name = 'testdb_1.v1'; --error ER_VIEW_INVALID select * from v2; connection default; use test; drop view testdb_1.v1, v2, testdb_1.v3, v4; drop database testdb_1; connection testdb_1; disconnect testdb_1; --source include/wait_until_disconnected.inc connection testdb_2; disconnect testdb_2; --source include/wait_until_disconnected.inc connection default; drop user testdb_1@localhost; drop user testdb_2@localhost; # # Bug#22763 Disrepancy between SHOW CREATE VIEW and I_S.VIEWS # create database testdb_1; create table testdb_1.t1 (a int); create view testdb_1.v1 as select * from testdb_1.t1; grant show view on testdb_1.* to mysqltest_1@localhost; grant select on testdb_1.v1 to mysqltest_1@localhost; connect (user1,localhost,mysqltest_1,,"*NO-ONE*"); connection user1; select table_schema, table_name, view_definition from information_schema.views where table_name='v1'; show create view testdb_1.v1; connection default; revoke select on testdb_1.v1 from mysqltest_1@localhost; connection user1; select table_schema, table_name, view_definition from information_schema.views where table_name='v1'; --error ER_TABLEACCESS_DENIED_ERROR show create view testdb_1.v1; connection default; drop user mysqltest_1@localhost; drop database testdb_1; connection user1; disconnect user1; --source include/wait_until_disconnected.inc connection default; set global sql_mode=default; # # MDEV-20549 SQL SECURITY DEFINER does not work for INFORMATION_SCHEMA tables # create user foo@localhost; grant select on test.* to foo@localhost; create procedure rootonly() select 1; create sql security definer view v1d as select current_user(),user from information_schema.processlist; create sql security invoker view v1i as select current_user(),user from information_schema.processlist; create sql security definer view v2d as select table_name from information_schema.tables where table_schema='mysql' and table_name like '%user%'; create sql security invoker view v2i as select table_name from information_schema.tables where table_schema='mysql' and table_name like '%user%'; create sql security definer view v3d as select schema_name from information_schema.schemata where schema_name like '%mysql%'; create sql security invoker view v3i as select schema_name from information_schema.schemata where schema_name like '%mysql%'; create sql security definer view v4d as select routine_name from information_schema.routines where routine_schema='test'; create sql security invoker view v4i as select routine_name from information_schema.routines where routine_schema='test'; create sql security definer view v5d as select view_definition > '' from information_schema.views where table_name='v1d'; create sql security invoker view v5i as select view_definition > '' from information_schema.views where table_name='v1d'; connect foo,localhost,foo; select * from v1d; select * from v1i; select * from v2d; select * from v2i; select * from v3d; select * from v3i; select * from v4d; select * from v4i; select * from v5d; select * from v5i; connection default; select * from v1d; select * from v1i; select * from v2d; select * from v2i; select * from v3d; select * from v3i; select * from v4d; select * from v4i; select * from v5d; select * from v5i; disconnect foo; drop view v1d, v1i, v2d, v2i, v3d, v3i, v4d, v4i, v5d, v5i; drop user foo@localhost; drop procedure rootonly; --enable_service_connection --echo # --echo # MDEV-12459: The information_schema tables for getting temporary tables --echo # info is missing, at least for innodb, there is no --echo # INNODB_TEMP_TABLE_INFO --echo # --echo # ------------------------------- --echo # Test shadowing of a base table --echo # ------------------------------- create database some_db; # Create user without any privileges create user foo@localhost identified by 'bar'; grant create temporary tables on some_db.* to foo@localhost; use some_db; --echo # Test the warning is raised create table t(t int); # This should give warning, since the user can see the table and the name of a # temporary table in the same connection is shadowing the base table name create temporary table t(t int); --echo # Test shadowing of the base table for user with no privileges - no warning connect (con2,localhost,foo,bar,some_db,,); show grants for current_user(); show tables; # User has no grants and cannot see `test.t` and below shouldn't raise any warning create temporary table some_db.t(t int); show warnings; show create table t; disconnect con2; --echo # Give the privileges to the user connection default; grant all privileges on *.* to foo@localhost with grant option; --echo # Test shadowing of the base table for user that has valid privileges - warning connect (con2,localhost,foo,bar,some_db,,); show grants for current_user(); show tables; # The same test as above, but now the user has grants and should see the warning create temporary table t(t int); show create table t; show warnings; disconnect con2; connection default; drop table t; drop table t; drop user foo@localhost; drop database some_db; use test; --echo # --echo # MDEV-28351 Assertion `this->file->children_attached' failed in ha_myisammrg::info --echo # CREATE TABLE t1 (a INT) ENGINE=MyISAM; insert into t1 values (1); CREATE TEMPORARY TABLE t2 (a INT) ENGINE=MERGE UNION=(t1); CREATE TABLE t3 (a INT) ENGINE=MERGE UNION=(t1); --replace_column 10 X 11 X 12 X 13 X 15 X 16 X 22 X SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'test'; DROP TABLE t1,t2,t3;