mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 11:31:51 +01:00
971bc31dea
into linux.site:/home/omer/source/jrg51
3917 lines
142 KiB
PHP
3917 lines
142 KiB
PHP
#### suite/funcs_1/datadict/datadict_master.inc
|
|
#
|
|
--disable_abort_on_error
|
|
let $message=
|
|
.
|
|
. It is intended that the 3 <engine>__datadict.test files are named this way to be
|
|
. sure they are - in a *full run* of the suite - the first tests done for each
|
|
. storage engine. Using two _ and the order of processing in mysql-test-run.pl
|
|
. ensures this in an easy way.
|
|
.
|
|
. If needed a restart could be implemented later between the storage engines if
|
|
. values changes in the result depending from the position where the
|
|
. *__datadict.test are started. This can be a result of showing e.g. maximum
|
|
. values of the number of rows of tables.
|
|
.
|
|
. This .result file has been checked OK with Linux 5.0.23-bk,
|
|
. ChangeSet@1.2211, 2006-06-28 10:11:43-07:00.
|
|
.;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
#
|
|
let $message= FIXME: There are subtests that are switched off due to known bugs:;
|
|
--source include/show_msg.inc
|
|
#set variable(s) here to be able to switch crashing sub tests with ONE change HERE.
|
|
#change the variable(s) to enable / disable the crashing parts.
|
|
|
|
# different 'logics' are used because sometimes codelines needs to be switched off
|
|
# and otherwise some extra statements needs to be executed as long as the bug is not
|
|
# fixed:
|
|
let $have_bug_11589= 1;
|
|
|
|
#seems not to work: --vertical_results
|
|
eval SELECT $have_bug_11589 AS "have_bug_11589";
|
|
#seems not to work: --horizontal_results
|
|
|
|
# As long as
|
|
# Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill
|
|
# is not fixed, we must switch the ps-protocol for some statements off.
|
|
# If this bug is fixed, please
|
|
# 1. set the following variable to 0
|
|
# 2. check, if the test passes
|
|
# 3. remove the workarounds
|
|
if ($have_bug_11589)
|
|
{
|
|
let $message= There are some statements where the ps-protocol is switched off.
|
|
This may come from the bug listed below, ir from other problems.
|
|
Bug#11589: mysqltest, --ps-protocol, strange output, float/double/real with zerofill;
|
|
--source include/show_msg80.inc
|
|
}
|
|
#
|
|
################################################################################
|
|
|
|
|
|
# loading the tables (data is not really needed in this test) is separated to
|
|
# make it easier in this file to show the message above.
|
|
--source suite/funcs_1/datadict/datadict_load.inc
|
|
|
|
#FIXME: - check for remaining change of object names to standards: db_, tb_, v_, u_, ...
|
|
#FIXME: - check warnings when data is loaded (Data truncated for column ...)
|
|
#FIXME: - change connect() to use less users / connections
|
|
#
|
|
#FIXME: - check for additional 'FIXME' here in the script
|
|
|
|
use information_schema;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
|
|
################################################################################
|
|
#
|
|
# Data Dictionary
|
|
#
|
|
################################################################################
|
|
|
|
let $message= Testcase 3.2.1.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.1: Ensure that every INFORMATION_SCHEMA table can be queried
|
|
# with a SELECT statement, just as if it were an ordinary
|
|
# user-defined table.
|
|
################################################################################
|
|
|
|
# create at least one object for all 'tables' to be checked
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
CREATE DATABASE db_datadict;
|
|
USE db_datadict;
|
|
|
|
CREATE VIEW v1 AS SELECT * FROM information_schema.tables;
|
|
|
|
# try to get the server's name to be able to clean-up the result from machine
|
|
# specific stuff.
|
|
CREATE OR REPLACE VIEW db_datadict.vu1 as
|
|
SELECT grantee AS u
|
|
FROM information_schema.user_privileges;
|
|
CREATE OR REPLACE VIEW db_datadict.vu as
|
|
SELECT DISTINCT u,
|
|
SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,_utf8'@',1))+3 )
|
|
AS server,
|
|
SUBSTRING( u, LENGTH(SUBSTRING_INDEX(u,_utf8'@',1))+3,
|
|
LENGTH( SUBSTRING( u,
|
|
LENGTH( SUBSTRING_INDEX(u, _utf8'@',1)) +3 )) - 1 )
|
|
AS Server_Clean
|
|
FROM db_datadict.vu1;
|
|
--replace_result $SERVER_NAME <SERVER_NAME>
|
|
SELECT * FROM db_datadict.vu order by u;
|
|
|
|
delimiter //;
|
|
CREATE PROCEDURE db_datadict.sp_1()
|
|
BEGIN
|
|
SELECT * FROM db_datadict.v1;
|
|
END//
|
|
delimiter ;//
|
|
|
|
#FIXME 3.2.1.1: add missing objects of each type to have something to select
|
|
#FIXME 3.2.1.1: - FUNCTION
|
|
#FIXME 3.2.1.1: - TRIGGER
|
|
|
|
USE information_schema;
|
|
SHOW tables;
|
|
|
|
select * from schemata ORDER BY 2 DESC, 1 ASC;
|
|
|
|
if ($have_bug_11589)
|
|
{
|
|
--disable_ps_protocol
|
|
}
|
|
--vertical_results
|
|
#SELECT * FROM tables;
|
|
#
|
|
#FIXME 3.2.1.1: we split the "SELECT * FROM tables" in two parts until
|
|
#FIXME 3.2.1.1: Bug #12397: wrong values shown in column CREATE_OPTIONS of
|
|
#FIXME 3.2.1.1: INFORMATION_SCHEMA.TABLES is solved, one with 'more' and one
|
|
#FIXME 3.2.1.1: with 'less' replace
|
|
# 9 AVG_ROW_LENGTH
|
|
# 10 DATA_LENGTH
|
|
# 11 MAX_DATA_LENGTH
|
|
# 12 INDEX_LENGTH
|
|
# 13 DATA_FREE
|
|
# 15 CREATE_TIME
|
|
# 16 UPDATE_TIME
|
|
# 17 CHECK_TIME
|
|
# 20 CREATE_OPTIONS
|
|
--replace_column 9 "#ARL#" 10 "#DL#" 11 "#MDL#" 12 "#IL#" 13 "#DF#" 15 "YYYY-MM-DD hh:mm:ss" 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss" 20 "#CO#"
|
|
SELECT * FROM tables
|
|
WHERE table_schema = 'information_schema';
|
|
# 9 AVG_ROW_LENGTH
|
|
# 10 DATA_LENGTH
|
|
# 11 MAX_DATA_LENGTH
|
|
# 12 INDEX_LENGTH
|
|
# 13 DATA_FREE
|
|
# 15 CREATE_TIME
|
|
# 16 UPDATE_TIME
|
|
# 17 CHECK_TIME
|
|
--replace_column 9 "#ARL#" 10 "#DL#" 11 "#MDL#" 12 "#IL#" 13 "#DF#" 15 "YYYY-MM-DD hh:mm:ss" 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
SELECT * FROM tables
|
|
WHERE NOT( table_schema = 'information_schema');
|
|
--horizontal_results
|
|
--enable_ps_protocol
|
|
|
|
select s.catalog_name, s.schema_name, s.default_character_set_name,
|
|
t.table_type, t.engine
|
|
from schemata s inner join tables t
|
|
ORDER BY s.schema_name, s.default_character_set_name, table_type, engine;
|
|
--source suite/funcs_1/datadict/datadict_bug_12777.inc
|
|
select * from columns;
|
|
select * from character_sets;
|
|
select sum(id) from collations;
|
|
select collation_name, character_set_name into @x,@y
|
|
from collation_character_set_applicability limit 1;
|
|
select @x, @y;
|
|
|
|
--replace_column 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
select * from routines;
|
|
|
|
select count(*) from routines;
|
|
select * from statistics;
|
|
select * from views;
|
|
--replace_result $SERVER_NAME <SERVER_NAME>
|
|
select * from user_privileges order by grantee, privilege_type;
|
|
select * from schema_privileges;
|
|
select * from table_privileges;
|
|
select * from column_privileges;
|
|
select * from table_constraints;
|
|
select * from key_column_usage;
|
|
select count(*) as max_recs from key_column_usage;
|
|
|
|
select max(cardinality) from statistics;
|
|
|
|
select concat("View '",
|
|
table_name, "' is associated with the database '", table_schema, "'.")
|
|
AS "Who is Who for the Views"
|
|
from views;
|
|
|
|
select concat("Table or view '", table_name,
|
|
"' is associated with the database '", table_schema, "'.") as "Who is Who"
|
|
from tables;
|
|
|
|
--replace_result $SERVER_NAME <SERVER_NAME>
|
|
select grantee as "user's having select privilege",
|
|
substring( grantee, length(SUBSTRING_INDEX(grantee,_utf8'@',1))+2 )
|
|
from user_privileges where privilege_type = 'select'
|
|
order by grantee;
|
|
|
|
select all table_schema from schema_privileges limit 0,5;
|
|
|
|
select distinct(privilege_type) from table_privileges;
|
|
|
|
select * from column_privileges
|
|
group by table_schema having table_schema = 'db_datadict';
|
|
|
|
select * from table_constraints limit 0,5;
|
|
select count(*) as max_recs from key_column_usage limit 0,5;
|
|
|
|
select information_schema.tables.table_name as "table name",
|
|
count(distinct(column_name)) as "no of columns in the table"
|
|
from information_schema.tables left outer join information_schema.columns on
|
|
information_schema.tables.table_name = information_schema.columns.table_name
|
|
group by information_schema.tables.table_name;
|
|
|
|
# Reference Manual 22.1.16 - we will add more ...:
|
|
# select * from parameters;
|
|
# select * from referential_constraints;
|
|
# select * from triggers;
|
|
|
|
let $message= root: simple select to check all - and never forget some - tables;
|
|
let $dd_part1= SELECT * FROM;
|
|
let $dd_part2= LIMIT 1;
|
|
--source suite/funcs_1/datadict/datadict_tables.inc
|
|
|
|
# check again, but from different database (will fail due to missing database name)
|
|
use db_datadict;
|
|
|
|
--error 1146
|
|
select * from schemata;
|
|
--error 1146
|
|
select * from tables;
|
|
--error 1146
|
|
select s.catalog_name, s.schema_name, s.default_character_set_name,
|
|
t.table_type, t.engine
|
|
from schemata s inner join tables t
|
|
ORDER BY s.catalog_name, s.schema_name, s.default_character_set_name;
|
|
--error 1146
|
|
select * from columns limit 0, 5;
|
|
--error 1146
|
|
select * from character_sets limit 0, 5;
|
|
--error 1146
|
|
select * from collations limit 0, 5;
|
|
--error 1146
|
|
select * from collation_character_set_applicability limit 0, 5;
|
|
--error 1146
|
|
select * from routines limit 0, 5;
|
|
--error 1146
|
|
select * from statistics limit 0, 5;
|
|
--error 1146
|
|
select * from views limit 0, 5;
|
|
--error 1146
|
|
select * from user_privileges limit 0, 5;
|
|
--error 1146
|
|
select * from schema_privileges limit 0, 5;
|
|
--error 1146
|
|
select * from table_privileges limit 0, 5;
|
|
--error 1146
|
|
select * from column_privileges limit 0, 5;
|
|
--error 1146
|
|
select * from table_constraints limit 0, 5;
|
|
--error 1146
|
|
select * from key_column_usage limit 0, 5;
|
|
# Reference Manual 22.1.16 - we will add more ...:
|
|
# --error 1146
|
|
# select * from parameters;
|
|
# --error 1146
|
|
# select * from referential_constraints;
|
|
# --error 1146
|
|
# select * from triggers;
|
|
let $message= will fail due to missing database name;
|
|
let $dd_part1= SELECT * FROM;
|
|
let $dd_part2=;
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1146.inc
|
|
|
|
# now check from "other" database, but with database name
|
|
select * from information_schema.schemata ORDER BY 2 DESC;
|
|
|
|
#SELECT * FROM information_schema.tables;
|
|
#
|
|
#FIXME 3.2.1.1: we split the "SELECT * FROM tables" in two parts until
|
|
#FIXME 3.2.1.1: Bug #12397: wrong values shown in column CREATE_OPTIONS of
|
|
#FIXME 3.2.1.1: INFORMATION_SCHEMA.TABLES is solved, one with 'more' and one
|
|
#FIXME 3.2.1.1: with 'less' replace
|
|
# 9 AVG_ROW_LENGTH
|
|
# 10 DATA_LENGTH
|
|
# 11 MAX_DATA_LENGTH
|
|
# 12 INDEX_LENGTH
|
|
# 13 DATA_FREE
|
|
# 15 CREATE_TIME
|
|
# 16 UPDATE_TIME
|
|
# 17 CHRCK_TIME
|
|
# 20 CREATE_OPTIONS
|
|
if ($have_bug_11589)
|
|
{
|
|
--disable_ps_protocol
|
|
}
|
|
--vertical_results
|
|
--replace_column 9 "#ARL#" 10 "#DL#" 11 "#MDL#" 12 "#IL#" 13 "#DF#" 15 "YYYY-MM-DD hh:mm:ss" 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss" 20 "#CO#"
|
|
SELECT * FROM information_schema.tables
|
|
WHERE table_schema = 'information_schema';
|
|
# 9 AVG_ROW_LENGTH
|
|
# 10 DATA_LENGTH
|
|
# 11 MAX_DATA_LENGTH
|
|
# 12 INDEX_LENGTH
|
|
# 13 DATA_FREE
|
|
# 15 CREATE_TIME
|
|
# 16 UPDATE_TIME
|
|
# 17 CHRCK_TIME
|
|
--replace_column 9 "#ARL#" 10 "#DL#" 11 "#MDL#" 12 "#IL#" 13 "#DF#" 15 "YYYY-MM-DD hh:mm:ss" 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
SELECT * FROM information_schema.tables
|
|
WHERE NOT( table_schema = 'information_schema');
|
|
--horizontal_results
|
|
--enable_ps_protocol
|
|
|
|
select s.catalog_name, s.schema_name, s.default_character_set_name,
|
|
t.table_type, t.engine
|
|
from information_schema.schemata s inner join information_schema.tables t
|
|
ORDER BY s.schema_name, s.default_character_set_name, table_type, engine;
|
|
|
|
--source suite/funcs_1/datadict/datadict_bug_12777.inc
|
|
select * from information_schema.columns limit 0, 5;
|
|
select * from information_schema.character_sets limit 0, 5;
|
|
select * from information_schema.collations limit 0, 5;
|
|
select * from information_schema.collation_character_set_applicability limit 0, 5;
|
|
--replace_column 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
select * from information_schema.routines limit 0, 5;
|
|
select * from information_schema.statistics limit 0, 5;
|
|
select * from information_schema.views limit 0, 5;
|
|
--replace_result $SERVER_NAME <SERVER_NAME>
|
|
select * from information_schema.user_privileges limit 0, 5;
|
|
select * from information_schema.schema_privileges limit 0, 5;
|
|
select * from information_schema.table_privileges limit 0, 5;
|
|
select * from information_schema.column_privileges limit 0, 5;
|
|
select * from information_schema.table_constraints limit 0, 5;
|
|
select * from information_schema.key_column_usage limit 0, 5;
|
|
select count(*) as max_recs from information_schema.key_column_usage limit 0, 5;
|
|
|
|
# Reference Manual 22.1.16 - we will add more ...:
|
|
# select * from information_schema.parameters;
|
|
# select * from information_schema.referential_constraints;
|
|
# select * from information_schema.triggers;
|
|
|
|
let $message= root: check with db name;
|
|
let $dd_part1= SELECT COUNT(*) FROM information_schema.;
|
|
let $dd_part2=;
|
|
--source suite/funcs_1/datadict/datadict_tables.inc
|
|
|
|
# cleanup
|
|
USE db_datadict;
|
|
DROP VIEW v1, vu1, vu;
|
|
DROP PROCEDURE db_datadict.sp_1;
|
|
USE information_schema;
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.2:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.2: Ensure that queries on an INFORMATION_SCHEMA table can
|
|
# accept all SELECT statement options and are always
|
|
# correctly evaluated.
|
|
################################################################################
|
|
|
|
# currently here only a subset of select statement options is checked, it's still
|
|
# not possible to check here all possible options
|
|
select catalog_name, schema_name, default_character_set_name
|
|
from schemata where schema_name like '%s%';
|
|
|
|
select count(*) as tot_tabs from tables;
|
|
select count(*) as the_cols from columns;
|
|
|
|
select max(maxlen) as the_max from character_sets;
|
|
select * from collations order by id asc limit 0, 5;
|
|
select * from collation_character_set_applicability
|
|
order by character_set_name desc, collation_name limit 0, 5;
|
|
|
|
select routine_definition from routines;
|
|
select * from statistics group by index_name asc limit 0, 5;
|
|
select concat(table_schema, ', ', table_name, ', ', view_definition) view_info
|
|
from views;
|
|
select concat(table_schema, ', ', table_name) "Table_info"
|
|
from tables ORDER BY 1;
|
|
|
|
--replace_result $SERVER_NAME <SERVER_NAME>
|
|
select distinct grantee from user_privileges order by grantee, privilege_type;
|
|
select * from schema_privileges where table_catalog is null limit 0, 5;
|
|
select * from table_privileges where grantee like '%r%' limit 0, 5;
|
|
|
|
select * from column_privileges where table_catalog is not null limit 0, 5;
|
|
select HIGH_PRIORITY * from table_constraints
|
|
group by constraint_name desc limit 0, 5;
|
|
select sum(ordinal_position) from key_column_usage;
|
|
|
|
select * from schemata limit 0,5;
|
|
select * from schemata limit 0,5;
|
|
--replace_result $SERVER_NAME <SERVER_NAME>
|
|
select distinct grantee from user_privileges;
|
|
--replace_result $SERVER_NAME <SERVER_NAME>
|
|
select all grantee from user_privileges order by grantee, privilege_type;
|
|
|
|
select id , character_set_name from collations order by id asc limit 10;
|
|
|
|
select table_catalog from columns
|
|
union all
|
|
select table_catalog from tables limit 0,5;
|
|
select table_catalog from columns
|
|
union
|
|
select table_catalog from tables limit 0,5;
|
|
|
|
select all schema_name from information_schema.schemata;
|
|
|
|
# the $ENGINE_TYPE variable is used here ONLY to have 3 different file names in
|
|
# the three datadict testcases innodb_*, memory_* and myisam_*
|
|
eval SELECT *
|
|
INTO OUTFILE '../tmp/out.$ENGINE_TYPE.file'
|
|
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
|
|
LINES TERMINATED BY '\n'
|
|
FROM schemata LIMIT 0, 5;
|
|
|
|
USE test;
|
|
|
|
eval SELECT *
|
|
INTO OUTFILE '../tmp/out.$ENGINE_TYPE.db.file'
|
|
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
|
|
LINES TERMINATED BY '\n'
|
|
FROM information_schema.schemata
|
|
WHERE schema_name LIKE 'db_%';
|
|
|
|
# check also with a 'simple' user
|
|
CREATE USER user_3212@localhost;
|
|
GRANT ALL ON db_datadict.* TO user_3212@localhost;
|
|
# OBN: The following line was added following the fix to bug 28181
|
|
# where queries to information_schema will fail if exporting to
|
|
# a file without having the FILE attribute
|
|
GRANT FILE ON *.* TO user_3212@localhost;
|
|
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u3212,localhost,user_3212,,db_datadict);
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
# no db given --> db_datadict.schema does not exist
|
|
--error 1146
|
|
eval SELECT *
|
|
INTO OUTFILE '../tmp/out.$ENGINE_TYPE.user.file'
|
|
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
|
|
LINES TERMINATED BY '\n'
|
|
FROM schemata LIMIT 0, 5;
|
|
--error 1146
|
|
eval SELECT *
|
|
FROM schemata LIMIT 0, 5;
|
|
|
|
eval SELECT *
|
|
INTO OUTFILE '../tmp/out.$ENGINE_TYPE.user.db.file'
|
|
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
|
|
LINES TERMINATED BY '\n'
|
|
FROM information_schema.schemata
|
|
WHERE schema_name LIKE 'db_%';
|
|
|
|
eval SELECT *
|
|
FROM information_schema.schemata
|
|
WHERE schema_name LIKE 'db_%';
|
|
|
|
USE information_schema;
|
|
|
|
eval SELECT *
|
|
INTO OUTFILE '../tmp/out.$ENGINE_TYPE.user_2.file'
|
|
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
|
|
LINES TERMINATED BY '\n'
|
|
FROM schemata LIMIT 0, 5;
|
|
|
|
eval SELECT *
|
|
FROM schemata LIMIT 0, 5;
|
|
|
|
eval SELECT *
|
|
INTO OUTFILE '../tmp/out.$ENGINE_TYPE.user_2.db.file'
|
|
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
|
|
LINES TERMINATED BY '\n'
|
|
FROM information_schema.schemata
|
|
WHERE schema_name LIKE 'db_%';
|
|
|
|
eval SELECT *
|
|
FROM information_schema.schemata
|
|
WHERE schema_name LIKE 'db_%';
|
|
|
|
disconnect u3212;
|
|
connection default;
|
|
USE information_schema;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
use db_datadict;
|
|
select table_catalog "1", table_schema "2", table_name "3", column_name "4"
|
|
from information_schema.columns
|
|
union
|
|
select table_catalog, table_schema, table_name,
|
|
concat( "*** type = ", table_type )
|
|
from information_schema.tables
|
|
order by 3, 4 desc, 1, 2 limit 30;
|
|
|
|
use information_schema;
|
|
--source suite/funcs_1/datadict/datadict_bug_12777.inc
|
|
select table_catalog "1", table_schema "2", table_name "3", column_name "4"
|
|
from columns
|
|
union
|
|
select table_catalog, table_schema, table_name,
|
|
concat( "*** type = ", table_type )
|
|
from tables
|
|
order by 3, 4 desc, 1, 2 limit 30;
|
|
|
|
# cleanup
|
|
DROP USER user_3212@localhost;
|
|
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.3:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.3: Ensure that no user may execute an INSERT statement on any
|
|
# INFORMATION_SCHEMA table.
|
|
################################################################################
|
|
|
|
#FIXME: in this block we had --error 1288 until Mid Sep05, check the change!
|
|
--error 1044
|
|
insert into schemata (catalog_name, schema_name, default_character_set_name, sql_path)
|
|
values ('null', 'db1', 'latin1', 'null');
|
|
--error 1044
|
|
insert into tables (table_schema, table_name)values('db_datadict', 't1');
|
|
--error 1044
|
|
insert into columns (table_name, column_name)values('t3', 'f2');
|
|
--error 1044
|
|
insert into character_sets (character_set_name, default_collate_name, description, maxlen)
|
|
values('cp1251', 'cp1251_general_ci', 'windows cyrillic', 1);
|
|
--error 1044
|
|
insert into collations ( collation_name, character_set_name, id, is_default, is_compiled, sortlen)
|
|
values ('cp1251_bin', 'cp1251', 50, '', '', 0);
|
|
--error 1044
|
|
insert into collation_character_set_applicability (collation_name, character_set_name)
|
|
values (' big5_chinese_ci', 'big6');
|
|
--error 1044
|
|
insert into routines(routine_name, routine_type ) values ('p2', 'procedure');
|
|
--error 1044
|
|
insert into statistics(table_schema, table_name, index_name)
|
|
values ('mysql', 'db', 'primary');
|
|
--error 1044
|
|
insert into views(table_schema, table_name) values ('db2', 'v2');
|
|
--error 1044
|
|
insert into user_privileges (privilege_type, is_grantable) values ('select', 'yes');
|
|
--error 1044
|
|
insert into schema_privileges (table_schema, privilege_type) values('db2', 'insert');
|
|
--error 1044
|
|
insert into table_privileges (able_schema, table_name, privilege_type)
|
|
values('db2', 'v2', 'insert');
|
|
--error 1044
|
|
insert into column_privileges (table_name, column_name, privilege_type)
|
|
values ('t3', 'f3', 'insert');
|
|
--error 1044
|
|
insert into table_constraints ( constraint_schema, constraint_name, table_schema)
|
|
values ('primary', 'mysql', 'user');
|
|
--error 1044
|
|
insert into key_column_usage (constraint_schema, constraint_name, table_name)
|
|
values ('mysql', 'primary', 'db');
|
|
|
|
# insert through a procedure
|
|
--disable_warnings
|
|
drop procedure if exists db_datadict.sp_4_1_3;
|
|
--enable_warnings
|
|
|
|
delimiter //;
|
|
create procedure db_datadict.sp_4_1_3()
|
|
begin
|
|
insert into information_schema.schema_privileges (table_schema,privilege_type)
|
|
values('db2','insert');
|
|
end//
|
|
delimiter ;//
|
|
|
|
#FIXME: check for the diffs Win ./. Linux
|
|
SELECT table_schema, privilege_type FROM information_schema.schema_privileges
|
|
WHERE table_schema LIKE 'db%';
|
|
|
|
--error 1044
|
|
call db_datadict.sp_4_1_3();
|
|
|
|
#FIXME: check for the diffs Win ./. Linux
|
|
SELECT table_schema, privilege_type FROM information_schema.schema_privileges
|
|
WHERE table_schema LIKE 'db%';
|
|
|
|
# cleanup
|
|
drop procedure db_datadict.sp_4_1_3;
|
|
|
|
# insert into information_schema as a limited user
|
|
|
|
CREATE USER user_4_1_3@localhost;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u413,localhost,user_4_1_3,,test);
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
use information_schema;
|
|
|
|
#FIXME: check later the change from 1288 to 1044 (since Mid Sep05)
|
|
--error 1044
|
|
insert into table_constraints ( constraint_schema, constraint_name, table_schema)
|
|
values ('primary', 'mysql', 'user');
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.4:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.4: Ensure that no user may execute an UPDATE statement on any
|
|
# INFORMATION_SCHEMA table.
|
|
################################################################################
|
|
|
|
use information_schema;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
#FIXME: check later the change from 1288 to 1044 (since Mid Sep05) in the whole next block
|
|
--error 1044
|
|
update schemata set schema_name = 'db5' where default_character_set_name = 'latin1';
|
|
--error 1044
|
|
update tables set table_schema = 'db_datadict1' where table_name = 't1';
|
|
--error 1044
|
|
update columns set table_name = 't4' where column_name = 'f2';
|
|
--error 1044
|
|
update character_sets set character_set_name = 'cp1252' where maxlen = 1;
|
|
--error 1044
|
|
update collations set collation_name = 'cp1253_bin'
|
|
where character_set_name = 'cp1251';
|
|
--error 1044
|
|
update collation_character_set_applicability set collation_name = 'big6_chinese_ci'
|
|
where character_set_name = 'big6';
|
|
--error 1044
|
|
update routines set routine_name = p2 where routine_body = 'sql';
|
|
--error 1044
|
|
update statistics set table_schema = 'mysql1' where table_name = 'db';
|
|
--error 1044
|
|
update views set table_schema = 'db3' where table_name = 'v1';
|
|
--error 1044
|
|
update user_privileges set privilege_type = 'insert' where is_grantable = 'yes';
|
|
--error 1044
|
|
update schema_privileges set table_schema = 'db2' where privilege_type = 'select';
|
|
--error 1044
|
|
update table_privileges set table_name = 'v3' where privilege_type = 'select';
|
|
--error 1044
|
|
update column_privileges set table_name = 't4' where column_name = 'f3';
|
|
--error 1044
|
|
update table_constraints set constraint_schema = 'primary'
|
|
where table_schema = 'proc';
|
|
--error 1044
|
|
update key_column_usage set table_name = 'db1' where constraint_name = 'primary';
|
|
|
|
# update through a procedure
|
|
--disable_warnings
|
|
drop procedure if exists db_datadict.sp_4_1_4;
|
|
--enable_warnings
|
|
|
|
delimiter //;
|
|
create procedure db_datadict.sp_4_1_4()
|
|
begin
|
|
update information_schema.routines set routine_name = 'p2'
|
|
where routine_name = 'sp_4_1_4';
|
|
end//
|
|
delimiter ;//
|
|
|
|
#FIXME: check for the diffs Win ./. Linux
|
|
--replace_column 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
select * from information_schema.routines;
|
|
|
|
--error 1044
|
|
call db_datadict.sp_4_1_4();
|
|
|
|
#FIXME: check for the diffs Win ./. Linux
|
|
--replace_column 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
select * from information_schema.routines;
|
|
|
|
# cleanup
|
|
drop procedure db_datadict.sp_4_1_4;
|
|
|
|
# update information_schema as a limited user
|
|
|
|
connection u413;
|
|
|
|
use information_schema;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
#FIXME: check later the change from 1288 to 1044 (since Mid Sep05)
|
|
--error 1044
|
|
update user_privileges set privilege_type = 'insert' where is_grantable = 'yes';
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
#
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.5:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.5: Ensure that no user may execute a DELETE statement on any
|
|
# INFORMATION_SCHEMA table.
|
|
################################################################################
|
|
|
|
use information_schema;
|
|
|
|
let $message= root: DELETE FROM any table in IS;
|
|
let $dd_part1= DELETE FROM;
|
|
let $dd_part2=;
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
|
|
#FIXME: check later the change from 1288 to 1044 (since Mid Sep05) in the whole next block
|
|
--error 1044
|
|
delete from schemata where schema_name = 'mysql';
|
|
--error 1044
|
|
delete from tables where table_name = 'abc';
|
|
--error 1044
|
|
delete from columns;
|
|
--error 1044
|
|
delete from character_sets;
|
|
--error 1044
|
|
delete from collations;
|
|
--error 1044
|
|
delete from collation_character_set_applicability;
|
|
--error 1044
|
|
delete from routines;
|
|
--error 1044
|
|
delete from statistics;
|
|
--error 1044
|
|
delete from views;
|
|
--error 1044
|
|
delete from user_privileges;
|
|
--error 1044
|
|
delete from schema_privileges;
|
|
--error 1044
|
|
delete from table_privileges;
|
|
--error 1044
|
|
delete from column_privileges;
|
|
--error 1044
|
|
delete from table_constraints;
|
|
--error 1044
|
|
delete from key_column_usage;
|
|
|
|
# delete through a procedure
|
|
--disable_warnings
|
|
drop procedure if exists db_datadict.sp_4_1_5;
|
|
--enable_warnings
|
|
|
|
delimiter //;
|
|
create procedure db_datadict.sp_4_1_5()
|
|
begin
|
|
delete from information_schema.column_privileges;
|
|
end//
|
|
delimiter ;//
|
|
|
|
--error 1044
|
|
call db_datadict.sp_4_1_5();
|
|
|
|
# cleanup
|
|
drop procedure db_datadict.sp_4_1_5;
|
|
|
|
# delete from information_schema as a limited user
|
|
|
|
connection u413;
|
|
|
|
use information_schema;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
#FIXME: check later the change from 1288 to 1044 (since Mid Sep05)
|
|
--error 1044
|
|
delete from tables where table_name = 'abc';
|
|
|
|
disconnect u413;
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
# cleanup
|
|
DROP USER user_4_1_3@localhost;
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.6:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.6: Ensure that no user may create an INFORMATION_SCHEMA base
|
|
# table.
|
|
################################################################################
|
|
|
|
use information_schema;
|
|
|
|
let $message= root: create a table with a name of an IS table directly in IS;
|
|
let $dd_part1= CREATE TABLE;
|
|
let $dd_part2= ( c1 INT );
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
#FIXME solved - 3.2.1.6: check for better error message - 42S02: Unknown table '<xxx>' in <db> ?
|
|
--error 1109
|
|
create table t1 (f1 int, f2 int, f3 int);
|
|
|
|
use db_datadict;
|
|
|
|
#FIXME: check correct error message - HY000 Can't create/write to file '.\information_schema\columns.frm' (Errcode: 2)
|
|
let $message= root: create a table with a name of an IS table from other db;
|
|
let $dd_part1= CREATE TABLE information_schema.;
|
|
let $dd_part2= ( c1 INT );
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
#FIXME solved - 3.2.1.6: check for better error message - 42S02: Unknown table '<xxx>' in <db> ?
|
|
--error 1109
|
|
create table information_schema.t1 (f1 int, f2 int, f3 int);
|
|
|
|
# create a table in information_schema as a limited user with sufficient permissions
|
|
CREATE USER user_4_1_6@localhost;
|
|
|
|
grant all on *.* to user_4_1_6@localhost;
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
SHOW GRANTS FOR user_4_1_6@localhost;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u2, localhost, user_4_1_6, , information_schema);
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
use information_schema;
|
|
|
|
let $message= user: create a table with a name of an IS table directly in IS;
|
|
let $dd_part1= CREATE TABLE;
|
|
let $dd_part2= ( c1 INT );
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
#FIXME solved - 3.2.1.6: check for better error message - 42S02: Unknown table '<xxx>' in <db> ?
|
|
--error 1109
|
|
create table t1 (f1 int, f2 int, f3 int);
|
|
|
|
use test;
|
|
|
|
#FIXME 3.2.1.6: check correct error message - HY000 Can't create/write to file '.\information_schema\columns.frm' (Errcode: 2)
|
|
let $message= user: create a table with a name of an IS table from other db;
|
|
let $dd_part1= CREATE TABLE information_schema.;
|
|
let $dd_part2= ( c1 INT );
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
#FIXME solved - 3.2.1.6: check for better error message - 42S02: Unknown table '<xxx>' in <db> ?
|
|
--error 1109
|
|
create table information_schema.t1 (f1 int, f2 int, f3 int);
|
|
|
|
#cleanup
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
disconnect u2;
|
|
DROP USER user_4_1_6@localhost;
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.7:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.7: Ensure that no user may create an INFORMATION_SCHEMA view.
|
|
################################################################################
|
|
|
|
use information_schema;
|
|
|
|
let $message= root: create a view with a name of an IS table directly in IS;
|
|
let $dd_part1= CREATE VIEW ;
|
|
let $dd_part2= AS SELECT * FROM mysql.time_zone;
|
|
#FIXME: check change from error 1 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
|
|
--error 1109
|
|
CREATE VIEW v1 AS SELECT * FROM information_schema.schemata;
|
|
|
|
USE db_datadict;
|
|
|
|
let $message= root: create a view with a name of an IS table from other db;
|
|
let $dd_part1= CREATE VIEW information_schema.;
|
|
let $dd_part2= AS SELECT * FROM mysql.time_zone;
|
|
#FIXME: check change from error 1 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
|
|
# ... but creating a view that 'uses' the information_schema is allowed:
|
|
CREATE VIEW v1 AS SELECT * FROM information_schema.columns;
|
|
|
|
SELECT * FROM v1 LIMIT 5;
|
|
|
|
# create a view in information_schema as a limited user with sufficient permissions
|
|
CREATE USER user_4_1_7@localhost;
|
|
|
|
GRANT ALL ON db_datadict.* TO user_4_1_7@localhost;
|
|
#FIXME: check that GRANT ON i_s is no longer allowed
|
|
--error 1044
|
|
GRANT ALL ON information_schema.* TO user_4_1_7@localhost;
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u3, localhost, user_4_1_7, , db_datadict);
|
|
use information_schema;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
let $message= user: create a view with a name of an IS table directly in IS;
|
|
let $dd_part1= CREATE VIEW ;
|
|
let $dd_part2= AS SELECT * FROM db_datadict.v1;
|
|
#FIXME: check change from error 1 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
--error 1109
|
|
create view v1 as select * from table_privileges;
|
|
|
|
use db_datadict;
|
|
|
|
let $message= user: create a view with a name of an IS table from other db;
|
|
let $dd_part1= CREATE VIEW information_schema.;
|
|
let $dd_part2= AS SELECT * FROM db_datadict.v1;
|
|
#FIXME: check change from error 1 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
disconnect u3;
|
|
|
|
# cleanup
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
DROP USER user_4_1_7@localhost;
|
|
DROP VIEW db_datadict.v1;
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.8:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.8: Ensure that no user may create an index on an
|
|
# INFORMATION_SCHEMA table.
|
|
################################################################################
|
|
|
|
use information_schema;
|
|
|
|
#FIXME: check later the change from 1288 to 1044 (since Mid Sep05)
|
|
--error 1044
|
|
create index i1 on schemata(schema_name);
|
|
--error 1044
|
|
create index i2 on tables(table_schema);
|
|
--error 1044
|
|
create index i3 on columns(table_name);
|
|
|
|
--error 1044
|
|
create index i4 on character_sets(character_set_name);
|
|
--error 1044
|
|
create index i5 on collations( collation_name);
|
|
--error 1044
|
|
create index i6 on collation_character_set_applicability(collation_name);
|
|
|
|
--error 1044
|
|
create index i7 on routines(routine_name);
|
|
--error 1044
|
|
create index i8 on statistics(table_schema);
|
|
--error 1044
|
|
create index i9 on views(table_schema);
|
|
|
|
--error 1044
|
|
create index i10 on user_privileges(privilege_type);
|
|
--error 1044
|
|
create index i11 on schema_privileges(table_schema);
|
|
--error 1044
|
|
create index i12 on table_privileges(able_schema);
|
|
|
|
--error 1044
|
|
create index i13 on column_privileges(table_name);
|
|
--error 1044
|
|
create index i14 on table_constraints(constraint_schema);
|
|
--error 1044
|
|
create index i15 on key_column_usage(constraint_schema);
|
|
--error 1044
|
|
create index i16 on triggers(trigger_name);
|
|
|
|
use db_datadict;
|
|
--error 1044
|
|
create index i15 on information_schema.key_column_usage(constraint_schema);
|
|
|
|
use information_schema;
|
|
|
|
# create an index on an information_schema table as a limited user with sufficient permissions
|
|
CREATE USER user_4_1_8@localhost;
|
|
|
|
grant select, index on *.* to user_4_1_8@localhost;
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u4, localhost, user_4_1_8, , test);
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
use information_schema;
|
|
|
|
--error 1044
|
|
create index i1 on schemata(schema_name);
|
|
--error 1044
|
|
create index i2 on tables(table_schema);
|
|
--error 1044
|
|
create index i3 on columns(table_name);
|
|
|
|
--error 1044
|
|
create index i4 on character_sets(character_set_name);
|
|
--error 1044
|
|
create index i5 on collations( collation_name);
|
|
--error 1044
|
|
create index i6 on collation_character_set_applicability(collation_name);
|
|
|
|
--error 1044
|
|
create index i7 on routines(routine_name);
|
|
--error 1044
|
|
create index i8 on statistics(table_schema);
|
|
--error 1044
|
|
create index i9 on views(table_schema);
|
|
|
|
--error 1044
|
|
create index i10 on user_privileges(privilege_type);
|
|
--error 1044
|
|
create index i11 on schema_privileges(table_schema);
|
|
--error 1044
|
|
create index i12 on table_privileges(able_schema);
|
|
|
|
--error 1044
|
|
create index i13 on column_privileges(table_name);
|
|
--error 1044
|
|
create index i14 on table_constraints(constraint_schema);
|
|
--error 1044
|
|
create index i15 on key_column_usage(constraint_schema);
|
|
--error 1044
|
|
create index i16 on triggers(trigger_name);
|
|
|
|
use db_datadict;
|
|
--error 1044
|
|
create index i15 on information_schema.key_column_usage(constraint_schema);
|
|
|
|
disconnect u4;
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
# cleanup
|
|
DROP USER user_4_1_8@localhost;
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.9:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.9: Ensure that no user may alter the definition of an
|
|
# INFORMATION_SCHEMA table.
|
|
################################################################################
|
|
|
|
#FIXME: 3.2.1.9 check for better error message than ERROR 42S02: Table 'information_schema.schemata' doesn't exist
|
|
|
|
# first simple check all known - so we never forget one ...
|
|
let $message= root: alter a table from other db;
|
|
let $dd_part1= ALTER TABLE information_schema.;
|
|
let $dd_part2= ADD f1 INT;
|
|
#FIXME: check change from error 1146 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
use information_schema;
|
|
let $message= root: alter a table from directly;
|
|
let $dd_part1= ALTER TABLE ;
|
|
let $dd_part2= ADD f1 INT;
|
|
#FIXME: check change from error 1146 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
# now more detailed checks
|
|
--error 1044
|
|
alter table schemata add f1 int;
|
|
--error 1044
|
|
alter table tables drop primary key;
|
|
--error 1044
|
|
alter table columns add f1 int;
|
|
--error 1044
|
|
alter table character_sets disable keys;
|
|
--error 1044
|
|
alter table collations enable keys;
|
|
--error 1044
|
|
alter table collation_character_set_applicability add f1 int;
|
|
--error 1044
|
|
alter table routines discard tablespace;
|
|
--error 1044
|
|
alter table statistics import tablespace;
|
|
--error 1044
|
|
alter table views drop column table_name;
|
|
--error 1044
|
|
alter table user_privileges drop index privilege_type;
|
|
--error 1044
|
|
alter table schema_privileges drop column is_grantable;
|
|
--error 1044
|
|
alter table table_privileges order by constraint_type;
|
|
--error 1044
|
|
alter table column_privileges rename to aaxyz;
|
|
--error 1044
|
|
alter table table_constraints order by schema_name;
|
|
--error 1044
|
|
alter table key_column_usage rename to information_schema.aabxyz;
|
|
--error 1044
|
|
alter table triggers rename to information_schema.sql_mode;
|
|
# Alter an information_schema table as a limited user with sufficient permissions
|
|
|
|
CREATE USER user_4_1_9@localhost;
|
|
|
|
grant select, alter, create, insert on *.* to user_4_1_9@localhost;
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u5, localhost, user_4_1_9, , db_datadict);
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
use db_datadict;
|
|
|
|
let $message= user: alter a table from other db;
|
|
let $dd_part1= ALTER TABLE information_schema.;
|
|
let $dd_part2= ADD f1 INT;
|
|
#FIXME: check change from error 1146 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
use information_schema;
|
|
let $message= user: alter a table from directly;
|
|
let $dd_part1= ALTER TABLE ;
|
|
let $dd_part2= ADD f1 INT;
|
|
#FIXME: check change from error 1146 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
disconnect u5;
|
|
|
|
# cleanup
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
DROP USER user_4_1_9@localhost;
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.10:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.10: Ensure that no user may drop an INFORMATION_SCHEMA table.
|
|
################################################################################
|
|
|
|
use information_schema;
|
|
|
|
let $message= root: drop a table from IS;
|
|
let $dd_part1= DROP TABLE ;
|
|
let $dd_part2=;
|
|
#FIXME: check change from error 1051 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
use db_datadict;
|
|
|
|
let $message= root: drop a table from other db;
|
|
let $dd_part1= DROP TABLE information_schema.;
|
|
let $dd_part2=;
|
|
#FIXME: check change from error 1051 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
use information_schema;
|
|
|
|
# drop an information_schema table as a limited user with sufficient permissions
|
|
|
|
CREATE USER user_4_1_10@localhost;
|
|
|
|
GRANT SELECT, DROP ON *.* TO user_4_1_10@localhost;
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u6,localhost,user_4_1_10,,db_datadict);
|
|
|
|
use information_schema;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
let $message= user: drop a table from IS;
|
|
let $dd_part1= DROP TABLE ;
|
|
let $dd_part2=;
|
|
#FIXME: check change from error 1051 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
use db_datadict;
|
|
|
|
let $message= user: drop a table from other db;
|
|
let $dd_part1= DROP TABLE information_schema.;
|
|
let $dd_part2=;
|
|
#FIXME: check change from error 1051 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
disconnect u6;
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
# cleanup
|
|
DROP USER user_4_1_10@localhost;
|
|
|
|
# Try to carry out information_schema modification operations with a user other than root having SUPER privileges
|
|
CREATE USER user_4_1_11@localhost;
|
|
|
|
GRANT SUPER ON *.* TO user_4_1_11@localhost;
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u7,localhost,user_4_1_11, ,test);
|
|
|
|
use information_schema;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
--error 1044
|
|
drop table routines;
|
|
|
|
--error 1044
|
|
alter table collations enable keys;
|
|
|
|
--error 1044
|
|
create index i5 on collations( collation_name );
|
|
|
|
--error 1109
|
|
create view v1 as select * from schemata;
|
|
|
|
--error 1044
|
|
delete from columns;
|
|
|
|
--error 1044
|
|
update columns set table_name = 't4' where column_name = 'f2';
|
|
|
|
--error 1044
|
|
insert into collations ( collation_name, character_set_name, id, is_default,
|
|
is_compiled, sortlen)
|
|
values ('cp1251_bin', 'cp1251', 50, '', '', 0);
|
|
|
|
disconnect u7;
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
DROP USER user_4_1_11@localhost;
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.11:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.11: Ensure that no user may move an INFORMATION_SCHEMA table
|
|
# to any other database.
|
|
################################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
|
|
CREATE DATABASE db_datadict;
|
|
CREATE USER 'u_6_401011'@'localhost';
|
|
|
|
#FIXME: check that GRANT ON i_s is no longer allowed
|
|
--error 1044
|
|
GRANT ALL ON information_schema.* TO 'u_6_401011'@'localhost';
|
|
GRANT ALL ON db_datadict.* TO 'u_6_401011'@'localhost';
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--error 1044
|
|
ALTER TABLE information_schema.schemata RENAME db_datadict.schemata;
|
|
|
|
let $message= root: move table to other DB;
|
|
let $dd_part1= ALTER TABLE information_schema.;
|
|
let $dd_part2= RENAME db_datadict.tb_01;
|
|
#FIXME: check change from error 1146 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u_6_401011, localhost, u_6_401011, , db_datadict);
|
|
|
|
USE information_schema;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
--error 1044
|
|
ALTER TABLE information_schema.schemata RENAME db_datadict.schemata;
|
|
|
|
let $message= user: move table to other DB;
|
|
let $dd_part1= ALTER TABLE information_schema.;
|
|
let $dd_part2= RENAME db_datadict.tb_01;
|
|
#FIXME: check change from error 1146 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
disconnect u_6_401011;
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
#cleanup
|
|
--disable_warnings
|
|
#DROP DATABASE db_datadict;
|
|
DROP TABLE IF EXISTS db_datadict.schemata;
|
|
DROP USER 'u_6_401011'@'localhost';
|
|
--enable_warnings
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.12:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.12: Ensure that no user may directly add to, alter, or delete
|
|
# any data in an INFORMATION_SCHEMA table.
|
|
################################################################################
|
|
|
|
# first as root a DELETE check on all tables
|
|
let $message= root: delete from IS tables;
|
|
let $dd_part1= DELETE FROM information_schema.;
|
|
let $dd_part2=;
|
|
#FIXME: check change from error 1288 to 1044
|
|
--source suite/funcs_1/datadict/datadict_tables_error_1044.inc
|
|
# check UPDATE for all ...
|
|
--error 1044
|
|
UPDATE information_schema.tables SET table_name = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.columns SET table_name = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.statistics SET table_name = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.views SET table_name = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.table_privileges SET table_name = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.column_privileges SET table_name = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.table_constraints SET table_name = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.key_column_usage SET table_name = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.schemata SET catalog_name = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.character_sets SET description = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.collations SET character_set_name = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.collation_character_set_applicability
|
|
SET character_set_name = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.routines SET routine_type = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.user_privileges SET grantee = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.schema_privileges SET grantee = 't_4711';
|
|
--error 1044
|
|
UPDATE information_schema.triggers SET sql_mode = 't_4711';
|
|
|
|
CREATE USER 'u_6_401012'@'localhost';
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u_6_401012, localhost, u_6_401012, , test);
|
|
|
|
use information_schema;
|
|
|
|
--error 1044
|
|
insert into information_schema.schemata (catalog_name, schema_name,
|
|
default_character_set_name, sql_path)
|
|
values (null, information_schema1, utf16, null);
|
|
#FIXME: check later the change from 1142 to 1044 (since Mid Sep05)
|
|
--error 1044
|
|
alter table information_schema.schemata rename db_datadict1.schemata;
|
|
#FIXME: check later the change from 1146 to 1044 (since Mid Sep05)
|
|
--error 1044
|
|
alter table information_schema.tables drop column checksum;
|
|
--error 1044
|
|
alter table information_schema.statistics modify packed int;
|
|
--error 1044
|
|
alter table information_schema.routines modify created int not null;
|
|
--error 1044
|
|
alter table information_schema.key_column_usage drop column ordinal_position;
|
|
--error 1044
|
|
alter table information_schema.table_privileges
|
|
change privilege_type rights_approved varchar(32);
|
|
--error 1044
|
|
update columns set table_name = 't4' where column_name = 'f2';
|
|
--error 1044
|
|
delete from information_schema.collations;
|
|
|
|
disconnect u_6_401012;
|
|
|
|
# cleanup
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
--disable_warnings
|
|
drop table if exists db_datadict1.schemata;
|
|
DROP USER 'u_6_401012'@'localhost';
|
|
--enable_warnings
|
|
#-------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.13:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.13: Ensure that the creation of any new database object
|
|
# (e.g. table or column) automatically inserts all relevant
|
|
# information on that object into every appropriate
|
|
# INFORMATION_SCHEMA table.
|
|
################################################################################
|
|
|
|
use information_schema;
|
|
|
|
let $dbname=db_datadict;
|
|
let $message= first check status >before< creating the objects ...;
|
|
--source suite/funcs_1/datadict/datadict_show_schema.inc
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
CREATE DATABASE db_datadict;
|
|
USE db_datadict;
|
|
|
|
eval create table res_t_401013(f1 char(10), f2 char(25), f3 int)
|
|
engine = $ENGINE_TYPE;
|
|
create view res_v_401013 as select * from res_t_401013;
|
|
CREATE USER u_6_401013@localhost;
|
|
create procedure sp_6_401013() select 'db_datadict';
|
|
create function fn_6_401013() returns int return 0;
|
|
create index i_6_401013 on res_t_401013(f3);
|
|
|
|
use information_schema;
|
|
|
|
let $message= now check whether all new objects exists in IS ...;
|
|
--source suite/funcs_1/datadict/datadict_show_schema.inc
|
|
|
|
# cleanup objects
|
|
use db_datadict;
|
|
drop index i_6_401013 on res_t_401013;
|
|
drop table db_datadict.res_t_401013;
|
|
drop view db_datadict.res_v_401013;
|
|
DROP USER u_6_401013@localhost;
|
|
drop procedure sp_6_401013;
|
|
drop function fn_6_401013;
|
|
drop database db_datadict;
|
|
|
|
use information_schema;
|
|
|
|
let $message= and now check whether all objects are removed from IS ...;
|
|
--source suite/funcs_1/datadict/datadict_show_schema.inc
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.14:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.14: Ensure that the alteration of any existing database object
|
|
# automatically updates all relevant information on that
|
|
# object in every appropriate INFORMATION_SCHEMA table.
|
|
################################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
CREATE DATABASE db_datadict;
|
|
USE db_datadict;
|
|
|
|
create table res_t_401014(f1 char(10), f2 text(25), f3 int);
|
|
create view res_v_401014 as select * from res_t_401014;
|
|
create procedure sp_6_401014() select 'db_datadict';
|
|
create function fn_6_401014() returns int return 0;
|
|
|
|
# check current information in information_schema
|
|
|
|
let $dbname=db_datadict;
|
|
let $message= show existing objects >before< changing them ...;
|
|
--source suite/funcs_1/datadict/datadict_show_schema.inc
|
|
|
|
# alter objects
|
|
|
|
use db_datadict;
|
|
|
|
alter table res_t_401014 change f1 ff1 int;
|
|
alter table res_t_401014 engine = innodb;
|
|
alter table res_t_401014 change f3 f3_new bigint;
|
|
alter view res_v_401014 as select ff1 from res_t_401014;
|
|
alter procedure sp_6_401014 sql security invoker;
|
|
alter function fn_6_401014 comment 'updated comments';
|
|
alter database db_datadict character set utf8;
|
|
|
|
# check updated information in information_schema
|
|
let $message= now check whether the changes are visible in IS ...;
|
|
--source suite/funcs_1/datadict/datadict_show_schema.inc
|
|
|
|
|
|
# cleanup
|
|
|
|
use db_datadict;
|
|
drop table db_datadict.res_t_401014;
|
|
drop view db_datadict.res_v_401014;
|
|
drop procedure sp_6_401014;
|
|
drop function fn_6_401014;
|
|
drop database db_datadict;
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.15:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.15: Ensure that the dropping of any existing database object
|
|
# automatically deletes all relevant information on that
|
|
# object from every appropriate INFORMATION_SCHEMA table.
|
|
################################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
CREATE DATABASE db_datadict;
|
|
USE db_datadict;
|
|
|
|
create table res_t_401015(f1 char(10), f2 text(25), f3 int);
|
|
create view res_v_401015 as select * from res_t_401015;
|
|
CREATE USER u_6_401015@localhost;
|
|
create procedure sp_6_401015() select 'test';
|
|
create function fn_6_401015() returns int return 0;
|
|
create index i_6_401015 on res_t_401015(f3);
|
|
|
|
let $dbname=db_datadict;
|
|
let $message= show existing objects >before< dropping them ...;
|
|
--source suite/funcs_1/datadict/datadict_show_schema.inc
|
|
|
|
use db_datadict;
|
|
drop index i_6_401015 on res_t_401015;
|
|
drop table db_datadict.res_t_401015;
|
|
drop view db_datadict.res_v_401015;
|
|
DROP USER u_6_401015@localhost;
|
|
drop procedure sp_6_401015;
|
|
drop function fn_6_401015;
|
|
#drop database db_datadict;
|
|
|
|
let $message= now check they are really gone ...;
|
|
--source suite/funcs_1/datadict/datadict_show_schema.inc
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.16:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.16: Ensure that no user may use any INFORMATION_SCHEMA table to
|
|
# determine any information on a database and/or its
|
|
# structure unless authorized to get that information.
|
|
################################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
CREATE DATABASE db_datadict;
|
|
|
|
CREATE DATABASE db_hidden;
|
|
USE db_hidden;
|
|
CREATE TABLE tb_hidden ( c1 TEXT );
|
|
|
|
USE db_datadict;
|
|
|
|
CREATE TABLE res_t_401016(f1 char(10),f2 text(25),f3 int);
|
|
CREATE TABLE res_t_401016_1(f1 char(10),f2 text(25),f3 int);
|
|
|
|
CREATE USER 'u_6_401016'@'localhost';
|
|
GRANT SELECT ON db_datadict.res_t_401016 TO 'u_6_401016'@'localhost';
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u_6_401016, localhost, u_6_401016, , test);
|
|
|
|
USE information_schema;
|
|
|
|
SELECT table_schema, table_name, engine
|
|
FROM TABLES;
|
|
# WHERE table_name LIKE 'res_t_401016%';
|
|
|
|
SHOW TABLES;
|
|
SELECT * FROM schemata;
|
|
|
|
disconnect u_6_401016;
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
#FIXME: check that GRANT ON i_s is no longer allowed
|
|
--error 1044
|
|
grant usage on information_schema.* to 'u_6_401016'@'localhost';
|
|
FLUSH PRIVILEGES;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u_6_401016_1, localhost, u_6_401016, , db_datadict);
|
|
|
|
USE information_schema;
|
|
SHOW TABLES;
|
|
SELECT * FROM schemata;
|
|
|
|
disconnect u_6_401016_1;
|
|
|
|
# all tables are checked again later with permission tests
|
|
|
|
# cleanup
|
|
connection default;
|
|
use db_datadict;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
DROP USER 'u_6_401016'@'localhost';
|
|
drop table res_t_401016;
|
|
drop table res_t_401016_1;
|
|
DROP DATABASE db_hidden;
|
|
#drop database db_datadict;
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.17:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.17: Ensure that the SELECT privilege is granted TO PUBLIC WITH
|
|
# GRANT OPTION on every INFORMATION_SCHEMA table.
|
|
################################################################################
|
|
|
|
CREATE USER 'u_6_401017'@'localhost';
|
|
|
|
#FIXME: check that GRANT ON i_s is no longer allowed
|
|
--error 1044
|
|
grant select on information_schema.* to u_6_401017@localhost;
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u_6_401017, localhost, u_6_401017, , test);
|
|
|
|
use information_schema;
|
|
|
|
select * from collation_character_set_applicability;
|
|
select * from schemata;
|
|
select table_name from tables;
|
|
--source suite/funcs_1/datadict/datadict_bug_12777.inc
|
|
select table_name, column_name, column_type from columns;
|
|
select character_set_name from character_sets;
|
|
select collation_name from collations;
|
|
select routine_name, routine_type from routines;
|
|
select table_name, index_name from statistics;
|
|
select table_name from views;
|
|
select privilege_type from user_privileges;
|
|
select grantee, privilege_type from schema_privileges;
|
|
select * from table_privileges;
|
|
select column_name, privilege_type from column_privileges;
|
|
select table_name,constraint_type from table_constraints;
|
|
select table_schema, table_name, column_name from key_column_usage;
|
|
|
|
disconnect u_6_401017;
|
|
|
|
# cleanup
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
DROP USER 'u_6_401017'@'localhost';
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.18:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.18: Ensure that the CREATE VIEW privilege on an
|
|
# INFORMATION_SCHEMA table may be granted to any user.
|
|
################################################################################
|
|
|
|
CREATE USER 'u_6_401018'@'localhost';
|
|
|
|
#FIXME: check GRANT on IS
|
|
--error 1044
|
|
GRANT CREATE VIEW ON information_schema.* TO 'u_6_401018'@'localhost';
|
|
GRANT ALL ON db_datadict.* TO 'u_6_401018'@'localhost';
|
|
|
|
SHOW GRANTS FOR 'u_6_401018'@'localhost';
|
|
FLUSH PRIVILEGES;
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
CREATE DATABASE db_datadict;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u_6_401018, localhost, u_6_401018, , test);
|
|
|
|
USE db_datadict;
|
|
|
|
create view db_datadict.v_401018 as
|
|
select * from information_schema.schemata;
|
|
SELECT * FROM v_401018 ORDER BY 2 DESC;
|
|
|
|
disconnect u_6_401018;
|
|
|
|
#cleanup
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
DROP USER 'u_6_401018'@'localhost';
|
|
DROP DATABASE db_datadict;
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.19:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.19: Ensure that no other privilege on an INFORMATION_SCHEMA
|
|
# table is granted, or may be granted, to any user.
|
|
################################################################################
|
|
|
|
CREATE USER 'u_6_401019'@'localhost';
|
|
|
|
#FIXME: check GRANT on IS
|
|
--error 1044
|
|
grant alter on information_schema.* to 'u_6_401019'@'localhost';
|
|
|
|
#FIXME: check GRANT on IS
|
|
--error 1044
|
|
grant alter routine on information_schema.* to 'u_6_401019'@'localhost';
|
|
|
|
#FIXME: check GRANT on IS
|
|
--error 1044
|
|
grant create on information_schema.* to 'u_6_401019'@'localhost';
|
|
|
|
#FIXME: check GRANT on IS
|
|
--error 1044
|
|
grant create routine on information_schema.* to 'u_6_401019'@'localhost';
|
|
|
|
#FIXME: check GRANT on IS
|
|
--error 1044
|
|
grant create temporary tables
|
|
on information_schema.* to 'u_6_401019'@'localhost';
|
|
|
|
#FIXME: check GRANT on IS
|
|
--error 1044
|
|
grant delete on information_schema.* to 'u_6_401019'@'localhost';
|
|
|
|
#FIXME: check GRANT on IS
|
|
--error 1044
|
|
grant drop on information_schema.* to 'u_6_401019'@'localhost';
|
|
|
|
#FIXME: check GRANT on IS
|
|
--error 1044
|
|
grant execute on information_schema.* to 'u_6_401019'@'localhost';
|
|
|
|
#FIXME: check GRANT on IS
|
|
--error 1044
|
|
grant index on information_schema.* to 'u_6_401019'@'localhost';
|
|
|
|
#FIXME: check GRANT on IS
|
|
--error 1044
|
|
grant insert on information_schema.* to 'u_6_401019'@'localhost';
|
|
|
|
#FIXME: check GRANT on IS
|
|
--error 1044
|
|
grant lock tables on information_schema.* to 'u_6_401019'@'localhost';
|
|
|
|
#FIXME: check GRANT on IS
|
|
--error 1044
|
|
grant update on information_schema.* to 'u_6_401019'@'localhost';
|
|
|
|
SELECT * FROM information_schema.table_privileges
|
|
WHERE table_schema = "information_schema";
|
|
SELECT * FROM information_schema.column_privileges
|
|
WHERE table_schema = "information_schema";
|
|
|
|
# cleanup
|
|
DROP USER 'u_6_401019'@'localhost';
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.1.20:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.1.20: Ensure that USE INFORMATION_SCHEMA allows the user to
|
|
# switch to the INFORMATION_SCHEMA database, for query
|
|
# purposes only.
|
|
################################################################################
|
|
|
|
CREATE USER 'u_6_401020'@'localhost';
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u_6_401020, localhost, u_6_401020, , test);
|
|
|
|
USE information_schema;
|
|
SELECT * FROM schemata;
|
|
|
|
--error 1109
|
|
CREATE TABLE tb_not_allowed ( col TEXT );
|
|
#FIXME 3.2.1.20: bad message: ERROR 42S02: Unknown table 'tb_not_allowed' in information_schema
|
|
#FIXME 3.2.1.20: better: ERROR 42000: Access denied for user 'u_6_401020'@'localhost' to database 'information_schema'
|
|
|
|
--error 1109
|
|
create view res_v1 as select * from information_schema.schemata;
|
|
|
|
--error 1044
|
|
alter table schemata modify catalog_name varchar(255);
|
|
|
|
--error 1044
|
|
update schemata set catalog_name = 'abc'
|
|
where schema_name = 'information_schema';
|
|
|
|
delimiter //;
|
|
--error ER_BAD_DB_ERROR
|
|
CREATE PROCEDURE sp_3_2_1_20()
|
|
BEGIN
|
|
INSERT INTO information_schema.schema_privileges (table_schema,privilege_type)
|
|
VALUES('db2','insert');
|
|
END//
|
|
delimiter ;//
|
|
|
|
--error 1044
|
|
DELETE FROM schemata WHERE schema_name = 'information_schema';
|
|
|
|
disconnect u_6_401020;
|
|
|
|
# cleanup
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
DROP USER 'u_6_401020'@'localhost';
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.2.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.2.1: Ensure that the INFORMATION_SCHEMA.CHARACTER_SETS
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# CHARACTER_SET_NAME (shows a character set name),
|
|
# DEFAULT_COLLATE_NAME (shows the name of the default
|
|
# collation for that character set),
|
|
# DESCRIPTION (shows a descriptive name for that character
|
|
# set),
|
|
# MAXLEN (shows the number of bytes used to store each
|
|
# character supported by that character set).
|
|
################################################################################
|
|
|
|
let $is_table= character_sets;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.2.2:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.2.2: Ensure that the table shows the relevant information on
|
|
# every character set for which the current user or PUBLIC
|
|
# have the USAGE privilege.
|
|
################################################################################
|
|
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
SELECT * FROM information_schema.character_sets;
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.2.3:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.2.3: Ensure that the table shows the relevant information on
|
|
# every character set for which the current user or PUBLIC
|
|
# have the USAGE privilege.
|
|
################################################################################
|
|
|
|
# Test requirement is erroneous... we cannot grant / revoke privilege for using
|
|
# a character set.
|
|
# ------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.3.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.3.1: Ensure that the INFORMATION_SCHEMA.COLLATIONS
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# COLLATION_NAME (shows a collation name),
|
|
# CHARACTER_SET_NAME (shows the name of the character set to
|
|
# which the collation applies),
|
|
# ID (shows a numeric identifier for that collation/character
|
|
# set combination),
|
|
# IS_DEFAULT (shows whether the collation is the default
|
|
# collation for the character set shown),
|
|
# IS_COMPILED (indicates whether the collation is compiled
|
|
# into the MySQL server),
|
|
# SORTLEN (shows a value related to the amount of memory
|
|
# required to sort strings using this
|
|
# collation/character set combination).
|
|
################################################################################
|
|
|
|
let $is_table= collations;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.3.2:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.3.2: Ensure that the table shows the relevant information on
|
|
# every collation for which the current user or PUBLIC have
|
|
# the USAGE privilege.
|
|
################################################################################
|
|
|
|
SELECT * FROM collations;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.3.3:;
|
|
--source include/show_msg80.inc
|
|
|
|
###############################################################################
|
|
# Testcase 3.2.3.3: Ensure that the table does not show any information on any
|
|
# collations for which the current user and PUBLIC have no
|
|
# USAGE privilege.
|
|
################################################################################
|
|
|
|
# Test requirement is erroneous... we cannot grant / revoke privilege for using
|
|
# a collation.
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.4.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.4.1: Ensure that the
|
|
# INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# COLLATION_NAME (shows the name of a collation),
|
|
# CHARACTER_SET_NAME (shows the name of a character set to
|
|
# which that collation applies).
|
|
################################################################################
|
|
|
|
let $is_table= collation_character_set_applicability;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.4.2:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.4.2: Ensure that the table shows the relevant information on
|
|
# every collation/character set combination for which the
|
|
# current user or PUBLIC have the USAGE privilege.
|
|
################################################################################
|
|
|
|
SELECT * FROM collation_character_set_applicability;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.4.3:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.4.3: Ensure that the table does not show any information on any
|
|
# collation/character set combinations for which the current
|
|
# user and PUBLIC have no USAGE privilege.
|
|
################################################################################
|
|
|
|
# Test requirement is erroneous... we cannot grant / revoke privilege for using a collation.
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.5.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.5.1: Ensure that the INFORMATION_SCHEMA.COLUMN_PRIVILEGES
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# GRANTEE (shows the name of a user who has either granted,
|
|
# or been granted a column privilege),
|
|
# TABLE_CATALOG (always shows NULL),
|
|
# TABLE_SCHEMA (shows the name of the schema, or database,
|
|
# in which the table for which a column privilege has
|
|
# been granted resides),
|
|
# TABLE_NAME (shows the name of the table),
|
|
# COLUMN_NAME (shows the name of the column on which a
|
|
# column privilege has been granted),
|
|
# PRIVILEGE_TYPE (shows the type of privilege that was
|
|
# granted; must be either SELECT, INSERT, UPDATE, or
|
|
# REFERENCES),
|
|
# IS_GRANTABLE (shows whether that privilege was granted
|
|
# WITH GRANT OPTION).
|
|
################################################################################
|
|
|
|
let $is_table= column_privileges;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.5.2 + 3.2.5.3 + 3.2.5.4:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.5.2: Ensure that the table shows the relevant information on
|
|
# every column privilege which has been granted to the
|
|
# current user or PUBLIC, or which was granted by the current
|
|
# user.
|
|
################################################################################
|
|
# Testcase 3.2.5.3: Ensure that the table does not show any information on any
|
|
# column privilege which was granted to any user other than
|
|
# the current user or PUBLIC, or which was granted by any
|
|
# user other than the current user.
|
|
################################################################################
|
|
# Testcase 3.2.5.4: Ensure that the table does not show any information on any
|
|
# privileges that are not column privileges for the current
|
|
# user.
|
|
################################################################################
|
|
|
|
CREATE USER 'user_1'@'localhost';
|
|
CREATE USER 'user_2'@'localhost';
|
|
CREATE USER 'user_3'@'localhost';
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
CREATE DATABASE db_datadict;
|
|
USE db_datadict;
|
|
|
|
CREATE TABLE db_datadict.res_t40502 (f1 INT, f2 DECIMAL, f3 TEXT);
|
|
|
|
GRANT SELECT(f1, f3) ON db_datadict.res_t40502 TO 'user_1'@'localhost';
|
|
GRANT INSERT(f1) ON db_datadict.res_t40502 TO 'user_1'@'localhost';
|
|
GRANT UPDATE(f2) ON db_datadict.res_t40502 TO 'user_1'@'localhost';
|
|
GRANT SELECT(f2) ON db_datadict.res_t40502 TO 'user_2'@'localhost';
|
|
GRANT INSERT, SELECT ON db_datadict.res_t40502 TO 'user_3'@'localhost';
|
|
GRANT SELECT(f3) ON db_datadict.res_t40502 TO 'user_3'@'localhost';
|
|
|
|
GRANT INSERT, SELECT ON db_datadict.res_t40502 TO 'user_3'@'localhost' WITH GRANT OPTION;
|
|
GRANT ALL ON db_datadict.* TO 'user_3'@'localhost';
|
|
|
|
let $select= SELECT * FROM information_schema.column_privileges
|
|
WHERE grantee LIKE "'user%"
|
|
ORDER BY grantee, table_name, column_name, privilege_type;
|
|
eval $select;
|
|
|
|
let $message= FIXME: Check it is correct that the following GRANT changes ALL privs that user_1 has;
|
|
--source include/show_msg.inc
|
|
|
|
GRANT UPDATE(f3) ON db_datadict.res_t40502 TO 'user_1'@'localhost' WITH GRANT OPTION;
|
|
|
|
eval $select;
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_5_1, localhost, user_1, , db_datadict);
|
|
eval $select;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_5_2, localhost, user_2, , db_datadict);
|
|
eval $select;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_5_3, localhost, user_3, , db_datadict);
|
|
|
|
let $message= FIXME: check it is correct that granted TABLES doesn_t occur in COLUMN_PRIVILEGES;
|
|
--source include/show_msg.inc
|
|
SELECT * FROM information_schema.table_privileges WHERE grantee LIKE "'user%";
|
|
SELECT * FROM information_schema.schema_privileges WHERE grantee LIKE "'user%";
|
|
eval $select;
|
|
GRANT SELECT(f1, f3) ON db_datadict.res_t40502 TO 'user_2'@'localhost';
|
|
|
|
let $message= FIXME: check whether it is intended that *my* grants to others are *NOT* shown here;
|
|
--source include/show_msg.inc
|
|
eval $select;
|
|
|
|
connection user_5_2;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
eval $select;
|
|
|
|
disconnect user_5_1;
|
|
disconnect user_5_2;
|
|
disconnect user_5_3;
|
|
|
|
#cleanup
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS db_datadict.res_t40502;
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
|
|
DROP USER 'user_1'@'localhost';
|
|
DROP USER 'user_2'@'localhost';
|
|
DROP USER 'user_3'@'localhost';
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.6.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.6.1: Ensure that the INFORMATION_SCHEMA.COLUMNS table has the
|
|
# following columns, in the following order:
|
|
#
|
|
# TABLE_CATALOG (always shows NULL),
|
|
# TABLE_SCHEMA (shows the name of the database, or schema,
|
|
# in which an accessible table resides),
|
|
# TABLE_NAME (shows the name of an accessible table),
|
|
# COLUMN_NAME (shows the name of a column within that
|
|
# table),
|
|
# ORDINAL_POSITION (shows the ordinal position of that
|
|
# column in that table),
|
|
# COLUMN_DEFAULT (shows the column's default value),
|
|
# IS_NULLABLE (shows whether the column may accept NULL
|
|
# values),
|
|
# DATA_TYPE (shows the column's defined data type; keyword
|
|
# only),
|
|
# CHARACTER_MAXIMUM_LENGTH (shows, for a string column, the
|
|
# column's defined maximum length in characters;
|
|
# otherwise NULL),
|
|
# CHARACTER_OCTET_LENGTH (shows, for a string column, the
|
|
# column's defined maximum length in octets;
|
|
# otherwise NULL),
|
|
# NUMERIC_PRECISION (shows, for a numeric column, the
|
|
# column's or data type's defined precision;
|
|
# otherwise NULL),
|
|
# NUMERIC_SCALE (shows, for a numeric column, the column's
|
|
# or data type's defined scale; otherwise NULL),
|
|
# CHARACTER_SET_NAME (shows, for a character string column,
|
|
# the column's default character set; otherwise NULL),
|
|
# COLLATION_NAME (shows, for a character string column, the
|
|
# column's default collation; otherwise NULL),
|
|
# COLUMN_TYPE (shows the column's complete, defined data
|
|
# type),
|
|
# COLUMN_KEY (shows whether the column is indexed; possible
|
|
# values are PRI if the column is part of a PRIMARY
|
|
# KEY, UNI if the column is part of a UNIQUE key, MUL
|
|
# if the column is part of an index key that allows
|
|
# duplicates),
|
|
# EXTRA (shows any additional column definition information,
|
|
# e.g. whether the column was defined with the
|
|
# AUTO_INCREMENT attribute),
|
|
# PRIVILEGES (shows the privileges available to the user on
|
|
# the column),
|
|
# COLUMN_COMMENT (shows the comment, if any, defined for the
|
|
# comment; otherwise NULL).
|
|
################################################################################
|
|
|
|
let $is_table= columns;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.6.2 + 3.2.6.3:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.6.2: Ensure that the table shows the relevant information on the
|
|
# columns of every table that is accessible to the current
|
|
# user or to PUBLIC.
|
|
################################################################################
|
|
# Testcase 3.2.6.3: Ensure that the table does not show any information on the
|
|
# columns of any table which is not accessible to the current
|
|
# user or PUBLIC.
|
|
################################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
CREATE DATABASE db_datadict;
|
|
|
|
CREATE USER 'user_1'@'localhost';
|
|
CREATE USER 'user_2'@'localhost';
|
|
|
|
USE db_datadict;
|
|
|
|
create table t_6_406001(f1 char(10), f2 text, f3 date, f4 int);
|
|
grant select(f1, f2) on db_datadict.t_6_406001 to 'user_1'@'localhost';
|
|
|
|
create table t_6_406002(f1 char(10), f2 text, f3 date, f4 int);
|
|
GRANT INSERT(f1, f2) ON db_datadict.t_6_406002 TO 'user_2'@'localhost';
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
let $select= SELECT * FROM information_schema.columns
|
|
ORDER BY table_schema, table_name, ordinal_position;
|
|
|
|
# show view of user root
|
|
--source suite/funcs_1/datadict/datadict_bug_12777.inc
|
|
eval $select;
|
|
|
|
# reconnect to mysql with user credential of user u_6_406002_1.
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_6_1, localhost, user_1, , db_datadict);
|
|
--source suite/funcs_1/datadict/datadict_bug_12777.inc
|
|
eval $select;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_6_2, localhost, user_2, , db_datadict);
|
|
--source suite/funcs_1/datadict/datadict_bug_12777.inc
|
|
eval $select;
|
|
|
|
disconnect user_6_1;
|
|
disconnect user_6_2;
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
let $message= Show the quotient of COL and CML for all COLUMNS;
|
|
--source include/show_msg.inc
|
|
SELECT DISTINCT
|
|
CHARACTER_OCTET_LENGTH / CHARACTER_MAXIMUM_LENGTH AS COL_CML,
|
|
DATA_TYPE,
|
|
CHARACTER_SET_NAME,
|
|
COLLATION_NAME
|
|
FROM information_schema.columns
|
|
WHERE CHARACTER_OCTET_LENGTH / CHARACTER_MAXIMUM_LENGTH = 1
|
|
ORDER BY CHARACTER_SET_NAME, COLLATION_NAME, COL_CML;
|
|
|
|
#FIXME 3.2.6.2: check the value 2.0079 tinytext ucs2 ucs2_general_ci
|
|
SELECT DISTINCT
|
|
CHARACTER_OCTET_LENGTH / CHARACTER_MAXIMUM_LENGTH AS COL_CML,
|
|
DATA_TYPE,
|
|
CHARACTER_SET_NAME,
|
|
COLLATION_NAME
|
|
FROM information_schema.columns
|
|
WHERE CHARACTER_OCTET_LENGTH / CHARACTER_MAXIMUM_LENGTH <> 1
|
|
ORDER BY CHARACTER_SET_NAME, COLLATION_NAME, COL_CML;
|
|
|
|
SELECT DISTINCT
|
|
CHARACTER_OCTET_LENGTH / CHARACTER_MAXIMUM_LENGTH AS COL_CML,
|
|
DATA_TYPE,
|
|
CHARACTER_SET_NAME,
|
|
COLLATION_NAME
|
|
FROM information_schema.columns
|
|
WHERE CHARACTER_OCTET_LENGTH / CHARACTER_MAXIMUM_LENGTH IS NULL
|
|
ORDER BY CHARACTER_SET_NAME, COLLATION_NAME, COL_CML;
|
|
|
|
echo --> CHAR(0) is allowed (see manual), and here both CHARACHTER_* values;
|
|
echo --> are 0, which is intended behavior, and the result of 0 / 0 IS NULL;
|
|
--source suite/funcs_1/datadict/datadict_bug_12777.inc
|
|
SELECT CHARACTER_OCTET_LENGTH / CHARACTER_MAXIMUM_LENGTH AS COL_CML,
|
|
TABLE_SCHEMA,
|
|
TABLE_NAME,
|
|
COLUMN_NAME,
|
|
DATA_TYPE,
|
|
CHARACTER_MAXIMUM_LENGTH,
|
|
CHARACTER_OCTET_LENGTH,
|
|
CHARACTER_SET_NAME,
|
|
COLLATION_NAME,
|
|
COLUMN_TYPE
|
|
FROM information_schema.columns
|
|
ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION;
|
|
|
|
#cleanup
|
|
DROP USER 'user_1'@'localhost';
|
|
DROP USER 'user_2'@'localhost';
|
|
DROP TABLE IF EXISTS t_6_406001;
|
|
DROP TABLE IF EXISTS t_6_406002;
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.7.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.7.1: Ensure that the INFORMATION_SCHEMA.KEY_COLUMN_USAGE
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# CONSTRAINT_CATALOG (always shows NULL),
|
|
# CONSTRAINT_SCHEMA (shows the database, or schema, in which
|
|
# an accessible constraint, or index, resides),
|
|
# CONSTRAINT_NAME (shows the name of the accessible
|
|
# constraint),
|
|
# TABLE_CATALOG (always shows NULL),
|
|
# TABLE_SCHEMA (shows the database, or schema, in which the
|
|
# table constrained by that constraint resides),
|
|
# TABLE_NAME (shows the name of the table constrained by the
|
|
# constraint),
|
|
# COLUMN_NAME (shows the name of a column that is the index
|
|
# key, or part of the index key),
|
|
# ORDINAL_POSITION (shows the ordinal position of the column
|
|
# within the constraint index),
|
|
# POSITION_IN_UNIQUE_CONSTRAINT (shows, for a foreign key
|
|
# column, the ordinal position of the referenced
|
|
# column within the referenced unique index;
|
|
# otherwise NULL).
|
|
# added with 5.0.6: REFERENCED_TABLE_SCHEMA,
|
|
# REFERENCED_TABLE_NAME,
|
|
# REFERENCED_COLUMN_NAME
|
|
################################################################################
|
|
|
|
let $is_table= key_column_usage;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.7.2 + 3.2.7.3:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.7.2: Ensure that the table shows the relevant information on
|
|
# every column, defined to be part of an index key, which is
|
|
# accessible to the current user or to PUBLIC.
|
|
################################################################################
|
|
# Testcase 3.2.7.3: Ensure that the table does not show any information on any
|
|
# indexed column that is not accessible to the current user
|
|
# or PUBLIC.
|
|
################################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
CREATE DATABASE db_datadict;
|
|
|
|
CREATE USER 'user_1'@'localhost';
|
|
CREATE USER 'user_2'@'localhost';
|
|
|
|
USE db_datadict;
|
|
|
|
CREATE TABLE t_40701 (
|
|
f1 INT NOT NULL, PRIMARY KEY(f1),
|
|
f2 INT, INDEX f2_ind(f2)
|
|
);
|
|
GRANT SELECT ON t_40701 to 'user_1'@'localhost';
|
|
|
|
CREATE TABLE t_40702 (
|
|
f1 INT NOT NULL, PRIMARY KEY(f1),
|
|
f2 INT, INDEX f2_ind(f2)
|
|
);
|
|
GRANT SELECT ON t_40702 to 'user_2'@'localhost';
|
|
#FIXME: add foreign keys
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
let $select= SELECT * FROM information_schema.key_column_usage
|
|
ORDER BY constraint_catalog, constraint_schema, constraint_name,
|
|
table_catalog, table_schema, table_name, ordinal_position;
|
|
|
|
# show view of user root
|
|
eval $select;
|
|
|
|
# reconnect to mysql with user credential of user u_6_406002_1.
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_7_1, localhost, user_1, , db_datadict);
|
|
eval $select;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_7_2, localhost, user_2, , db_datadict);
|
|
eval $select;
|
|
|
|
disconnect user_7_1;
|
|
disconnect user_7_2;
|
|
|
|
#cleanup
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
DROP USER 'user_1'@'localhost';
|
|
DROP USER 'user_2'@'localhost';
|
|
DROP TABLE t_40701;
|
|
DROP TABLE t_40702;
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.8.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.8.1: Ensure that the INFORMATION_SCHEMA.ROUTINES
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# SPECIFIC_NAME (shows the name of an accessible stored
|
|
# procedure, or routine),
|
|
# ROUTINE_CATALOG (always shows NULL),
|
|
# ROUTINE_SCHEMA (shows the database, or schema, in which
|
|
# the routine resides),
|
|
# ROUTINE_NAME (shows the same stored procedure name),
|
|
# ROUTINE_TYPE (shows whether the stored procedure is a
|
|
# procedure or a function),
|
|
# DTD_IDENTIFIER (shows, for a function, the complete
|
|
# data type definition of the value the function will
|
|
# return; otherwise NULL),
|
|
# ROUTINE_BODY (shows the language in which the stored
|
|
# procedure is written; currently always SQL),
|
|
# ROUTINE_DEFINITION (shows as much of the routine body as
|
|
# is possible in the allotted space),
|
|
# EXTERNAL_NAME (always shows NULL),
|
|
# EXTERNAL_LANGUAGE (always shows NULL),
|
|
# PARAMETER_STYLE (shows the routine's parameter style;
|
|
# always SQL),
|
|
# IS_DETERMINISTIC (shows whether the routine is
|
|
# deterministic),
|
|
# SQL_DATA_ACCESS (shows the routine's defined
|
|
# sql-data-access clause value),
|
|
# SQL_PATH (always shows NULL),
|
|
# SECURITY_TYPE (shows whether the routine's defined
|
|
# security_type is 'definer' or 'invoker'),
|
|
# CREATED (shows the timestamp of the time the routine was
|
|
# created),
|
|
# LAST_ALTERED (shows the timestamp of the time the routine
|
|
# was last altered),
|
|
# SQL_MODE (shows the sql_mode setting at the time the
|
|
# routine was created),
|
|
# ROUTINE_COMMENT (shows the comment, if any, defined for
|
|
# the routine; otherwise NULL),
|
|
# DEFINER (shows the user who created the routine).
|
|
################################################################################
|
|
|
|
let $is_table= routines;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.8.2 + 3.2.8.3:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.8.2: Ensure that the table shows the relevant information on
|
|
# every SQL-invoked routine (i.e. stored procedure) which is
|
|
# accessible to the current user or to PUBLIC.
|
|
################################################################################
|
|
# Testcase 3.2.8.3: Ensure that the table does not show any information on any
|
|
# stored procedure that is not accessible to the current user
|
|
# or PUBLIC.;
|
|
##############################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
DROP DATABASE IF EXISTS db_datadict_2;
|
|
--enable_warnings
|
|
|
|
CREATE DATABASE db_datadict;
|
|
USE db_datadict;
|
|
|
|
CREATE USER 'user_1'@'localhost';
|
|
CREATE USER 'user_2'@'localhost';
|
|
CREATE USER 'user_3'@'localhost';
|
|
|
|
CREATE TABLE res_6_408002_1(f1 CHAR(3), f2 TEXT(25), f3 DATE, f4 INT);
|
|
|
|
INSERT INTO res_6_408002_1(f1, f2, f3, f4)
|
|
VALUES('abc', 'xyz', '1989-11-09', 0815);
|
|
|
|
--disable_warnings
|
|
DROP PROCEDURE IF EXISTS sp_6_408002_1;
|
|
--enable_warnings
|
|
|
|
delimiter //;
|
|
CREATE PROCEDURE sp_6_408002_1()
|
|
BEGIN
|
|
SELECT * FROM db_datadict.res_6_408002_1;
|
|
END//
|
|
delimiter ;//
|
|
|
|
CREATE DATABASE db_datadict_2;
|
|
USE db_datadict_2;
|
|
|
|
CREATE TABLE res_6_408002_2(f1 CHAR(3), f2 TEXT(25), f3 DATE, f4 INT);
|
|
|
|
INSERT INTO res_6_408002_2(f1, f2, f3, f4)
|
|
VALUES('abc', 'xyz', '1990-10-03', 4711);
|
|
|
|
--disable_warnings
|
|
DROP PROCEDURE IF EXISTS sp_6_408002_2;
|
|
--enable_warnings
|
|
|
|
delimiter //;
|
|
CREATE PROCEDURE sp_6_408002_2()
|
|
BEGIN
|
|
SELECT * FROM db_datadict_2.res_6_408002_2;
|
|
END//
|
|
delimiter ;//
|
|
|
|
GRANT SELECT ON db_datadict_2.* TO 'user_1'@'localhost';
|
|
GRANT EXECUTE ON db_datadict_2.* TO 'user_1'@'localhost';
|
|
|
|
GRANT EXECUTE ON db_datadict.* TO 'user_1'@'localhost';
|
|
GRANT SELECT ON db_datadict.* TO 'user_2'@'localhost';
|
|
|
|
GRANT EXECUTE ON PROCEDURE db_datadict_2.sp_6_408002_2 TO 'user_2'@'localhost';
|
|
GRANT EXECUTE ON db_datadict_2.* TO 'user_2'@'localhost';
|
|
FLUSH PRIVILEGES;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_8_1, localhost, user_1, , db_datadict);
|
|
|
|
--replace_column 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
SELECT * FROM information_schema.routines;
|
|
disconnect user_8_1;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_8_2, localhost, user_2, , db_datadict);
|
|
|
|
--replace_column 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
SELECT * FROM information_schema.routines;
|
|
disconnect user_8_2;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_8_3, localhost, user_3, , test);
|
|
|
|
--replace_column 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
SELECT * FROM information_schema.routines;
|
|
disconnect user_8_3;
|
|
|
|
# clean-up
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
DROP USER 'user_1'@'localhost';
|
|
DROP USER 'user_2'@'localhost';
|
|
DROP USER 'user_3'@'localhost';
|
|
|
|
use db_datadict;
|
|
DROP TABLE res_6_408002_1;
|
|
DROP PROCEDURE sp_6_408002_1;
|
|
|
|
USE db_datadict_2;
|
|
DROP TABLE res_6_408002_2;
|
|
DROP PROCEDURE sp_6_408002_2;
|
|
|
|
USE test;
|
|
DROP DATABASE db_datadict;
|
|
DROP DATABASE db_datadict_2;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.8.4:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.8.4: Ensure that a stored procedure with a routine body that is
|
|
# too large to fit into the
|
|
# INFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITION column
|
|
# correctly shows as much of the information as is possible
|
|
# within the allotted size.
|
|
################################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
|
|
CREATE DATABASE db_datadict;
|
|
USE db_datadict;
|
|
|
|
create table res_6_408004_1(f1 longtext , f2 mediumint , f3 longblob , f4 real , f5 year);
|
|
|
|
insert into res_6_408004_1 values ('abc', 98765 , 99999999 , 98765, 10);
|
|
|
|
--disable_warnings
|
|
drop procedure if exists sp_6_408004;
|
|
--enable_warnings
|
|
|
|
create table res_6_408004_2(f1 longtext , f2 mediumint , f3 longblob , f4 real , f5 year);
|
|
|
|
insert into res_6_408004_2 values ('abc', 98765 , 99999999 , 98765, 10);
|
|
|
|
let $message= Checking the max. possible length of (currently) 4 GByte is not possible in this environment here.;
|
|
--source include/show_msg.inc
|
|
|
|
delimiter //;
|
|
create procedure sp_6_408004 ()
|
|
begin
|
|
declare done integer default 0;
|
|
declare variable_number_1 longtext;
|
|
declare variable_number_2 mediumint;
|
|
declare variable_number_3 longblob;
|
|
declare variable_number_4 real;
|
|
declare variable_number_5 year;
|
|
declare cursor_number_1 cursor for select * from res_6_408004_1 limit 0, 10;
|
|
declare cursor_number_2 cursor for select * from res_6_408004_1 limit 0, 10;
|
|
declare cursor_number_3 cursor for select * from res_6_408004_1 limit 0, 10;
|
|
declare cursor_number_4 cursor for select * from res_6_408004_1 limit 0, 10;
|
|
declare cursor_number_5 cursor for select * from res_6_408004_1 limit 0, 10;
|
|
declare continue handler for sqlstate '02000' set done = 1;
|
|
begin
|
|
open cursor_number_1;
|
|
while done <> 1 do
|
|
fetch cursor_number_1 into variable_number_1, variable_number_2, variable_number_3, variable_number_4, variable_number_5;
|
|
if done <> 0 then
|
|
insert into res_6_408004_2 values (variable_number_1, variable_number_2, variable_number_3,
|
|
variable_number_4, variable_number_5);
|
|
end if;
|
|
end while;
|
|
begin
|
|
begin
|
|
set done = 0;
|
|
open cursor_number_2;
|
|
while done <> 1 do
|
|
fetch cursor_number_2 into variable_number_1, variable_number_2, variable_number_3, variable_number_4, variable_number_5;
|
|
if done <> 0 then
|
|
insert into res_6_408004_2 values(variable_number_1, variable_number_2, variable_number_3, variable_number_4, variable_number_5);
|
|
end if;
|
|
end while;
|
|
end;
|
|
set done = 0;
|
|
open cursor_number_3;
|
|
while done <> 1 do
|
|
fetch cursor_number_3 into variable_number_1, variable_number_2, variable_number_3, variable_number_4, variable_number_5;
|
|
if done <> 0 then
|
|
insert into res_6_408004_2 values(variable_number_1, variable_number_2, variable_number_3, variable_number_4, variable_number_5);
|
|
end if;
|
|
end while;
|
|
end;
|
|
end;
|
|
begin
|
|
set done = 0;
|
|
open cursor_number_4;
|
|
while done <> 1 do
|
|
fetch cursor_number_4 into variable_number_1, variable_number_2, variable_number_3, variable_number_4, variable_number_5;
|
|
if done <> 0 then
|
|
insert into res_6_408004_2 values (variable_number_1, variable_number_2, variable_number_3, variable_number_4, variable_number_5);
|
|
end if;
|
|
end while;
|
|
end;
|
|
begin
|
|
set @a='test row';
|
|
select @a;
|
|
select @a;
|
|
select @a;
|
|
end;
|
|
begin
|
|
set done = 0;
|
|
open cursor_number_5;
|
|
while done <> 1 do
|
|
fetch cursor_number_5 into variable_number_1, variable_number_2, variable_number_3, variable_number_4, variable_number_5;
|
|
if done <> 0 then
|
|
insert into res_6_408004_2 values (variable_number_1, variable_number_2, variable_number_3, variable_number_4, variable_number_5);
|
|
end if;
|
|
end while;
|
|
end;
|
|
begin
|
|
set @a='test row';
|
|
select @a;
|
|
select @a;
|
|
select @a;
|
|
end;
|
|
end//
|
|
delimiter ;//
|
|
|
|
call sp_6_408004 ();
|
|
select * from res_6_408004_2;
|
|
|
|
--vertical_results
|
|
--replace_column 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
SELECT *, LENGTH(routine_definition)
|
|
FROM information_schema.routines
|
|
WHERE routine_schema = 'db_datadict';
|
|
--horizontal_results
|
|
|
|
# clean-up
|
|
use db_datadict;
|
|
drop procedure sp_6_408004;
|
|
drop table res_6_408004_1;
|
|
drop table res_6_408004_2;
|
|
use test;
|
|
drop database db_datadict;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.9.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.9.1: Ensure that the INFORMATION_SCHEMA.SCHEMATA
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# CATALOG_NAME (always shows NULL),
|
|
# SCHEMA_NAME (shows the name of a database, or schema, on
|
|
# which the current user or PUBLIC has privileges),
|
|
# DEFAULT_CHARACTER_SET_NAME (shows the name of that
|
|
# database's default character set),
|
|
# DEFAULT_COLLATION_NAME (shows the database default
|
|
# collation)
|
|
# SQL_PATH (always shows NULL).
|
|
################################################################################
|
|
|
|
let $is_table= schemata;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.9.2 + 3.2.9.3:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.9.2: Ensure that the table shows the relevant information for
|
|
# every database on which the current user or PUBLIC have
|
|
# privileges.
|
|
################################################################################
|
|
# Testcase 3.2.9.3: Ensure that the table does not show any information on any
|
|
# databases on which the current user and PUBLIC have no
|
|
# privileges.
|
|
################################################################################
|
|
|
|
CREATE USER 'user_1'@'localhost';
|
|
CREATE USER 'user_2'@'localhost';
|
|
CREATE USER 'user_3'@'localhost';
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict_1;
|
|
DROP DATABASE IF EXISTS db_datadict_2;
|
|
--enable_warnings
|
|
|
|
CREATE DATABASE db_datadict_1;
|
|
CREATE DATABASE db_datadict_2;
|
|
|
|
GRANT SELECT ON db_datadict_1.* to 'user_1'@'localhost';
|
|
GRANT SELECT ON db_datadict_2.* to 'user_2'@'localhost';
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
# shows db_1
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_9_1, localhost, user_1, , db_datadict_1);
|
|
|
|
SELECT COUNT(*) FROM information_schema.schemata;
|
|
SELECT * FROM information_schema.schemata;
|
|
disconnect user_9_1;
|
|
|
|
|
|
# shows db_2
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_9_2, localhost, user_2, , db_datadict_2);
|
|
|
|
SELECT COUNT(*) FROM information_schema.schemata;
|
|
SELECT * FROM information_schema.schemata;
|
|
disconnect user_9_2;
|
|
|
|
|
|
# shows neither db_1 nor db_2
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_9_3, localhost, user_3, , test);
|
|
|
|
SELECT COUNT(*) FROM information_schema.schemata;
|
|
SELECT * FROM information_schema.schemata;
|
|
disconnect user_9_3;
|
|
|
|
|
|
# clean-up
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
DROP USER 'user_1'@'localhost';
|
|
DROP USER 'user_2'@'localhost';
|
|
DROP USER 'user_3'@'localhost';
|
|
DROP DATABASE db_datadict_1;
|
|
DROP DATABASE db_datadict_2;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.10.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.10.1: Ensure that the INFORMATION_SCHEMA.TABLE_CONSTRAINTS
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# CONSTRAINT_CATALOG (always shows NULL),
|
|
# CONSTRAINT_SCHEMA (shows the database, or schema, in which
|
|
# a constraint an accessible table resides),
|
|
# CONSTRAINT_NAME (shows the name of a constraint defined on
|
|
# an accessible table),
|
|
# TABLE_SCHEMA (shows the database, or schema, in which the
|
|
# table resides),
|
|
# TABLE_NAME (shows the name of the table),
|
|
# CONSTRAINT_TYPE (shows the type of the constraint; either
|
|
# 'primary key', 'foreign key', 'unique', 'check').
|
|
################################################################################
|
|
|
|
let $is_table= table_constraints;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.10.2 + 3.2.10.3:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.10.2: Ensure that the table shows the relevant information on all
|
|
# constraints defined on every table for which the current
|
|
# user or PUBLIC have privileges.
|
|
################################################################################
|
|
# Testcase 3.2.10.3: Ensure that the table does not show any information on
|
|
# constraints defined on any table for which the current user
|
|
# and PUBLIC have no privileges.
|
|
################################################################################
|
|
|
|
CREATE USER 'user_1'@'localhost';
|
|
CREATE USER 'user_2'@'localhost';
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
DROP DATABASE IF EXISTS db_datadict_2;
|
|
--enable_warnings
|
|
|
|
CREATE DATABASE db_datadict;
|
|
CREATE DATABASE db_datadict_2;
|
|
|
|
USE db_datadict;
|
|
|
|
CREATE TABLE res_6_401003_1(f1 INT NOT NULL, PRIMARY KEY(f1), f2 INT, INDEX f2_ind(f2));
|
|
|
|
USE db_datadict_2;
|
|
|
|
CREATE TABLE res_6_401003_2(f1 INT NOT NULL, PRIMARY KEY(f1), f2 INT, INDEX f2_ind(f2));
|
|
|
|
GRANT SELECT ON db_datadict.res_6_401003_1 TO 'user_1'@'localhost';
|
|
GRANT SELECT ON db_datadict_2.res_6_401003_2 TO 'user_2'@'localhost';
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_10_1, localhost, user_1, , db_datadict);
|
|
|
|
SELECT * FROM information_schema.table_constraints;
|
|
SELECT COUNT(*) FROM information_schema.table_constraints;
|
|
disconnect user_10_1;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_10_2, localhost, user_2, , db_datadict_2);
|
|
|
|
SELECT * FROM information_schema.table_constraints;
|
|
SELECT COUNT(*) FROM information_schema.table_constraints;
|
|
disconnect user_10_2;
|
|
|
|
# clean-up
|
|
connection default;
|
|
use db_datadict;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
DROP USER 'user_1'@'localhost';
|
|
DROP USER 'user_2'@'localhost';
|
|
DROP TABLE res_6_401003_1;
|
|
USE db_datadict_2;
|
|
DROP TABLE res_6_401003_2;
|
|
USE test;
|
|
DROP DATABASE db_datadict;
|
|
DROP DATABASE db_datadict_2;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.11.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.11.1: Ensure that the INFORMATION_SCHEMA.TABLE_PRIVILEGES
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# GRANTEE (shows the name of a user who has either granted,
|
|
# or been granted a table privilege),
|
|
# TABLE_CATALOG (always shows NULL),
|
|
# TABLE_SCHEMA (shows the name of the schema, or database,
|
|
# in which the table for which a privilege has been
|
|
# granted resides),
|
|
# TABLE_NAME (shows the name of the table),
|
|
# PRIVILEGE_TYPE (shows the type of privilege that was
|
|
# granted; must be either SELECT, INSERT, UPDATE,
|
|
# DELETE, REFERENCES, ALTER, INDEX, DROP, or CREATE
|
|
# VIEW),
|
|
# IS_GRANTABLE (shows whether that privilege was granted
|
|
# WITH GRANT OPTION).
|
|
################################################################################
|
|
|
|
let $is_table= table_privileges;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.11.2 + 3.2.11.3 + 3.2.11.4:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.11.2: Ensure that the table shows the relevant information on
|
|
# every table privilege which has been granted to the current
|
|
# user or PUBLIC, or which was granted by the current user.
|
|
################################################################################
|
|
# Testcase 3.2.11.3: Ensure that the table does not show any information on any
|
|
# table privilege which was granted to any user other than
|
|
# the current user or PUBLIC, or which was granted by any
|
|
# user other than the current user.
|
|
################################################################################
|
|
# Testcase 3.2.11.4: Ensure that the table does not show any information on any
|
|
# privileges that are not table privileges for the current
|
|
# user.
|
|
################################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
|
|
create database db_datadict;
|
|
|
|
CREATE USER 'user_1'@'localhost';
|
|
GRANT CREATE, SELECT ON db_datadict.* TO 'user_1'@'localhost' WITH GRANT OPTION;
|
|
CREATE USER 'user_2'@'localhost';
|
|
CREATE USER 'user_3'@'localhost';
|
|
|
|
use db_datadict;
|
|
|
|
create table tb1(f1 int, f2 int, f3 int);
|
|
|
|
grant select on db_datadict.tb1 to 'user_1'@'localhost';
|
|
GRANT ALL on db_datadict.tb1 to 'user_2'@'localhost' WITH GRANT OPTION;
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_11_1, localhost, user_1, , db_datadict);
|
|
|
|
CREATE TABLE tb3 (f1 TEXT);
|
|
GRANT SELECT ON db_datadict.tb3 to 'user_3'@'localhost';
|
|
|
|
SELECT * FROM information_schema.table_privileges
|
|
WHERE table_name LIKE 'tb%';
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_11_2, localhost, user_2, , db_datadict);
|
|
|
|
# we see only table privileges for this user, and not any other privileges
|
|
SELECT * FROM information_schema.table_privileges;
|
|
|
|
SELECT USER(), COUNT(*)
|
|
FROM information_schema.table_privileges
|
|
WHERE grantee = USER();
|
|
|
|
SELECT USER(), COUNT(*)
|
|
FROM information_schema.table_privileges
|
|
WHERE grantee = "'user_2'@'localhost'";
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_11_3, localhost, user_3, , db_datadict);
|
|
|
|
# we see only table privileges for this user, and not any other privileges
|
|
SELECT * FROM information_schema.table_privileges;
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
# we see only 'public' table privileges
|
|
SELECT * FROM information_schema.table_privileges;
|
|
|
|
# clean-up
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
disconnect user_11_1;
|
|
disconnect user_11_2;
|
|
disconnect user_11_3;
|
|
DROP USER 'user_1'@'localhost';
|
|
DROP USER 'user_2'@'localhost';
|
|
DROP USER 'user_3'@'localhost';
|
|
drop table db_datadict.tb1;
|
|
drop table db_datadict.tb3;
|
|
use test;
|
|
drop database db_datadict;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.12.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.12.1: Ensure that the INFORMATION_SCHEMA.TABLES
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# TABLE_CATALOG (always shows NULL),
|
|
# TABLE_SCHEMA (shows the name of the database, or schema,
|
|
# in which an accessible table resides),
|
|
# TABLE_NAME (shows the name of a table which the current
|
|
# user may access),
|
|
# TABLE_TYPE (shows whether the table is a BASE TABLE, a
|
|
# TEMPORARY table, or a VIEW),
|
|
# ENGINE (shows the storage engine used for the table),
|
|
# VERSION (shows the version number of the table's .frm
|
|
# file),
|
|
# ROW_FORMAT (shows the table's row storage format; either
|
|
# FIXED, DYNAMIC or COMPRESSED),
|
|
# TABLE_ROWS (shows the number of rows in the table),
|
|
# AVG_ROW_LENGTH (shows the average length of the table's
|
|
# rows),
|
|
# DATA_LENGTH (shows the length of the table's data file),
|
|
# MAX_DATA_LENGTH (shows the maximum length of the table's
|
|
# data file),
|
|
# INDEX_LENGTH (shows the length of the index file
|
|
# associated with the table),
|
|
# DATA_FREE (shows the number of allocated, unused bytes),
|
|
# AUTO_INCREMENT (shows the next AUTO_INCREMENT value, where
|
|
# applicable),
|
|
# CREATE_TIME (shows the timestamp of the time the table was
|
|
# created),
|
|
# UPDATE_TIME (shows the timestamp of the time the table's
|
|
# data file was last updated),
|
|
# CHECK_TIME (shows the timestamp of the time the table was
|
|
# last checked),
|
|
# TABLE_COLLATION (shows the table's default collation),
|
|
# CHECKSUM (shows the live checksum value for the table, if
|
|
# any; otherwise NULL),
|
|
# CREATE_OPTIONS (shows any additional options used in the
|
|
# table's definition; otherwise NULL),
|
|
# TABLE_COMMENT (shows the comment added to the table's
|
|
# definition; otherwise NULL).
|
|
################################################################################
|
|
|
|
let $is_table= tables;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.12.2 + 3.2.12.3:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.12.2: Ensure that the table shows the relevant information on
|
|
# every base table and view on which the current user or
|
|
# PUBLIC has privileges.
|
|
################################################################################
|
|
# Testcase 3.2.12.3: Ensure that the table does not show any information on any
|
|
# tables on which the current user and public have no
|
|
# privileges.
|
|
################################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
|
|
create database db_datadict;
|
|
|
|
CREATE USER 'user_1'@'localhost';
|
|
GRANT CREATE, CREATE VIEW, INSERT, SELECT ON db_datadict.*
|
|
TO 'user_1'@'localhost' WITH GRANT OPTION;
|
|
CREATE USER 'user_2'@'localhost';
|
|
CREATE USER 'user_3'@'localhost';
|
|
|
|
use db_datadict;
|
|
|
|
create table tb1(f1 int, f2 int, f3 int);
|
|
|
|
grant select on db_datadict.tb1 to 'user_1'@'localhost';
|
|
GRANT ALL on db_datadict.tb1 to 'user_2'@'localhost' WITH GRANT OPTION;
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_12_1, localhost, user_1, , db_datadict);
|
|
|
|
# tb2 is not granted to anyone
|
|
CREATE TABLE tb2 (f1 DECIMAL);
|
|
CREATE TABLE tb3 (f1 TEXT);
|
|
GRANT SELECT ON db_datadict.tb3 to 'user_3'@'localhost';
|
|
GRANT INSERT ON db_datadict.tb3 to 'user_2'@'localhost';
|
|
|
|
CREATE VIEW v3 AS SELECT * FROM tb3;
|
|
GRANT SELECT ON db_datadict.v3 to 'user_3'@'localhost';
|
|
|
|
#FIXME 3.2.12: we split the "SELECT * FROM tables" in two parts until
|
|
#FIXME 3.2.12: Bug #12397: wrong values shown in column CREATE_OPTIONS of
|
|
#FIXME 3.2.12: INFORMATION_SCHEMA.TABLES is solved, one with 'more' and one
|
|
#FIXME 3.2.12: with 'less' replace
|
|
# 9 AVG_ROW_LENGTH
|
|
# 10 DATA_LENGTH
|
|
# 11 MAX_DATA_LENGTH
|
|
# 12 INDEX_LENGTH
|
|
# 13 DATA_FREE
|
|
# 15 CREATE_TIME
|
|
# 16 UPDATE_TIME
|
|
# 17 CHECK_TIME
|
|
# 20 CREATE_OPTIONS
|
|
if ($have_bug_11589)
|
|
{
|
|
--disable_ps_protocol
|
|
}
|
|
--replace_column 9 "#ARL#" 10 "#DL#" 11 "#MDL#" 12 "#IL#" 13 "#DF#" 15 "YYYY-MM-DD hh:mm:ss" 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss" 20 "#CO#"
|
|
SELECT * FROM information_schema.tables
|
|
WHERE table_schema = 'information_schema';
|
|
# 9 AVG_ROW_LENGTH
|
|
# 10 DATA_LENGTH
|
|
# 11 MAX_DATA_LENGTH
|
|
# 12 INDEX_LENGTH
|
|
# 13 DATA_FREE
|
|
# 15 CREATE_TIME
|
|
# 16 UPDATE_TIME
|
|
# 17 CHECK_TIME
|
|
--replace_column 9 "#ARL#" 10 "#DL#" 11 "#MDL#" 12 "#IL#" 13 "#DF#" 15 "YYYY-MM-DD hh:mm:ss" 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
SELECT * FROM information_schema.tables
|
|
WHERE NOT( table_schema = 'information_schema');
|
|
--enable_ps_protocol
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_12_2, localhost, user_2, , db_datadict);
|
|
|
|
# we see only tables for this user, and not any other
|
|
#FIXME 3.2.12: we split the "SELECT * FROM tables" in two parts until
|
|
#FIXME 3.2.12: Bug #12397: wrong values shown in column CREATE_OPTIONS of
|
|
#FIXME 3.2.12: INFORMATION_SCHEMA.TABLES is solved, one with 'more' and one
|
|
#FIXME 3.2.12: with 'less' replace
|
|
# 9 AVG_ROW_LENGTH
|
|
# 10 DATA_LENGTH
|
|
# 11 MAX_DATA_LENGTH
|
|
# 12 INDEX_LENGTH
|
|
# 13 DATA_FREE
|
|
# 15 CREATE_TIME
|
|
# 16 UPDATE_TIME
|
|
# 17 CHECK_TIME
|
|
# 20 CREATE_OPTIONS
|
|
if ($have_bug_11589)
|
|
{
|
|
--disable_ps_protocol
|
|
}
|
|
--replace_column 9 "#ARL#" 10 "#DL#" 11 "#MDL#" 12 "#IL#" 13 "#DF#" 15 "YYYY-MM-DD hh:mm:ss" 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss" 20 "#CO#"
|
|
SELECT * FROM information_schema.tables
|
|
WHERE table_schema = 'information_schema';
|
|
# 9 AVG_ROW_LENGTH
|
|
# 10 DATA_LENGTH
|
|
# 11 MAX_DATA_LENGTH
|
|
# 12 INDEX_LENGTH
|
|
# 13 DATA_FREE
|
|
# 15 CREATE_TIME
|
|
# 16 UPDATE_TIME
|
|
# 17 CHECK_TIME
|
|
--replace_column 9 "#ARL#" 10 "#DL#" 11 "#MDL#" 12 "#IL#" 13 "#DF#" 15 "YYYY-MM-DD hh:mm:ss" 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
SELECT * FROM information_schema.tables
|
|
WHERE NOT( table_schema = 'information_schema');
|
|
--enable_ps_protocol
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_12_3, localhost, user_3, , db_datadict);
|
|
|
|
# we see only tables for this user, and not any other
|
|
#
|
|
#FIXME 3.2.12: we split the "SELECT * FROM tables" in two parts until
|
|
#FIXME 3.2.12: Bug #12397: wrong values shown in column CREATE_OPTIONS of
|
|
#FIXME 3.2.12: INFORMATION_SCHEMA.TABLES is solved, one with 'more' and one
|
|
#FIXME 3.2.12: with 'less' replace
|
|
# 9 AVG_ROW_LENGTH
|
|
# 10 DATA_LENGTH
|
|
# 11 MAX_DATA_LENGTH
|
|
# 12 INDEX_LENGTH
|
|
# 13 DATA_FREE
|
|
# 15 CREATE_TIME
|
|
# 16 UPDATE_TIME
|
|
# 17 CHECK_TIME
|
|
# 20 CREATE_OPTIONS
|
|
if ($have_bug_11589)
|
|
{
|
|
--disable_ps_protocol
|
|
}
|
|
--replace_column 9 "#ARL#" 10 "#DL#" 11 "#MDL#" 12 "#IL#" 13 "#DF#" 15 "YYYY-MM-DD hh:mm:ss" 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss" 20 "#CO#"
|
|
SELECT * FROM information_schema.tables
|
|
WHERE table_schema = 'information_schema';
|
|
# 9 AVG_ROW_LENGTH
|
|
# 10 DATA_LENGTH
|
|
# 11 MAX_DATA_LENGTH
|
|
# 12 INDEX_LENGTH
|
|
# 13 DATA_FREE
|
|
# 15 CREATE_TIME
|
|
# 16 UPDATE_TIME
|
|
# 17 CHECK_TIME
|
|
--replace_column 9 "#ARL#" 10 "#DL#" 11 "#MDL#" 12 "#IL#" 13 "#DF#" 15 "YYYY-MM-DD hh:mm:ss" 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
SELECT * FROM information_schema.tables
|
|
WHERE NOT( table_schema = 'information_schema');
|
|
--enable_ps_protocol
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
# we see only 'public' tables
|
|
#
|
|
#FIXME 3.2.12: we split the "SELECT * FROM tables" in two parts until
|
|
#FIXME 3.2.12: Bug #12397: wrong values shown in column CREATE_OPTIONS of
|
|
#FIXME 3.2.12: INFORMATION_SCHEMA.TABLES is solved, one with 'more' and one
|
|
#FIXME 3.2.12: with 'less' replace
|
|
# 9 AVG_ROW_LENGTH
|
|
# 10 DATA_LENGTH
|
|
# 11 MAX_DATA_LENGTH
|
|
# 12 INDEX_LENGTH
|
|
# 13 DATA_FREE
|
|
# 15 CREATE_TIME
|
|
# 16 UPDATE_TIME
|
|
# 17 CHECK_TIME
|
|
# 20 CREATE_OPTIONS
|
|
if ($have_bug_11589)
|
|
{
|
|
--disable_ps_protocol
|
|
}
|
|
--replace_column 9 "#ARL#" 10 "#DL#" 11 "#MDL#" 12 "#IL#" 13 "#DF#" 15 "YYYY-MM-DD hh:mm:ss" 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss" 20 "#CO#"
|
|
SELECT * FROM information_schema.tables
|
|
WHERE table_schema = 'information_schema';
|
|
# 9 AVG_ROW_LENGTH
|
|
# 10 DATA_LENGTH
|
|
# 11 MAX_DATA_LENGTH
|
|
# 12 INDEX_LENGTH
|
|
# 13 DATA_FREE
|
|
# 15 CREATE_TIME
|
|
# 16 UPDATE_TIME
|
|
# 17 CHECK_TIME
|
|
--replace_column 9 "#ARL#" 10 "#DL#" 11 "#MDL#" 12 "#IL#" 13 "#DF#" 15 "YYYY-MM-DD hh:mm:ss" 16 "YYYY-MM-DD hh:mm:ss" 17 "YYYY-MM-DD hh:mm:ss"
|
|
SELECT * FROM information_schema.tables
|
|
WHERE NOT( table_schema = 'information_schema');
|
|
--enable_ps_protocol
|
|
|
|
# clean-up
|
|
disconnect user_12_1;
|
|
disconnect user_12_2;
|
|
disconnect user_12_3;
|
|
DROP USER 'user_1'@'localhost';
|
|
DROP USER 'user_2'@'localhost';
|
|
DROP USER 'user_3'@'localhost';
|
|
DROP TABLE db_datadict.tb1;
|
|
DROP TABLE db_datadict.tb3;
|
|
DROP VIEW db_datadict.v3;
|
|
USE test;
|
|
DROP DATABASE db_datadict;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.13.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.13.1: Ensure that the INFORMATION_SCHEMA.VIEWS
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# TABLE_CATALOG (always shows NULL),
|
|
# TABLE_SCHEMA (shows the database, or schema, in which an
|
|
# accessible view resides),
|
|
# TABLE_NAME (shows the name of a view accessible to the
|
|
# current user),
|
|
# VIEW_DEFINITION (shows the SELECT statement that makes
|
|
# up the view's definition),
|
|
# CHECK_OPTION (shows the value of the WITH CHECK OPTION
|
|
# clause used to define the view, either NONE, LOCAL
|
|
# or CASCADED),
|
|
# IS_UPDATABLE (shows whether the view is an updatable
|
|
# view),
|
|
# DEFINER (added with 5.0.14),
|
|
# SECURITY_TYPE (added with 5.0.14).
|
|
################################################################################
|
|
|
|
let $is_table= views;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.13.2 + 3.2.13.3:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.13.2: Ensure that the table shows the relevant information on
|
|
# every view for which the current user or PUBLIC has the
|
|
# SHOW CREATE VIEW privilege.
|
|
################################################################################
|
|
# Testcase 3.2.13.3: Ensure that the table does not show any information on any
|
|
# views for which the current user and PUBLIC have no SHOW
|
|
# CREATE VIEW privilege.
|
|
################################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
|
|
CREATE DATABASE db_datadict;
|
|
|
|
CREATE USER 'user_1'@'localhost';
|
|
CREATE USER 'user_2'@'localhost';
|
|
CREATE USER 'user_no_views'@'localhost';
|
|
USE db_datadict;
|
|
|
|
CREATE TABLE tb_401302(f1 INT, f2 INT, f3 INT);
|
|
CREATE VIEW v_granted_to_1 AS SELECT * FROM tb_401302;
|
|
CREATE VIEW v_granted_glob AS SELECT f2, f3 FROM tb_401302;
|
|
|
|
GRANT SELECT ON db_datadict.tb_401302 TO 'user_1'@'localhost';
|
|
GRANT SELECT ON db_datadict.v_granted_to_1 TO 'user_1'@'localhost';
|
|
GRANT SHOW VIEW, CREATE VIEW ON db_datadict.* TO 'user_2'@'localhost';
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
SELECT * FROM information_schema.views;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_13_1, localhost, user_1, , test);
|
|
|
|
SELECT * FROM information_schema.views;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_13_2, localhost, user_2, , test);
|
|
|
|
SELECT * FROM information_schema.views;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_no_views, localhost, user_no_views, , test);
|
|
|
|
SELECT * FROM information_schema.views;
|
|
|
|
# clean-up
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
disconnect user_13_1;
|
|
disconnect user_13_2;
|
|
disconnect user_no_views;
|
|
USE db_datadict;
|
|
DROP USER 'user_1'@'localhost';
|
|
DROP USER 'user_2'@'localhost';
|
|
DROP USER 'user_no_views'@'localhost';
|
|
DROP VIEW v_granted_to_1;
|
|
DROP TABLE tb_401302;
|
|
DROP VIEW v_granted_glob;
|
|
USE test;
|
|
DROP DATABASE db_datadict;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.14.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.14.1: Ensure that the INFORMATION_SCHEMA.STATISTICS
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# TABLE_CATALOG (always shows NULL),
|
|
# TABLE_SCHEMA (shows the database, or schema, in which a
|
|
# table indexed by an accessible index resides),
|
|
# TABLE_NAME (shows the name of the indexed table),
|
|
# NON_UNIQUE (shows whether the index may contain duplicate
|
|
# values; 0 if it cannot, 1 if it can),
|
|
# INDEX_SCHEMA (shows the database, or schema, in which an
|
|
# accessible index resides),
|
|
# INDEX_NAME (shows the name of an index which the current
|
|
# user may access),
|
|
# SEQ_IN_INDEX (shows the ordinal position of an indexed
|
|
# column within the index),
|
|
# COLUMN_NAME (shows the name of a column that comprises
|
|
# some, or all, of an index key),
|
|
# COLLATION (shows how the column is sorted in the index;
|
|
# either A for ascending or NULL for unsorted
|
|
# columns),
|
|
# CARDINALITY (shows the number of unique values in the
|
|
# index),
|
|
# SUB_PART (shows the number of indexed characters if the
|
|
# index is a prefix index),
|
|
# PACKED (shows how the index key is packed),
|
|
# NULLABLE (shows whether the index column may contain NULL
|
|
# values),
|
|
# INDEX_TYPE (shows the index type; either BTREE, FULLTEXT,
|
|
# HASH or RTREE),
|
|
# COMMENT (shows a comment on the index, if any).
|
|
################################################################################
|
|
|
|
let $is_table= statistics;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.14.2 + 3.2.14.3:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.14.2: Ensure that the table shows the relevant information on
|
|
# every index which the current user or PUBLIC may access
|
|
# (usually because privileges on the indexed table have been
|
|
# granted).
|
|
################################################################################
|
|
# Testcase 3.2.14.3: Ensure that the table does not show any information on any
|
|
# indexes which the current user and PUBLIC may not access.
|
|
################################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
DROP DATABASE IF EXISTS db_datadict_2;
|
|
--enable_warnings
|
|
|
|
CREATE DATABASE db_datadict;
|
|
CREATE DATABASE db_datadict_2;
|
|
|
|
CREATE USER 'user_1'@'localhost';
|
|
CREATE USER 'user_2'@'localhost';
|
|
USE db_datadict;
|
|
|
|
create table tb_6_401402_1(f1 int not null, primary key(f1), f2 int, index f2_ind(f2));
|
|
create table tb_6_401402_2(f1 int not null, primary key(f1), f2 int, index f2_ind(f2));
|
|
grant select on db_datadict.tb_6_401402_1 to 'user_1'@'localhost' WITH GRANT OPTION;
|
|
|
|
USE db_datadict_2;
|
|
|
|
create table tb_2_1(f1 int not null, primary key(f1), f2 int, index f2_ind(f2));
|
|
create table tb_2_2(f1 int not null, primary key(f1), f2 int, index f2_ind(f2));
|
|
grant select on db_datadict_2.tb_2_1 to 'user_1'@'localhost';
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_14_1, localhost, user_1, , test);
|
|
SELECT * FROM information_schema.statistics;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_14_2, localhost, user_2, , test);
|
|
SELECT * FROM information_schema.statistics;
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
REVOKE SELECT ON db_datadict.tb_6_401402_1 FROM 'user_1'@'localhost';
|
|
SELECT * FROM information_schema.statistics;
|
|
|
|
# nothing visible for user_1
|
|
connection user_14_1;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
SELECT * FROM information_schema.statistics;
|
|
|
|
# no changes visible for user_2
|
|
connection user_14_2;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
SELECT * FROM information_schema.statistics;
|
|
|
|
# cleanup
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
disconnect user_14_1;
|
|
disconnect user_14_2;
|
|
USE db_datadict;
|
|
DROP USER 'user_1'@'localhost';
|
|
DROP USER 'user_2'@'localhost';
|
|
DROP TABLE tb_6_401402_1;
|
|
DROP TABLE tb_6_401402_2;
|
|
USE test;
|
|
DROP DATABASE db_datadict;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.15.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.15.1: Ensure that the INFORMATION_SCHEMA.SCHEMA_PRIVILEGES
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# GRANTEE (shows a user to whom a schema privilege has been
|
|
# granted),
|
|
# TABLE_CATALOG (always shows NULL),
|
|
# TABLE_SCHEMA (shows the name of the database, or schema,
|
|
# on which the privilege has been granted),
|
|
# PRIVILEGE_TYPE (shows the granted privilege),
|
|
# IS_GRANTABLE (shows whether the privilege was granted WITH
|
|
# GRANT OPTION).
|
|
################################################################################
|
|
|
|
let $is_table= schema_privileges;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.15.2:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.15.2: Ensure that the table shows the relevant information on
|
|
# every schema-level privilege which has been granted to the
|
|
# current user or to PUBLIC, or has been granted by the
|
|
# current user.
|
|
################################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
DROP DATABASE IF EXISTS db_datadict_2;
|
|
--enable_warnings
|
|
|
|
create database db_datadict;
|
|
create database db_datadict_2;
|
|
|
|
CREATE USER 'u_6_401502'@'localhost';
|
|
|
|
use db_datadict;
|
|
|
|
create table res_6_401502(f1 int, f2 int, f3 int);
|
|
grant insert on db_datadict.* to 'u_6_401502'@'localhost';
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
SELECT * FROM information_schema.schema_privileges;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u_6_401502, localhost, u_6_401502, , test);
|
|
|
|
SELECT * FROM information_schema.schema_privileges;
|
|
|
|
disconnect u_6_401502;
|
|
|
|
# clean-up
|
|
|
|
connection default;
|
|
use db_datadict;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
DROP USER 'u_6_401502'@'localhost';
|
|
drop table res_6_401502;
|
|
use test;
|
|
drop database db_datadict;
|
|
drop database db_datadict_2;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.15.3 + 3.2.15.4:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.15.3: Ensure that the table does not show any information on any
|
|
# schema-level privileges which have been granted to users
|
|
# other than the current user or to PUBLIC, or that have been
|
|
# granted by any user other than the current user.
|
|
################################################################################
|
|
# Testcase 3.2.15.4: Ensure that the table does not show any information on any
|
|
# privileges that are not schema-level privileges for the
|
|
# current user.
|
|
################################################################################
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
DROP DATABASE IF EXISTS db_datadict_2;
|
|
--enable_warnings
|
|
|
|
create database db_datadict;
|
|
create database db_datadict_2;
|
|
|
|
CREATE USER 'u_6_401503_1'@'localhost';
|
|
CREATE USER 'u_6_401503_2'@'localhost';
|
|
CREATE USER 'u_6_401503_3'@'localhost';
|
|
|
|
use db_datadict;
|
|
|
|
create table res_6_401503_1(f1 int, f2 int, f3 int);
|
|
|
|
use db_datadict_2;
|
|
|
|
create table res_6_401503_2(f1 int, f2 int, f3 int);
|
|
|
|
grant update on db_datadict.* to 'u_6_401503_1'@'localhost';
|
|
grant delete on db_datadict_2.* to 'u_6_401503_2'@'localhost';
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
SELECT * FROM information_schema.schema_privileges;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u_6_401503_1, localhost, u_6_401503_1, , test);
|
|
|
|
SELECT * FROM information_schema.schema_privileges;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u_6_401503_2, localhost, u_6_401503_2, , test);
|
|
|
|
SELECT * FROM information_schema.schema_privileges;
|
|
|
|
# should not show anything
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (u_6_401503_3, localhost, u_6_401503_3, , test);
|
|
|
|
SELECT * FROM information_schema.schema_privileges;
|
|
|
|
# clean-up
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
disconnect u_6_401503_1;
|
|
disconnect u_6_401503_2;
|
|
disconnect u_6_401503_3;
|
|
use db_datadict;
|
|
DROP USER 'u_6_401503_1'@'localhost';
|
|
DROP USER 'u_6_401503_2'@'localhost';
|
|
DROP USER 'u_6_401503_3'@'localhost';
|
|
drop table res_6_401503_1;
|
|
use db_datadict_2;
|
|
drop table res_6_401503_2;
|
|
use test;
|
|
drop database db_datadict;
|
|
drop database db_datadict_2;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.16.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.16.1: Ensure that the INFORMATION_SCHEMA.USER_PRIVILEGES
|
|
# table has the following columns, in the following order:
|
|
#
|
|
# GRANTEE (shows a user to whom a user privilege has been
|
|
# granted),
|
|
# TABLE_CATALOG (always shows NULL),
|
|
# PRIVILEGE_TYPE (shows the granted privilege),
|
|
# IS_GRANTABLE (shows whether the privilege was granted WITH
|
|
# GRANT OPTION).
|
|
################################################################################
|
|
|
|
#-----------
|
|
# Bug #12063 column 'TABLE_SCHEMA' is missing in table
|
|
# INFORMATION_SCHEMA.USER_PRIVILEGE
|
|
# ... is not a bug, it has been added by mistake in the TP requirement document.
|
|
#-----------
|
|
|
|
let $is_table= user_privileges;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.16.2 + 3.2.16.3 + 3.2.16.4:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.16.2: Ensure that the table shows the relevant information on
|
|
# every user privilege which has been granted to the current
|
|
# user or to PUBLIC, or has been granted by the current user.
|
|
################################################################################
|
|
# Testcase 3.2.16.3: Ensure that the table does not show any information on any
|
|
# user privileges which have been granted to users other than
|
|
# the current user or have been granted by any user other
|
|
# than the current user.
|
|
################################################################################
|
|
# Testcase 3.2.16.4: Ensure that the table does not show any information on any
|
|
# privileges that are not user privileges for the current
|
|
# user.
|
|
################################################################################
|
|
|
|
#FIXME 3.2.16: - when Bug #12269 is fixed a some of the outputs here may be
|
|
#FIXME 3.2.16: deleted as I added them for checking where / which information
|
|
#FIXME 3.2.16: is shown.
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
--enable_warnings
|
|
|
|
let $cmd1= SELECT * FROM information_schema.user_privileges
|
|
WHERE grantee LIKE "%user%"
|
|
ORDER BY grantee, table_catalog, privilege_type;
|
|
let $cmd2= SELECT * FROM mysql.user WHERE user LIKE "%user%" ORDER BY host, user;
|
|
let $cmd3= SHOW GRANTS;
|
|
|
|
CREATE DATABASE db_datadict;
|
|
|
|
CREATE USER 'user_1'@'localhost';
|
|
CREATE USER 'user_2'@'localhost';
|
|
CREATE USER 'user_3'@'localhost';
|
|
|
|
GRANT SELECT ON db_datadict.* TO 'user_1'@'localhost';
|
|
GRANT SELECT ON mysql.user TO 'user_1'@'localhost';
|
|
|
|
GRANT INSERT ON *.* TO 'user_2'@'localhost';
|
|
GRANT UPDATE ON *.* TO 'user_2'@'localhost';
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
let $message= FIXME (see Bug 12269) Here we expect more than only <USAGE> for user_1;
|
|
--source include/show_msg.inc
|
|
eval $cmd1;
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
let $message= add GRANT OPTION db_datadict.* to user_1;
|
|
--source include/show_msg.inc
|
|
GRANT UPDATE ON db_datadict.* TO 'user_1'@'localhost' WITH GRANT OPTION;
|
|
|
|
let $message= FIXME (see Bug 12269) Here the <YES> is missing for the GRANT OPTION for user_1;
|
|
--source include/show_msg.inc
|
|
eval $cmd1;
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_16_1, localhost, user_1, , db_datadict);
|
|
eval $cmd1;
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
# add SELECT on *.* to user_1
|
|
let $message= Now add SELECT on *.* to user_1;
|
|
--source include/show_msg.inc
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
GRANT SELECT ON *.* TO 'user_1'@'localhost';
|
|
let $message= Here <SELECT NO> is shown correctly for user_1;
|
|
--source include/show_msg.inc
|
|
eval $cmd1;
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
GRANT SELECT ON *.* TO 'user_1'@'localhost' WITH GRANT OPTION;
|
|
let $message= Here <SELECT YES> is shown correctly for user_1;
|
|
--source include/show_msg.inc
|
|
eval $cmd1;
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
FLUSH PRIVILEGES;
|
|
eval $cmd1;
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
# check that this appears
|
|
connection user_16_1;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
eval $cmd1;
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_16_2, localhost, user_2, , db_datadict);
|
|
eval $cmd1;
|
|
--error 1142
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
|
|
connect (user_16_3, localhost, user_3, , test);
|
|
eval $cmd1;
|
|
--error 1142
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
let $message= revoke privileges from user_1;
|
|
--source include/show_msg.inc
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user_1'@'localhost';
|
|
eval $cmd1;
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
# check for changes
|
|
connection user_16_1;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
eval $cmd1;
|
|
--error 1142
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
# checks entered before bug #12269 was reported
|
|
# OK, user_1 has no privs here
|
|
--error 1142
|
|
CREATE TABLE db_datadict.tb_55 ( c1 TEXT );
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
eval $cmd1;
|
|
--error 1142
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
# OK, user_1 has no privs here
|
|
--error 1142
|
|
CREATE TABLE db_datadict.tb_66 ( c1 TEXT );
|
|
|
|
let $message= add ALL on db_datadict.* (and select on mysql.user) to user_1;
|
|
--source include/show_msg.inc
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
|
|
GRANT ALL ON db_datadict.* TO 'user_1'@'localhost' WITH GRANT OPTION;
|
|
GRANT SELECT ON mysql.user TO 'user_1'@'localhost';
|
|
eval $cmd1;
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
# check for changes
|
|
connection user_16_1;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
eval $cmd1;
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
# OK, user_1 has no privs here
|
|
--error 1142
|
|
CREATE TABLE db_datadict.tb_56 ( c1 TEXT );
|
|
|
|
# using 'USE' lets the server read the privileges new, so now the CREATE works
|
|
USE db_datadict;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
eval $cmd1;
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
CREATE TABLE tb_57 ( c1 TEXT );
|
|
|
|
let $message= revoke privileges from user_1;
|
|
--source include/show_msg.inc
|
|
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user_1'@'localhost';
|
|
FLUSH PRIVILEGES;
|
|
eval $cmd1;
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
|
|
# check for changes
|
|
connection user_16_1;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
eval $cmd1;
|
|
--error 1142
|
|
eval $cmd2;
|
|
eval $cmd3;
|
|
# WORKS, as the existing old privileges are used!
|
|
CREATE TABLE db_datadict.tb_58 ( c1 TEXT );
|
|
# existing privileges are "read" new when USE is called, user has no priviliges
|
|
--error 1044
|
|
USE db_datadict;
|
|
#FIXME 3.2.16: check that it is correct that this now 'works': --error 1142
|
|
CREATE TABLE db_datadict.tb_59 ( c1 TEXT );
|
|
|
|
|
|
# clean-up
|
|
connection default;
|
|
--source suite/funcs_1/include/show_connection.inc
|
|
disconnect user_16_1;
|
|
disconnect user_16_2;
|
|
disconnect user_16_3;
|
|
DROP USER 'user_1'@'localhost';
|
|
DROP USER 'user_2'@'localhost';
|
|
DROP USER 'user_3'@'localhost';
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.17: Checks on Performance - not here in this script!;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.17.1: Ensure that every INFORMATION_SCHEMA table shows all the
|
|
# correct information, and no incorrect information, for a
|
|
# database to which 100 different users, each of which has a
|
|
# randomly issued set of privileges and access to a
|
|
# randomly chosen set of database objects, have access.
|
|
# The database should contain a mixture of all types of
|
|
# database objects (i.e. tables, views, stored procedures,
|
|
# triggers).
|
|
################################################################################
|
|
|
|
################################################################################
|
|
# Testcase 3.2.17.2: Ensure that every INFORMATION_SCHEMA table shows all the
|
|
# correct information, and no incorrect information, for 10
|
|
# different databases to which 50 different users, each of
|
|
# which has a randomly issued set of privileges and access
|
|
# to a randomly chosen set of database objects in two or
|
|
# more of the databases, have access. The databases should
|
|
# each contain a mixture of all types of database objects
|
|
# (i.e. tables, views, stored procedures, triggers).
|
|
################################################################################
|
|
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.18.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.18.1: Ensure that the INFORMATION_SCHEMA.TRIGGERS
|
|
# table has the following columns, in the following order:
|
|
#
|
|
#
|
|
# (FIXME - list copied from WL#1996)
|
|
#
|
|
# TRIGGER_CATALOG NULL
|
|
# TRIGGER_SCHEMA
|
|
# TRIGGER_NAME
|
|
# EVENT_MANIPULATION
|
|
# EVENT_OBJECT_CATALOG NULL
|
|
# EVENT_OBJECT_SCHEMA
|
|
# EVENT_OBJECT_TABLE
|
|
# ACTION_ORDER NULL
|
|
# ACTION_CONDITION NULL
|
|
# ACTION_STATEMENT
|
|
# ACTION_ORIENTATION
|
|
# ACTION_TIMING
|
|
# ACTION_REFERENCE_OLD_TABLE NULL
|
|
# ACTION_REFERENCE_NEW_TABLE NULL
|
|
# ACTION_REFERENCE_OLD_ROW
|
|
# ACTION_REFERENCE_NEW_ROW
|
|
# CREATED
|
|
# SQL_MODE
|
|
#
|
|
################################################################################
|
|
|
|
let $is_table= triggers;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.18.2 + 3.2.18.3:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.18.2: Ensure that the table shows the relevant information on
|
|
# every trigger on which the current user or PUBLIC has
|
|
# privileges.
|
|
################################################################################
|
|
# Testcase 3.2.18.3: Ensure that the table does not show any information on any
|
|
# trigger on which the current user and public have no
|
|
# privileges.
|
|
################################################################################
|
|
|
|
#FIXME 3.2.18.2: to be added.
|
|
#FIXME 3.2.18.2: don't forget to add the test description to QATestPlanV50func
|
|
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.19.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.19.1: Ensure that the INFORMATION_SCHEMA.PARAMETERS
|
|
# table has the following columns, in the following order:
|
|
#
|
|
################################################################################
|
|
|
|
let $is_table= parameters;
|
|
# when table is implemented remove this and the next 4 lines and "enable" 5th line:
|
|
# and don't forget to add the test description to QATestPlanV50func
|
|
let $message= checking a table that will be implemented later;
|
|
--source include/show_msg.inc
|
|
--error 1109
|
|
eval DESC $is_table;
|
|
#--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
let $message= Testcase 3.2.20.1:;
|
|
--source include/show_msg80.inc
|
|
|
|
################################################################################
|
|
# Testcase 3.2.20.1: Ensure that the INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
|
|
# table has the following columns, in the following order:
|
|
#
|
|
################################################################################
|
|
|
|
let $is_table= referential_constraints;
|
|
# when table is implemented remove this and the next 4 lines and "enable" 5th line:
|
|
# and don't forget to add the test description to QATestPlanV50func
|
|
#let $message= checking a table that will be implemented later;
|
|
#--source include/show_msg.inc
|
|
#--error 1109
|
|
eval DESC $is_table;
|
|
--source suite/funcs_1/datadict/datadict_show_table_design.inc
|
|
# -------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
################################################################################
|
|
#
|
|
let $message= *** End of Data Dictionary Tests ***;
|
|
--source include/show_msg80.inc
|
|
#
|
|
################################################################################
|
|
|
|
|
|
# some cleanup to be sure nothing remains
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS test.tb1;
|
|
DROP TABLE IF EXISTS test.tb2;
|
|
DROP TABLE IF EXISTS test.tb3;
|
|
DROP TABLE IF EXISTS test.tb4;
|
|
DROP TABLE IF EXISTS test.t1;
|
|
DROP TABLE IF EXISTS test.t2;
|
|
DROP TABLE IF EXISTS test.t3;
|
|
DROP TABLE IF EXISTS test.t4;
|
|
DROP TABLE IF EXISTS test.t7;
|
|
DROP TABLE IF EXISTS test.t8;
|
|
DROP TABLE IF EXISTS test.t9;
|
|
DROP TABLE IF EXISTS test.t10;
|
|
DROP TABLE IF EXISTS test.t11;
|
|
DROP DATABASE IF EXISTS test1;
|
|
DROP DATABASE IF EXISTS test4;
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
DROP DATABASE IF EXISTS db_datadict_1;
|
|
DROP DATABASE IF EXISTS db_datadict_2;
|
|
--enable_warnings
|