mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	with other alterations causes lost tables Using RENAME clause combined with other clauses of ALTER TABLE led to data loss (the data was there but not accessible). This could happen if the changes do not change the table much. Adding and droppping of fields and indices was safe. Renaming a column with MODIFY or CHANGE was unsafe operation, if the actual column didn't change (changing from int to int, which is a noop) Depending on the storage engine (SE) the behavior is different: 1)MyISAM/MEMORY - the ALTER TABLE statement completes without any error but next SELECT against the new table fails. 2)InnoDB (and every other transactional table) - The ALTER TABLE statement fails. There are the the following files in the db dir - `new_table_name.frm` and a temporary table's frm. If the SE is file based, then the data and index files will be present but with the old names. What happens is that for InnoDB the table is not renamed in the internal DDIC. Fixed by adding additional call to mysql_rename_table() method, which should not include FRM file rename, because it has been already done during file names juggling. mysql-test/r/alter_table.result: update result mysql-test/r/grant.result: update result mysql-test/t/alter_table.test: 2006/11/29 11:46:23+01:00 andrey@example.com +44 -9 Error to bug number Added test case for #22369: Alter table rename combined with other alterations causes lost tables mysql-test/t/grant.test: add test for bug#22369 - alter table was missing check for DROP_ACL when ALTER_RENAME clause is specified. Synchronise with RENAME TABLE DDL. sql/mysql_priv.h: Add a new flag for mysql_rename_table() sql/sql_parse.cc: To be consistent with SQLCOM_RENAME_TABLE, SQLCOM_ALTER_TABLE has to check for DROP_ACL if there is ALTER_RENAME flag set. sql/sql_table.cc: ALTER_RENAME, the data and index files weren't renamed in the engine but only the FRM was new, when the tables old and new tables are compatible. In the chain of FRM renames we add a call to mysql_rename_table() which should instruct the engine to rename the table but not rename the FRM. This bug was there only in 5.1 branch. 4.1 and 5.0 always do copy data on RENAME if there are more clauses than just rename.
		
			
				
	
	
		
			1041 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1041 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| drop table if exists t1;
 | ||
| drop database if exists mysqltest;
 | ||
| SET NAMES binary;
 | ||
| delete from mysql.user where user='mysqltest_1';
 | ||
| delete from mysql.db where user='mysqltest_1';
 | ||
| flush privileges;
 | ||
| grant select on mysqltest.* to mysqltest_1@localhost require cipher "EDH-RSA-DES-CBC3-SHA";
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA'
 | ||
| GRANT SELECT ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
 | ||
| grant delete on mysqltest.* to mysqltest_1@localhost;
 | ||
| select * from mysql.user where user="mysqltest_1";
 | ||
| Host	User	Password	Select_priv	Insert_priv	Update_priv	Delete_priv	Create_priv	Drop_priv	Reload_priv	Shutdown_priv	Process_priv	File_priv	Grant_priv	References_priv	Index_priv	Alter_priv	Show_db_priv	Super_priv	Create_tmp_table_priv	Lock_tables_priv	Execute_priv	Repl_slave_priv	Repl_client_priv	Create_view_priv	Show_view_priv	Create_routine_priv	Alter_routine_priv	Create_user_priv	Event_priv	Trigger_priv	ssl_type	ssl_cipher	x509_issuer	x509_subject	max_questions	max_updates	max_connections	max_user_connections
 | ||
| localhost	mysqltest_1		N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	SPECIFIED	EDH-RSA-DES-CBC3-SHA			0	0	0	0
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA'
 | ||
| GRANT SELECT, DELETE ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
 | ||
| revoke delete on mysqltest.* from mysqltest_1@localhost;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA'
 | ||
| GRANT SELECT ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
 | ||
| grant select on mysqltest.* to mysqltest_1@localhost require NONE;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT SELECT ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
 | ||
| grant USAGE on mysqltest.* to mysqltest_1@localhost require cipher "EDH-RSA-DES-CBC3-SHA" AND SUBJECT "testsubject" ISSUER "MySQL AB";
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' REQUIRE ISSUER 'MySQL AB' SUBJECT 'testsubject' CIPHER 'EDH-RSA-DES-CBC3-SHA'
 | ||
| GRANT SELECT ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
 | ||
| revoke all privileges on mysqltest.* from mysqltest_1@localhost;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' REQUIRE ISSUER 'MySQL AB' SUBJECT 'testsubject' CIPHER 'EDH-RSA-DES-CBC3-SHA'
 | ||
| delete from mysql.user where user='mysqltest_1';
 | ||
| flush privileges;
 | ||
| delete from mysql.user where user='mysqltest_1';
 | ||
| flush privileges;
 | ||
| grant usage on *.* to mysqltest_1@localhost with max_queries_per_hour 10;
 | ||
| select * from mysql.user where user="mysqltest_1";
 | ||
| Host	User	Password	Select_priv	Insert_priv	Update_priv	Delete_priv	Create_priv	Drop_priv	Reload_priv	Shutdown_priv	Process_priv	File_priv	Grant_priv	References_priv	Index_priv	Alter_priv	Show_db_priv	Super_priv	Create_tmp_table_priv	Lock_tables_priv	Execute_priv	Repl_slave_priv	Repl_client_priv	Create_view_priv	Show_view_priv	Create_routine_priv	Alter_routine_priv	Create_user_priv	Event_priv	Trigger_priv	ssl_type	ssl_cipher	x509_issuer	x509_subject	max_questions	max_updates	max_connections	max_user_connections
 | ||
| localhost	mysqltest_1		N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N					10	0	0	0
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' WITH MAX_QUERIES_PER_HOUR 10
 | ||
| grant usage on *.* to mysqltest_1@localhost with max_updates_per_hour 20 max_connections_per_hour 30;
 | ||
| select * from mysql.user where user="mysqltest_1";
 | ||
| Host	User	Password	Select_priv	Insert_priv	Update_priv	Delete_priv	Create_priv	Drop_priv	Reload_priv	Shutdown_priv	Process_priv	File_priv	Grant_priv	References_priv	Index_priv	Alter_priv	Show_db_priv	Super_priv	Create_tmp_table_priv	Lock_tables_priv	Execute_priv	Repl_slave_priv	Repl_client_priv	Create_view_priv	Show_view_priv	Create_routine_priv	Alter_routine_priv	Create_user_priv	Event_priv	Trigger_priv	ssl_type	ssl_cipher	x509_issuer	x509_subject	max_questions	max_updates	max_connections	max_user_connections
 | ||
| localhost	mysqltest_1		N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N	N					10	20	30	0
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' WITH MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HOUR 20 MAX_CONNECTIONS_PER_HOUR 30
 | ||
| flush privileges;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' WITH MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HOUR 20 MAX_CONNECTIONS_PER_HOUR 30
 | ||
| delete from mysql.user where user='mysqltest_1';
 | ||
| flush privileges;
 | ||
| grant CREATE TEMPORARY TABLES, LOCK TABLES on mysqltest.* to mysqltest_1@localhost;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT CREATE TEMPORARY TABLES, LOCK TABLES ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
 | ||
| flush privileges;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT CREATE TEMPORARY TABLES, LOCK TABLES ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
 | ||
| revoke CREATE TEMPORARY TABLES on mysqltest.* from mysqltest_1@localhost;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT LOCK TABLES ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
 | ||
| grant ALL PRIVILEGES on mysqltest.* to mysqltest_1@localhost with GRANT OPTION;
 | ||
| flush privileges;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_1'@'localhost' WITH GRANT OPTION
 | ||
| revoke LOCK TABLES, ALTER on mysqltest.* from mysqltest_1@localhost;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, CREATE TEMPORARY TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `mysqltest`.* TO 'mysqltest_1'@'localhost' WITH GRANT OPTION
 | ||
| revoke all privileges on mysqltest.* from mysqltest_1@localhost;
 | ||
| delete from mysql.user where user='mysqltest_1';
 | ||
| flush privileges;
 | ||
| grant usage on test.* to mysqltest_1@localhost with grant option;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT USAGE ON `mysqltest`.* TO 'mysqltest_1'@'localhost' WITH GRANT OPTION
 | ||
| GRANT USAGE ON `test`.* TO 'mysqltest_1'@'localhost' WITH GRANT OPTION
 | ||
| delete from mysql.user where user='mysqltest_1';
 | ||
| delete from mysql.db where user='mysqltest_1';
 | ||
| delete from mysql.tables_priv where user='mysqltest_1';
 | ||
| delete from mysql.columns_priv where user='mysqltest_1';
 | ||
| flush privileges;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| ERROR 42000: There is no such grant defined for user 'mysqltest_1' on host 'localhost'
 | ||
| create table t1 (a int);
 | ||
| GRANT select,update,insert on t1 to mysqltest_1@localhost;
 | ||
| GRANT select (a), update (a),insert(a), references(a) on t1 to mysqltest_1@localhost;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT SELECT, SELECT (a), INSERT, INSERT (a), UPDATE, UPDATE (a), REFERENCES (a) ON `test`.`t1` TO 'mysqltest_1'@'localhost'
 | ||
| select table_priv,column_priv from mysql.tables_priv where user="mysqltest_1";
 | ||
| table_priv	column_priv
 | ||
| Select,Insert,Update	Select,Insert,Update,References
 | ||
| REVOKE select (a), update on t1 from mysqltest_1@localhost;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT SELECT, INSERT, INSERT (a), REFERENCES (a) ON `test`.`t1` TO 'mysqltest_1'@'localhost'
 | ||
| REVOKE select,update,insert,insert (a) on t1 from mysqltest_1@localhost;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT REFERENCES (a) ON `test`.`t1` TO 'mysqltest_1'@'localhost'
 | ||
| GRANT select,references on t1 to mysqltest_1@localhost;
 | ||
| select table_priv,column_priv from mysql.tables_priv where user="mysqltest_1";
 | ||
| table_priv	column_priv
 | ||
| Select,References	References
 | ||
| grant all on test.* to mysqltest_3@localhost with grant option;
 | ||
| revoke all on test.* from mysqltest_3@localhost;
 | ||
| show grants for mysqltest_3@localhost;
 | ||
| Grants for mysqltest_3@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_3'@'localhost'
 | ||
| GRANT USAGE ON `test`.* TO 'mysqltest_3'@'localhost' WITH GRANT OPTION
 | ||
| revoke grant option on test.* from mysqltest_3@localhost;
 | ||
| show grants for mysqltest_3@localhost;
 | ||
| Grants for mysqltest_3@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_3'@'localhost'
 | ||
| grant all on test.t1 to mysqltest_2@localhost with grant option;
 | ||
| revoke all on test.t1 from mysqltest_2@localhost;
 | ||
| show grants for mysqltest_2@localhost;
 | ||
| Grants for mysqltest_2@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_2'@'localhost'
 | ||
| GRANT USAGE ON `test`.`t1` TO 'mysqltest_2'@'localhost' WITH GRANT OPTION
 | ||
| revoke grant option on test.t1 from mysqltest_2@localhost;
 | ||
| show grants for mysqltest_2@localhost;
 | ||
| Grants for mysqltest_2@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_2'@'localhost'
 | ||
| delete from mysql.user where user='mysqltest_1' or user="mysqltest_2" or user="mysqltest_3";
 | ||
| delete from mysql.db where user='mysqltest_1' or user="mysqltest_2" or user="mysqltest_3";
 | ||
| delete from mysql.tables_priv where user='mysqltest_1' or user="mysqltest_2" or user="mysqltest_3";
 | ||
| delete from mysql.columns_priv where user='mysqltest_1' or user="mysqltest_2" or user="mysqltest_3";
 | ||
| flush privileges;
 | ||
| drop table t1;
 | ||
| GRANT FILE on mysqltest.*  to mysqltest_1@localhost;
 | ||
| ERROR HY000: Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
 | ||
| select 1;
 | ||
| 1
 | ||
| 1
 | ||
| insert into mysql.user (host, user) values ('localhost', 'test11');
 | ||
| Warnings:
 | ||
| Warning	1364	Field 'ssl_cipher' doesn't have a default value
 | ||
| Warning	1364	Field 'x509_issuer' doesn't have a default value
 | ||
| Warning	1364	Field 'x509_subject' doesn't have a default value
 | ||
| insert into mysql.db (host, db, user, select_priv) values 
 | ||
| ('localhost', 'a%', 'test11', 'Y'), ('localhost', 'ab%', 'test11', 'Y');
 | ||
| alter table mysql.db order by db asc;
 | ||
| flush privileges;
 | ||
| show grants for test11@localhost;
 | ||
| Grants for test11@localhost
 | ||
| GRANT USAGE ON *.* TO 'test11'@'localhost'
 | ||
| GRANT SELECT ON `ab%`.* TO 'test11'@'localhost'
 | ||
| GRANT SELECT ON `a%`.* TO 'test11'@'localhost'
 | ||
| alter table mysql.db order by db desc;
 | ||
| flush privileges;
 | ||
| show grants for test11@localhost;
 | ||
| Grants for test11@localhost
 | ||
| GRANT USAGE ON *.* TO 'test11'@'localhost'
 | ||
| GRANT SELECT ON `ab%`.* TO 'test11'@'localhost'
 | ||
| GRANT SELECT ON `a%`.* TO 'test11'@'localhost'
 | ||
| delete from mysql.user where user='test11';
 | ||
| delete from mysql.db where user='test11';
 | ||
| create database mysqltest1;
 | ||
| grant usage on mysqltest1.* to test6123 identified by 'magic123';
 | ||
| select host,db,user,select_priv,insert_priv from mysql.db where db="mysqltest1";
 | ||
| host	db	user	select_priv	insert_priv
 | ||
| delete from mysql.user where user='test6123';
 | ||
| drop database mysqltest1;
 | ||
| create table t1 (a int);
 | ||
| grant ALL PRIVILEGES on *.* to drop_user2@localhost with GRANT OPTION;
 | ||
| show grants for drop_user2@localhost;
 | ||
| Grants for drop_user2@localhost
 | ||
| GRANT ALL PRIVILEGES ON *.* TO 'drop_user2'@'localhost' WITH GRANT OPTION
 | ||
| revoke all privileges, grant option from drop_user2@localhost;
 | ||
| drop user drop_user2@localhost;
 | ||
| grant ALL PRIVILEGES on *.* to drop_user@localhost with GRANT OPTION;
 | ||
| grant ALL PRIVILEGES on test.* to drop_user@localhost with GRANT OPTION;
 | ||
| grant select(a) on test.t1 to drop_user@localhost;
 | ||
| show grants for drop_user@localhost;
 | ||
| Grants for drop_user@localhost
 | ||
| GRANT ALL PRIVILEGES ON *.* TO 'drop_user'@'localhost' WITH GRANT OPTION
 | ||
| GRANT ALL PRIVILEGES ON `test`.* TO 'drop_user'@'localhost' WITH GRANT OPTION
 | ||
| GRANT SELECT (a) ON `test`.`t1` TO 'drop_user'@'localhost'
 | ||
| set sql_mode=ansi_quotes;
 | ||
| show grants for drop_user@localhost;
 | ||
| Grants for drop_user@localhost
 | ||
| GRANT ALL PRIVILEGES ON *.* TO 'drop_user'@'localhost' WITH GRANT OPTION
 | ||
| GRANT ALL PRIVILEGES ON "test".* TO 'drop_user'@'localhost' WITH GRANT OPTION
 | ||
| GRANT SELECT (a) ON "test"."t1" TO 'drop_user'@'localhost'
 | ||
| set sql_mode=default;
 | ||
| set sql_quote_show_create=0;
 | ||
| show grants for drop_user@localhost;
 | ||
| Grants for drop_user@localhost
 | ||
| GRANT ALL PRIVILEGES ON *.* TO 'drop_user'@'localhost' WITH GRANT OPTION
 | ||
| GRANT ALL PRIVILEGES ON test.* TO 'drop_user'@'localhost' WITH GRANT OPTION
 | ||
| GRANT SELECT (a) ON test.t1 TO 'drop_user'@'localhost'
 | ||
| set sql_mode="ansi_quotes";
 | ||
| show grants for drop_user@localhost;
 | ||
| Grants for drop_user@localhost
 | ||
| GRANT ALL PRIVILEGES ON *.* TO 'drop_user'@'localhost' WITH GRANT OPTION
 | ||
| GRANT ALL PRIVILEGES ON test.* TO 'drop_user'@'localhost' WITH GRANT OPTION
 | ||
| GRANT SELECT (a) ON test.t1 TO 'drop_user'@'localhost'
 | ||
| set sql_quote_show_create=1;
 | ||
| show grants for drop_user@localhost;
 | ||
| Grants for drop_user@localhost
 | ||
| GRANT ALL PRIVILEGES ON *.* TO 'drop_user'@'localhost' WITH GRANT OPTION
 | ||
| GRANT ALL PRIVILEGES ON "test".* TO 'drop_user'@'localhost' WITH GRANT OPTION
 | ||
| GRANT SELECT (a) ON "test"."t1" TO 'drop_user'@'localhost'
 | ||
| set sql_mode="";
 | ||
| show grants for drop_user@localhost;
 | ||
| Grants for drop_user@localhost
 | ||
| GRANT ALL PRIVILEGES ON *.* TO 'drop_user'@'localhost' WITH GRANT OPTION
 | ||
| GRANT ALL PRIVILEGES ON `test`.* TO 'drop_user'@'localhost' WITH GRANT OPTION
 | ||
| GRANT SELECT (a) ON `test`.`t1` TO 'drop_user'@'localhost'
 | ||
| revoke all privileges, grant option from drop_user@localhost;
 | ||
| show grants for drop_user@localhost;
 | ||
| Grants for drop_user@localhost
 | ||
| GRANT USAGE ON *.* TO 'drop_user'@'localhost'
 | ||
| drop user drop_user@localhost;
 | ||
| revoke all privileges, grant option from drop_user@localhost;
 | ||
| ERROR HY000: Can't revoke all privileges for one or more of the requested users
 | ||
| grant select(a) on test.t1 to drop_user1@localhost;
 | ||
| grant select on test.t1 to drop_user2@localhost;
 | ||
| grant select on test.* to drop_user3@localhost;
 | ||
| grant select on *.* to drop_user4@localhost;
 | ||
| drop user drop_user1@localhost, drop_user2@localhost, drop_user3@localhost,
 | ||
| drop_user4@localhost;
 | ||
| revoke all privileges, grant option from drop_user1@localhost, drop_user2@localhost,
 | ||
| drop_user3@localhost, drop_user4@localhost;
 | ||
| ERROR HY000: Can't revoke all privileges for one or more of the requested users
 | ||
| drop user drop_user1@localhost, drop_user2@localhost, drop_user3@localhost,
 | ||
| drop_user4@localhost;
 | ||
| ERROR HY000: Operation DROP USER failed for 'drop_user1'@'localhost','drop_user2'@'localhost','drop_user3'@'localhost','drop_user4'@'localhost'
 | ||
| drop table t1;
 | ||
| grant usage on *.* to mysqltest_1@localhost identified by "password";
 | ||
| grant select, update, insert on test.* to mysqltest_1@localhost;
 | ||
| show grants for mysqltest_1@localhost;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19'
 | ||
| GRANT SELECT, INSERT, UPDATE ON `test`.* TO 'mysqltest_1'@'localhost'
 | ||
| drop user mysqltest_1@localhost;
 | ||
| SET NAMES koi8r;
 | ||
| CREATE DATABASE <20><>;
 | ||
| USE <20><>;
 | ||
| CREATE TABLE <20><><EFBFBD> (<28><><EFBFBD> int);
 | ||
| GRANT SELECT ON <20><>.* TO <20><><EFBFBD><EFBFBD>@localhost;
 | ||
| SHOW GRANTS FOR <20><><EFBFBD><EFBFBD>@localhost;
 | ||
| Grants for <20><><EFBFBD><EFBFBD>@localhost
 | ||
| GRANT USAGE ON *.* TO '<27><><EFBFBD><EFBFBD>'@'localhost'
 | ||
| GRANT SELECT ON `<60><>`.* TO '<27><><EFBFBD><EFBFBD>'@'localhost'
 | ||
| REVOKE SELECT ON <20><>.* FROM <20><><EFBFBD><EFBFBD>@localhost;
 | ||
| GRANT SELECT ON <20><>.<2E><><EFBFBD> TO <20><><EFBFBD><EFBFBD>@localhost;
 | ||
| SHOW GRANTS FOR <20><><EFBFBD><EFBFBD>@localhost;
 | ||
| Grants for <20><><EFBFBD><EFBFBD>@localhost
 | ||
| GRANT USAGE ON *.* TO '<27><><EFBFBD><EFBFBD>'@'localhost'
 | ||
| GRANT SELECT ON `<60><>`.`<60><><EFBFBD>` TO '<27><><EFBFBD><EFBFBD>'@'localhost'
 | ||
| REVOKE SELECT ON <20><>.<2E><><EFBFBD> FROM <20><><EFBFBD><EFBFBD>@localhost;
 | ||
| GRANT SELECT (<28><><EFBFBD>) ON <20><>.<2E><><EFBFBD> TO <20><><EFBFBD><EFBFBD>@localhost;
 | ||
| SHOW GRANTS FOR <20><><EFBFBD><EFBFBD>@localhost;
 | ||
| Grants for <20><><EFBFBD><EFBFBD>@localhost
 | ||
| GRANT USAGE ON *.* TO '<27><><EFBFBD><EFBFBD>'@'localhost'
 | ||
| GRANT SELECT (<28><><EFBFBD>) ON `<60><>`.`<60><><EFBFBD>` TO '<27><><EFBFBD><EFBFBD>'@'localhost'
 | ||
| REVOKE SELECT (<28><><EFBFBD>) ON <20><>.<2E><><EFBFBD> FROM <20><><EFBFBD><EFBFBD>@localhost;
 | ||
| DROP USER <20><><EFBFBD><EFBFBD>@localhost;
 | ||
| DROP DATABASE <20><>;
 | ||
| SET NAMES latin1;
 | ||
| USE test;
 | ||
| CREATE TABLE t1 (a int );
 | ||
| CREATE TABLE t2 LIKE t1;
 | ||
| CREATE TABLE t3 LIKE t1;
 | ||
| CREATE TABLE t4 LIKE t1;
 | ||
| CREATE TABLE t5 LIKE t1;
 | ||
| CREATE TABLE t6 LIKE t1;
 | ||
| CREATE TABLE t7 LIKE t1;
 | ||
| CREATE TABLE t8 LIKE t1;
 | ||
| CREATE TABLE t9 LIKE t1;
 | ||
| CREATE TABLE t10 LIKE t1;
 | ||
| CREATE DATABASE testdb1;
 | ||
| CREATE DATABASE testdb2;
 | ||
| CREATE DATABASE testdb3;
 | ||
| CREATE DATABASE testdb4;
 | ||
| CREATE DATABASE testdb5;
 | ||
| CREATE DATABASE testdb6;
 | ||
| CREATE DATABASE testdb7;
 | ||
| CREATE DATABASE testdb8;
 | ||
| CREATE DATABASE testdb9;
 | ||
| CREATE DATABASE testdb10;
 | ||
| GRANT ALL ON testdb1.* TO testuser@localhost;
 | ||
| GRANT ALL ON testdb2.* TO testuser@localhost;
 | ||
| GRANT ALL ON testdb3.* TO testuser@localhost;
 | ||
| GRANT ALL ON testdb4.* TO testuser@localhost;
 | ||
| GRANT ALL ON testdb5.* TO testuser@localhost;
 | ||
| GRANT ALL ON testdb6.* TO testuser@localhost;
 | ||
| GRANT ALL ON testdb7.* TO testuser@localhost;
 | ||
| GRANT ALL ON testdb8.* TO testuser@localhost;
 | ||
| GRANT ALL ON testdb9.* TO testuser@localhost;
 | ||
| GRANT ALL ON testdb10.* TO testuser@localhost;
 | ||
| GRANT SELECT ON test.t1 TO testuser@localhost;
 | ||
| GRANT SELECT ON test.t2 TO testuser@localhost;
 | ||
| GRANT SELECT ON test.t3 TO testuser@localhost;
 | ||
| GRANT SELECT ON test.t4 TO testuser@localhost;
 | ||
| GRANT SELECT ON test.t5 TO testuser@localhost;
 | ||
| GRANT SELECT ON test.t6 TO testuser@localhost;
 | ||
| GRANT SELECT ON test.t7 TO testuser@localhost;
 | ||
| GRANT SELECT ON test.t8 TO testuser@localhost;
 | ||
| GRANT SELECT ON test.t9 TO testuser@localhost;
 | ||
| GRANT SELECT ON test.t10 TO testuser@localhost;
 | ||
| GRANT SELECT (a) ON test.t1 TO testuser@localhost;
 | ||
| GRANT SELECT (a) ON test.t2 TO testuser@localhost;
 | ||
| GRANT SELECT (a) ON test.t3 TO testuser@localhost;
 | ||
| GRANT SELECT (a) ON test.t4 TO testuser@localhost;
 | ||
| GRANT SELECT (a) ON test.t5 TO testuser@localhost;
 | ||
| GRANT SELECT (a) ON test.t6 TO testuser@localhost;
 | ||
| GRANT SELECT (a) ON test.t7 TO testuser@localhost;
 | ||
| GRANT SELECT (a) ON test.t8 TO testuser@localhost;
 | ||
| GRANT SELECT (a) ON test.t9 TO testuser@localhost;
 | ||
| GRANT SELECT (a) ON test.t10 TO testuser@localhost;
 | ||
| REVOKE ALL PRIVILEGES, GRANT OPTION FROM testuser@localhost;
 | ||
| SHOW GRANTS FOR testuser@localhost;
 | ||
| Grants for testuser@localhost
 | ||
| GRANT USAGE ON *.* TO 'testuser'@'localhost'
 | ||
| DROP USER testuser@localhost;
 | ||
| DROP TABLE t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
 | ||
| DROP DATABASE testdb1;
 | ||
| DROP DATABASE testdb2;
 | ||
| DROP DATABASE testdb3;
 | ||
| DROP DATABASE testdb4;
 | ||
| DROP DATABASE testdb5;
 | ||
| DROP DATABASE testdb6;
 | ||
| DROP DATABASE testdb7;
 | ||
| DROP DATABASE testdb8;
 | ||
| DROP DATABASE testdb9;
 | ||
| DROP DATABASE testdb10;
 | ||
| create table t1(a int, b int, c int, d int);
 | ||
| grant insert(b), insert(c), insert(d), insert(a) on t1 to grant_user@localhost;
 | ||
| show grants for grant_user@localhost;
 | ||
| Grants for grant_user@localhost
 | ||
| GRANT USAGE ON *.* TO 'grant_user'@'localhost'
 | ||
| GRANT INSERT (a, d, c, b) ON `test`.`t1` TO 'grant_user'@'localhost'
 | ||
| select Host,Db,User,Table_name,Column_name,Column_priv from mysql.columns_priv order by Column_name;
 | ||
| Host	Db	User	Table_name	Column_name	Column_priv
 | ||
| localhost	test	grant_user	t1	a	Insert
 | ||
| localhost	test	grant_user	t1	b	Insert
 | ||
| localhost	test	grant_user	t1	c	Insert
 | ||
| localhost	test	grant_user	t1	d	Insert
 | ||
| revoke ALL PRIVILEGES on t1 from grant_user@localhost;
 | ||
| show grants for grant_user@localhost;
 | ||
| Grants for grant_user@localhost
 | ||
| GRANT USAGE ON *.* TO 'grant_user'@'localhost'
 | ||
| select Host,Db,User,Table_name,Column_name,Column_priv from mysql.columns_priv;
 | ||
| Host	Db	User	Table_name	Column_name	Column_priv
 | ||
| drop user grant_user@localhost;
 | ||
| drop table t1;
 | ||
| create database mysqltest_1;
 | ||
| create database mysqltest_2;
 | ||
| create table mysqltest_1.t1 select 1 a, 2 q;
 | ||
| create table mysqltest_1.t2 select 1 b, 2 r;
 | ||
| create table mysqltest_2.t1 select 1 c, 2 s;
 | ||
| create table mysqltest_2.t2 select 1 d, 2 t;
 | ||
| grant update (a) on mysqltest_1.t1 to mysqltest_3@localhost;
 | ||
| grant select (b) on mysqltest_1.t2 to mysqltest_3@localhost;
 | ||
| grant select (c) on mysqltest_2.t1 to mysqltest_3@localhost;
 | ||
| grant update (d) on mysqltest_2.t2 to mysqltest_3@localhost;
 | ||
| SELECT * FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES 
 | ||
| WHERE GRANTEE = '''mysqltest_3''@''localhost''' 
 | ||
| ORDER BY TABLE_NAME,COLUMN_NAME,PRIVILEGE_TYPE;
 | ||
| GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	TABLE_NAME	COLUMN_NAME	PRIVILEGE_TYPE	IS_GRANTABLE
 | ||
| 'mysqltest_3'@'localhost'	NULL	mysqltest_1	t1	a	UPDATE	NO
 | ||
| 'mysqltest_3'@'localhost'	NULL	mysqltest_2	t1	c	SELECT	NO
 | ||
| 'mysqltest_3'@'localhost'	NULL	mysqltest_1	t2	b	SELECT	NO
 | ||
| 'mysqltest_3'@'localhost'	NULL	mysqltest_2	t2	d	UPDATE	NO
 | ||
| SELECT * FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES
 | ||
| WHERE GRANTEE = '''mysqltest_3''@''localhost''' 
 | ||
| ORDER BY TABLE_NAME,PRIVILEGE_TYPE;
 | ||
| GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	TABLE_NAME	PRIVILEGE_TYPE	IS_GRANTABLE
 | ||
| SELECT * from INFORMATION_SCHEMA.SCHEMA_PRIVILEGES
 | ||
| WHERE GRANTEE = '''mysqltest_3''@''localhost''' 
 | ||
| ORDER BY TABLE_SCHEMA,PRIVILEGE_TYPE;
 | ||
| GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	PRIVILEGE_TYPE	IS_GRANTABLE
 | ||
| SELECT * from INFORMATION_SCHEMA.USER_PRIVILEGES
 | ||
| WHERE GRANTEE = '''mysqltest_3''@''localhost'''
 | ||
|  ORDER BY TABLE_CATALOG,PRIVILEGE_TYPE;
 | ||
| GRANTEE	TABLE_CATALOG	PRIVILEGE_TYPE	IS_GRANTABLE
 | ||
| 'mysqltest_3'@'localhost'	NULL	USAGE	NO
 | ||
| update mysqltest_1.t1, mysqltest_1.t2 set q=10 where b=1;
 | ||
| ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for column 'q' in table 't1'
 | ||
| update mysqltest_1.t2, mysqltest_2.t2 set d=20 where d=1;
 | ||
| ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for column 'd' in table 't2'
 | ||
| update mysqltest_1.t1, mysqltest_2.t2 set d=20 where d=1;
 | ||
| ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for table 't1'
 | ||
| update mysqltest_2.t1, mysqltest_1.t2 set c=20 where b=1;
 | ||
| ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 't1'
 | ||
| update mysqltest_2.t1, mysqltest_2.t2 set d=10 where s=2;
 | ||
| ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for column 's' in table 't1'
 | ||
| update mysqltest_1.t1, mysqltest_2.t2 set a=10,d=10;
 | ||
| update mysqltest_1.t1, mysqltest_2.t1 set a=20 where c=20;
 | ||
| select t1.*,t2.* from mysqltest_1.t1,mysqltest_1.t2;
 | ||
| a	q	b	r
 | ||
| 10	2	1	2
 | ||
| select t1.*,t2.* from mysqltest_2.t1,mysqltest_2.t2;
 | ||
| c	s	d	t
 | ||
| 1	2	10	2
 | ||
| revoke all on mysqltest_1.t1 from mysqltest_3@localhost;
 | ||
| revoke all on mysqltest_1.t2 from mysqltest_3@localhost;
 | ||
| revoke all on mysqltest_2.t1 from mysqltest_3@localhost;
 | ||
| revoke all on mysqltest_2.t2 from mysqltest_3@localhost;
 | ||
| grant all on mysqltest_2.* to mysqltest_3@localhost;
 | ||
| grant select on *.* to mysqltest_3@localhost;
 | ||
| grant select on mysqltest_2.t1 to mysqltest_3@localhost;
 | ||
| flush privileges;
 | ||
| use mysqltest_1;
 | ||
| update mysqltest_2.t1, mysqltest_2.t2 set c=500,d=600;
 | ||
| update mysqltest_1.t1, mysqltest_1.t2 set a=100,b=200;
 | ||
| ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 't1'
 | ||
| use mysqltest_2;
 | ||
| update mysqltest_1.t1, mysqltest_1.t2 set a=100,b=200;
 | ||
| ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 't1'
 | ||
| update mysqltest_2.t1, mysqltest_1.t2 set c=100,b=200;
 | ||
| ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 't2'
 | ||
| update mysqltest_1.t1, mysqltest_2.t2 set a=100,d=200;
 | ||
| ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for table 't1'
 | ||
| select t1.*,t2.* from mysqltest_1.t1,mysqltest_1.t2;
 | ||
| a	q	b	r
 | ||
| 10	2	1	2
 | ||
| select t1.*,t2.* from mysqltest_2.t1,mysqltest_2.t2;
 | ||
| c	s	d	t
 | ||
| 500	2	600	2
 | ||
| delete from mysql.user where user='mysqltest_3';
 | ||
| delete from mysql.db where user="mysqltest_3";
 | ||
| delete from mysql.tables_priv where user="mysqltest_3";
 | ||
| delete from mysql.columns_priv where user="mysqltest_3";
 | ||
| flush privileges;
 | ||
| drop database mysqltest_1;
 | ||
| drop database mysqltest_2;
 | ||
| SHOW PRIVILEGES;
 | ||
| Privilege	Context	Comment
 | ||
| Alter	Tables	To alter the table
 | ||
| Alter routine	Functions,Procedures	To alter or drop stored functions/procedures
 | ||
| Create	Databases,Tables,Indexes	To create new databases and tables
 | ||
| Create routine	Functions,Procedures	To use CREATE FUNCTION/PROCEDURE
 | ||
| Create temporary tables	Databases	To use CREATE TEMPORARY TABLE
 | ||
| Create view	Tables	To create new views
 | ||
| Create user	Server Admin	To create new users
 | ||
| Delete	Tables	To delete existing rows
 | ||
| Drop	Databases,Tables	To drop databases, tables, and views
 | ||
| Event	Server Admin	To create, alter, drop and execute events
 | ||
| Execute	Functions,Procedures	To execute stored routines
 | ||
| File	File access on server	To read and write files on the server
 | ||
| Grant option	Databases,Tables,Functions,Procedures	To give to other users those privileges you possess
 | ||
| Index	Tables	To create or drop indexes
 | ||
| Insert	Tables	To insert data into tables
 | ||
| Lock tables	Databases	To use LOCK TABLES (together with SELECT privilege)
 | ||
| Process	Server Admin	To view the plain text of currently executing queries
 | ||
| References	Databases,Tables	To have references on tables
 | ||
| Reload	Server Admin	To reload or refresh tables, logs and privileges
 | ||
| Replication client	Server Admin	To ask where the slave or master servers are
 | ||
| Replication slave	Server Admin	To read binary log events from the master
 | ||
| Select	Tables	To retrieve rows from table
 | ||
| Show databases	Server Admin	To see all databases with SHOW DATABASES
 | ||
| Show view	Tables	To see views with SHOW CREATE VIEW
 | ||
| Shutdown	Server Admin	To shut down the server
 | ||
| Super	Server Admin	To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.
 | ||
| Trigger	Tables	To use triggers
 | ||
| Update	Tables	To update existing rows
 | ||
| Usage	Server Admin	No privileges - allow connect only
 | ||
| create database mysqltest;
 | ||
| create table mysqltest.t1 (a int,b int,c int);
 | ||
| grant all on mysqltest.t1 to mysqltest_1@localhost;
 | ||
| alter table t1 rename t2;
 | ||
| ERROR 42000: INSERT,CREATE command denied to user 'mysqltest_1'@'localhost' for table 't2'
 | ||
| revoke all privileges on mysqltest.t1 from mysqltest_1@localhost;
 | ||
| delete from mysql.user where user=_binary'mysqltest_1';
 | ||
| drop database mysqltest;
 | ||
| CREATE USER dummy@localhost;
 | ||
| CREATE DATABASE mysqltest;
 | ||
| CREATE TABLE mysqltest.dummytable (dummyfield INT);
 | ||
| CREATE VIEW mysqltest.dummyview AS SELECT dummyfield FROM mysqltest.dummytable;
 | ||
| GRANT ALL PRIVILEGES ON mysqltest.dummytable TO dummy@localhost;
 | ||
| GRANT ALL PRIVILEGES ON mysqltest.dummyview TO dummy@localhost;
 | ||
| SHOW GRANTS FOR dummy@localhost;
 | ||
| Grants for dummy@localhost
 | ||
| GRANT USAGE ON *.* TO 'dummy'@'localhost'
 | ||
| GRANT ALL PRIVILEGES ON `mysqltest`.`dummyview` TO 'dummy'@'localhost'
 | ||
| GRANT ALL PRIVILEGES ON `mysqltest`.`dummytable` TO 'dummy'@'localhost'
 | ||
| use INFORMATION_SCHEMA;
 | ||
| SELECT TABLE_SCHEMA, TABLE_NAME, GROUP_CONCAT(PRIVILEGE_TYPE ORDER BY
 | ||
| PRIVILEGE_TYPE SEPARATOR ', ') AS PRIVILEGES FROM TABLE_PRIVILEGES WHERE GRANTEE
 | ||
| = '\'dummy\'@\'localhost\'' GROUP BY TABLE_SCHEMA, TABLE_NAME;
 | ||
| TABLE_SCHEMA	TABLE_NAME	PRIVILEGES
 | ||
| mysqltest	dummytable	ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE
 | ||
| mysqltest	dummyview	ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE
 | ||
| FLUSH PRIVILEGES;
 | ||
| SHOW GRANTS FOR dummy@localhost;
 | ||
| Grants for dummy@localhost
 | ||
| GRANT USAGE ON *.* TO 'dummy'@'localhost'
 | ||
| GRANT ALL PRIVILEGES ON `mysqltest`.`dummyview` TO 'dummy'@'localhost'
 | ||
| GRANT ALL PRIVILEGES ON `mysqltest`.`dummytable` TO 'dummy'@'localhost'
 | ||
| SELECT TABLE_SCHEMA, TABLE_NAME, GROUP_CONCAT(PRIVILEGE_TYPE ORDER BY
 | ||
| PRIVILEGE_TYPE SEPARATOR ', ') AS PRIVILEGES FROM TABLE_PRIVILEGES WHERE GRANTEE
 | ||
| = '\'dummy\'@\'localhost\'' GROUP BY TABLE_SCHEMA, TABLE_NAME;
 | ||
| TABLE_SCHEMA	TABLE_NAME	PRIVILEGES
 | ||
| mysqltest	dummytable	ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE
 | ||
| mysqltest	dummyview	ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE
 | ||
| SHOW FIELDS FROM mysql.tables_priv;
 | ||
| Field	Type	Null	Key	Default	Extra
 | ||
| Host	char(60)	NO	PRI		
 | ||
| Db	char(64)	NO	PRI		
 | ||
| User	char(16)	NO	PRI		
 | ||
| Table_name	char(64)	NO	PRI		
 | ||
| Grantor	char(77)	NO	MUL		
 | ||
| Timestamp	timestamp	NO		CURRENT_TIMESTAMP	
 | ||
| Table_priv	set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger')	NO			
 | ||
| Column_priv	set('Select','Insert','Update','References')	NO			
 | ||
| use test;
 | ||
| REVOKE ALL PRIVILEGES, GRANT OPTION FROM dummy@localhost;
 | ||
| DROP USER dummy@localhost;
 | ||
| DROP DATABASE mysqltest;
 | ||
| CREATE USER dummy@localhost;
 | ||
| CREATE DATABASE mysqltest;
 | ||
| CREATE TABLE mysqltest.dummytable (dummyfield INT);
 | ||
| CREATE VIEW mysqltest.dummyview AS SELECT dummyfield FROM mysqltest.dummytable;
 | ||
| GRANT CREATE VIEW ON mysqltest.dummytable TO dummy@localhost;
 | ||
| GRANT CREATE VIEW ON mysqltest.dummyview TO dummy@localhost;
 | ||
| SHOW GRANTS FOR dummy@localhost;
 | ||
| Grants for dummy@localhost
 | ||
| GRANT USAGE ON *.* TO 'dummy'@'localhost'
 | ||
| GRANT CREATE VIEW ON `mysqltest`.`dummyview` TO 'dummy'@'localhost'
 | ||
| GRANT CREATE VIEW ON `mysqltest`.`dummytable` TO 'dummy'@'localhost'
 | ||
| use INFORMATION_SCHEMA;
 | ||
| SELECT TABLE_SCHEMA, TABLE_NAME, GROUP_CONCAT(PRIVILEGE_TYPE ORDER BY
 | ||
| PRIVILEGE_TYPE SEPARATOR ', ') AS PRIVILEGES FROM TABLE_PRIVILEGES WHERE GRANTEE
 | ||
| = '\'dummy\'@\'localhost\'' GROUP BY TABLE_SCHEMA, TABLE_NAME;
 | ||
| TABLE_SCHEMA	TABLE_NAME	PRIVILEGES
 | ||
| mysqltest	dummytable	CREATE VIEW
 | ||
| mysqltest	dummyview	CREATE VIEW
 | ||
| FLUSH PRIVILEGES;
 | ||
| SHOW GRANTS FOR dummy@localhost;
 | ||
| Grants for dummy@localhost
 | ||
| GRANT USAGE ON *.* TO 'dummy'@'localhost'
 | ||
| GRANT CREATE VIEW ON `mysqltest`.`dummyview` TO 'dummy'@'localhost'
 | ||
| GRANT CREATE VIEW ON `mysqltest`.`dummytable` TO 'dummy'@'localhost'
 | ||
| SELECT TABLE_SCHEMA, TABLE_NAME, GROUP_CONCAT(PRIVILEGE_TYPE ORDER BY
 | ||
| PRIVILEGE_TYPE SEPARATOR ', ') AS PRIVILEGES FROM TABLE_PRIVILEGES WHERE GRANTEE
 | ||
| = '\'dummy\'@\'localhost\'' GROUP BY TABLE_SCHEMA, TABLE_NAME;
 | ||
| TABLE_SCHEMA	TABLE_NAME	PRIVILEGES
 | ||
| mysqltest	dummytable	CREATE VIEW
 | ||
| mysqltest	dummyview	CREATE VIEW
 | ||
| use test;
 | ||
| REVOKE ALL PRIVILEGES, GRANT OPTION FROM dummy@localhost;
 | ||
| DROP USER dummy@localhost;
 | ||
| DROP DATABASE mysqltest;
 | ||
| CREATE USER dummy@localhost;
 | ||
| CREATE DATABASE mysqltest;
 | ||
| CREATE TABLE mysqltest.dummytable (dummyfield INT);
 | ||
| CREATE VIEW mysqltest.dummyview AS SELECT dummyfield FROM mysqltest.dummytable;
 | ||
| GRANT SHOW VIEW ON mysqltest.dummytable TO dummy@localhost;
 | ||
| GRANT SHOW VIEW ON mysqltest.dummyview TO dummy@localhost;
 | ||
| SHOW GRANTS FOR dummy@localhost;
 | ||
| Grants for dummy@localhost
 | ||
| GRANT USAGE ON *.* TO 'dummy'@'localhost'
 | ||
| GRANT SHOW VIEW ON `mysqltest`.`dummyview` TO 'dummy'@'localhost'
 | ||
| GRANT SHOW VIEW ON `mysqltest`.`dummytable` TO 'dummy'@'localhost'
 | ||
| use INFORMATION_SCHEMA;
 | ||
| SELECT TABLE_SCHEMA, TABLE_NAME, GROUP_CONCAT(PRIVILEGE_TYPE ORDER BY
 | ||
| PRIVILEGE_TYPE SEPARATOR ', ') AS PRIVILEGES FROM TABLE_PRIVILEGES WHERE GRANTEE
 | ||
| = '\'dummy\'@\'localhost\'' GROUP BY TABLE_SCHEMA, TABLE_NAME;
 | ||
| TABLE_SCHEMA	TABLE_NAME	PRIVILEGES
 | ||
| mysqltest	dummytable	SHOW VIEW
 | ||
| mysqltest	dummyview	SHOW VIEW
 | ||
| FLUSH PRIVILEGES;
 | ||
| SHOW GRANTS FOR dummy@localhost;
 | ||
| Grants for dummy@localhost
 | ||
| GRANT USAGE ON *.* TO 'dummy'@'localhost'
 | ||
| GRANT SHOW VIEW ON `mysqltest`.`dummyview` TO 'dummy'@'localhost'
 | ||
| GRANT SHOW VIEW ON `mysqltest`.`dummytable` TO 'dummy'@'localhost'
 | ||
| SELECT TABLE_SCHEMA, TABLE_NAME, GROUP_CONCAT(PRIVILEGE_TYPE ORDER BY
 | ||
| PRIVILEGE_TYPE SEPARATOR ', ') AS PRIVILEGES FROM TABLE_PRIVILEGES WHERE GRANTEE
 | ||
| = '\'dummy\'@\'localhost\'' GROUP BY TABLE_SCHEMA, TABLE_NAME;
 | ||
| TABLE_SCHEMA	TABLE_NAME	PRIVILEGES
 | ||
| mysqltest	dummytable	SHOW VIEW
 | ||
| mysqltest	dummyview	SHOW VIEW
 | ||
| use test;
 | ||
| REVOKE ALL PRIVILEGES, GRANT OPTION FROM dummy@localhost;
 | ||
| DROP USER dummy@localhost;
 | ||
| DROP DATABASE mysqltest;
 | ||
| use mysql;
 | ||
| insert into tables_priv values ('','test_db','mysqltest_1','test_table','test_grantor',CURRENT_TIMESTAMP,'Select','Select');
 | ||
| flush privileges;
 | ||
| delete from tables_priv where host = '' and user = 'mysqltest_1';
 | ||
| flush privileges;
 | ||
| use test;
 | ||
| set @user123="non-existent";
 | ||
| select * from mysql.db where user=@user123;
 | ||
| Host	Db	User	Select_priv	Insert_priv	Update_priv	Delete_priv	Create_priv	Drop_priv	Grant_priv	References_priv	Index_priv	Alter_priv	Create_tmp_table_priv	Lock_tables_priv	Create_view_priv	Show_view_priv	Create_routine_priv	Alter_routine_priv	Execute_priv	Event_priv	Trigger_priv
 | ||
| set names koi8r;
 | ||
| create database <20><>;
 | ||
| grant select on <20><>.* to root@localhost;
 | ||
| select hex(Db) from mysql.db where Db='<27><>';
 | ||
| hex(Db)
 | ||
| D0B1D0B4
 | ||
| show grants for root@localhost;
 | ||
| Grants for root@localhost
 | ||
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
 | ||
| GRANT SELECT ON `<60><>`.* TO 'root'@'localhost'
 | ||
| flush privileges;
 | ||
| show grants for root@localhost;
 | ||
| Grants for root@localhost
 | ||
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
 | ||
| GRANT SELECT ON `<60><>`.* TO 'root'@'localhost'
 | ||
| drop database <20><>;
 | ||
| revoke all privileges on <20><>.* from root@localhost;
 | ||
| show grants for root@localhost;
 | ||
| Grants for root@localhost
 | ||
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
 | ||
| set names latin1;
 | ||
| create user mysqltest_7@;
 | ||
| set password for mysqltest_7@ = password('systpass');
 | ||
| show grants for mysqltest_7@;
 | ||
| Grants for mysqltest_7@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_7'@'' IDENTIFIED BY PASSWORD '*2FB071A056F9BB745219D9C876814231DAF46517'
 | ||
| drop user mysqltest_7@;
 | ||
| show grants for mysqltest_7@;
 | ||
| ERROR 42000: There is no such grant defined for user 'mysqltest_7' on host ''
 | ||
| create database mysqltest;
 | ||
| use mysqltest;
 | ||
| create table t1(f1 int);
 | ||
| GRANT DELETE ON mysqltest.t1 TO mysqltest1@'%';
 | ||
| GRANT SELECT ON mysqltest.t1 TO mysqltest1@'192.%';
 | ||
| show grants for mysqltest1@'192.%';
 | ||
| Grants for mysqltest1@192.%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest1'@'192.%'
 | ||
| GRANT SELECT ON `mysqltest`.`t1` TO 'mysqltest1'@'192.%'
 | ||
| show grants for mysqltest1@'%';
 | ||
| Grants for mysqltest1@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest1'@'%'
 | ||
| GRANT DELETE ON `mysqltest`.`t1` TO 'mysqltest1'@'%'
 | ||
| delete from mysql.user where user='mysqltest1';
 | ||
| delete from mysql.db where user='mysqltest1';
 | ||
| delete from mysql.tables_priv where user='mysqltest1';
 | ||
| flush privileges;
 | ||
| drop database mysqltest;
 | ||
| use test;
 | ||
| create table t1 (a int);
 | ||
| create table t2 as select * from mysql.user where user='';
 | ||
| delete from mysql.user where user='';
 | ||
| flush privileges;
 | ||
| create user mysqltest_8@'';
 | ||
| create user mysqltest_8;
 | ||
| create user mysqltest_8@host8;
 | ||
| create user mysqltest_8@'';
 | ||
| ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@''
 | ||
| create user mysqltest_8;
 | ||
| ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@'%'
 | ||
| create user mysqltest_8@host8;
 | ||
| ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@'host8'
 | ||
| select user, QUOTE(host) from mysql.user where user="mysqltest_8";
 | ||
| user	QUOTE(host)
 | ||
| mysqltest_8	''
 | ||
| mysqltest_8	'%'
 | ||
| mysqltest_8	'host8'
 | ||
| Schema privileges
 | ||
| grant select on mysqltest.* to mysqltest_8@'';
 | ||
| show grants for mysqltest_8@'';
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| GRANT SELECT ON `mysqltest`.* TO 'mysqltest_8'@''
 | ||
| grant select on mysqltest.* to mysqltest_8@;
 | ||
| show grants for mysqltest_8@;
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| GRANT SELECT ON `mysqltest`.* TO 'mysqltest_8'@''
 | ||
| grant select on mysqltest.* to mysqltest_8;
 | ||
| show grants for mysqltest_8;
 | ||
| Grants for mysqltest_8@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
 | ||
| GRANT SELECT ON `mysqltest`.* TO 'mysqltest_8'@'%'
 | ||
| select * from  information_schema.schema_privileges
 | ||
| where grantee like "'mysqltest_8'%";
 | ||
| GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	PRIVILEGE_TYPE	IS_GRANTABLE
 | ||
| 'mysqltest_8'@'%'	NULL	mysqltest	SELECT	NO
 | ||
| 'mysqltest_8'@''	NULL	mysqltest	SELECT	NO
 | ||
| select * from t1;
 | ||
| a
 | ||
| revoke select on mysqltest.* from mysqltest_8@'';
 | ||
| revoke select on mysqltest.* from mysqltest_8;
 | ||
| show grants for mysqltest_8@'';
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| show grants for mysqltest_8;
 | ||
| Grants for mysqltest_8@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
 | ||
| select * from  information_schema.schema_privileges
 | ||
| where grantee like "'mysqltest_8'%";
 | ||
| GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	PRIVILEGE_TYPE	IS_GRANTABLE
 | ||
| flush privileges;
 | ||
| show grants for mysqltest_8@'';
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| show grants for mysqltest_8@;
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| grant select on mysqltest.* to mysqltest_8@'';
 | ||
| flush privileges;
 | ||
| show grants for mysqltest_8@;
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| GRANT SELECT ON `mysqltest`.* TO 'mysqltest_8'@''
 | ||
| revoke select on mysqltest.* from mysqltest_8@'';
 | ||
| flush privileges;
 | ||
| Column privileges
 | ||
| grant update (a) on t1 to mysqltest_8@'';
 | ||
| grant update (a) on t1 to mysqltest_8;
 | ||
| show grants for mysqltest_8@'';
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| GRANT UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@''
 | ||
| show grants for mysqltest_8;
 | ||
| Grants for mysqltest_8@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
 | ||
| GRANT UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@'%'
 | ||
| flush privileges;
 | ||
| show grants for mysqltest_8@'';
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| GRANT UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@''
 | ||
| show grants for mysqltest_8;
 | ||
| Grants for mysqltest_8@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
 | ||
| GRANT UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@'%'
 | ||
| select * from  information_schema.column_privileges;
 | ||
| GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	TABLE_NAME	COLUMN_NAME	PRIVILEGE_TYPE	IS_GRANTABLE
 | ||
| 'mysqltest_8'@'%'	NULL	test	t1	a	UPDATE	NO
 | ||
| 'mysqltest_8'@''	NULL	test	t1	a	UPDATE	NO
 | ||
| select * from t1;
 | ||
| a
 | ||
| revoke update (a) on t1 from mysqltest_8@'';
 | ||
| revoke update (a) on t1 from mysqltest_8;
 | ||
| show grants for mysqltest_8@'';
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| show grants for mysqltest_8;
 | ||
| Grants for mysqltest_8@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
 | ||
| select * from  information_schema.column_privileges;
 | ||
| GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	TABLE_NAME	COLUMN_NAME	PRIVILEGE_TYPE	IS_GRANTABLE
 | ||
| flush privileges;
 | ||
| show grants for mysqltest_8@'';
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| show grants for mysqltest_8;
 | ||
| Grants for mysqltest_8@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
 | ||
| Table privileges
 | ||
| grant update on t1 to mysqltest_8@'';
 | ||
| grant update on t1 to mysqltest_8;
 | ||
| show grants for mysqltest_8@'';
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| GRANT UPDATE ON `test`.`t1` TO 'mysqltest_8'@''
 | ||
| show grants for mysqltest_8;
 | ||
| Grants for mysqltest_8@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
 | ||
| GRANT UPDATE ON `test`.`t1` TO 'mysqltest_8'@'%'
 | ||
| flush privileges;
 | ||
| show grants for mysqltest_8@'';
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| GRANT UPDATE ON `test`.`t1` TO 'mysqltest_8'@''
 | ||
| show grants for mysqltest_8;
 | ||
| Grants for mysqltest_8@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
 | ||
| GRANT UPDATE ON `test`.`t1` TO 'mysqltest_8'@'%'
 | ||
| select * from  information_schema.table_privileges;
 | ||
| GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	TABLE_NAME	PRIVILEGE_TYPE	IS_GRANTABLE
 | ||
| 'mysqltest_8'@'%'	NULL	test	t1	UPDATE	NO
 | ||
| 'mysqltest_8'@''	NULL	test	t1	UPDATE	NO
 | ||
| select * from t1;
 | ||
| a
 | ||
| revoke update on t1 from mysqltest_8@'';
 | ||
| revoke update on t1 from mysqltest_8;
 | ||
| show grants for mysqltest_8@'';
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| show grants for mysqltest_8;
 | ||
| Grants for mysqltest_8@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
 | ||
| select * from  information_schema.table_privileges;
 | ||
| GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	TABLE_NAME	PRIVILEGE_TYPE	IS_GRANTABLE
 | ||
| flush privileges;
 | ||
| show grants for mysqltest_8@'';
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| show grants for mysqltest_8;
 | ||
| Grants for mysqltest_8@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
 | ||
| "DROP USER" should clear privileges
 | ||
| grant all privileges on mysqltest.* to mysqltest_8@'';
 | ||
| grant select on mysqltest.* to mysqltest_8@'';
 | ||
| grant update on t1 to mysqltest_8@'';
 | ||
| grant update (a) on t1 to mysqltest_8@'';
 | ||
| grant all privileges on mysqltest.* to mysqltest_8;
 | ||
| show grants for mysqltest_8@'';
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@''
 | ||
| GRANT UPDATE, UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@''
 | ||
| show grants for mysqltest_8;
 | ||
| Grants for mysqltest_8@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
 | ||
| GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@'%'
 | ||
| select * from  information_schema.user_privileges
 | ||
| where grantee like "'mysqltest_8'%";
 | ||
| GRANTEE	TABLE_CATALOG	PRIVILEGE_TYPE	IS_GRANTABLE
 | ||
| 'mysqltest_8'@'host8'	NULL	USAGE	NO
 | ||
| 'mysqltest_8'@'%'	NULL	USAGE	NO
 | ||
| 'mysqltest_8'@''	NULL	USAGE	NO
 | ||
| select * from t1;
 | ||
| a
 | ||
| flush privileges;
 | ||
| show grants for mysqltest_8@'';
 | ||
| Grants for mysqltest_8@
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@''
 | ||
| GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@''
 | ||
| GRANT UPDATE, UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@''
 | ||
| show grants for mysqltest_8;
 | ||
| Grants for mysqltest_8@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
 | ||
| GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@'%'
 | ||
| drop user mysqltest_8@'';
 | ||
| show grants for mysqltest_8@'';
 | ||
| ERROR 42000: There is no such grant defined for user 'mysqltest_8' on host ''
 | ||
| show grants for mysqltest_8;
 | ||
| Grants for mysqltest_8@%
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
 | ||
| GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@'%'
 | ||
| select * from  information_schema.user_privileges
 | ||
| where grantee like "'mysqltest_8'%";
 | ||
| GRANTEE	TABLE_CATALOG	PRIVILEGE_TYPE	IS_GRANTABLE
 | ||
| 'mysqltest_8'@'host8'	NULL	USAGE	NO
 | ||
| 'mysqltest_8'@'%'	NULL	USAGE	NO
 | ||
| drop user mysqltest_8;
 | ||
| connect(localhost,mysqltest_8,,test,MASTER_PORT,MASTER_SOCKET);
 | ||
| ERROR 28000: Access denied for user 'mysqltest_8'@'localhost' (using password: NO)
 | ||
| show grants for mysqltest_8;
 | ||
| ERROR 42000: There is no such grant defined for user 'mysqltest_8' on host '%'
 | ||
| drop user mysqltest_8@host8;
 | ||
| show grants for mysqltest_8@host8;
 | ||
| ERROR 42000: There is no such grant defined for user 'mysqltest_8' on host 'host8'
 | ||
| insert into mysql.user select * from t2;
 | ||
| flush privileges;
 | ||
| drop table t2;
 | ||
| drop table t1;
 | ||
| CREATE DATABASE mysqltest3;
 | ||
| use mysqltest3;
 | ||
| CREATE TABLE t_nn (c1 INT);
 | ||
| CREATE VIEW  v_nn AS SELECT * FROM t_nn;
 | ||
| CREATE DATABASE mysqltest2;
 | ||
| use mysqltest2;
 | ||
| CREATE TABLE t_nn (c1 INT);
 | ||
| CREATE VIEW  v_nn AS SELECT * FROM t_nn;
 | ||
| CREATE VIEW  v_yn AS SELECT * FROM t_nn;
 | ||
| CREATE VIEW  v_gy AS SELECT * FROM t_nn;
 | ||
| CREATE VIEW  v_ny AS SELECT * FROM t_nn;
 | ||
| CREATE VIEW  v_yy AS SELECT * FROM t_nn WHERE c1=55;
 | ||
| GRANT SHOW VIEW        ON mysqltest2.v_ny TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
 | ||
| GRANT SELECT           ON mysqltest2.v_yn TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
 | ||
| GRANT SELECT           ON mysqltest2.*    TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
 | ||
| GRANT SHOW VIEW,SELECT ON mysqltest2.v_yy TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
 | ||
| SHOW CREATE VIEW  mysqltest2.v_nn;
 | ||
| ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v_nn'
 | ||
| SHOW CREATE TABLE mysqltest2.v_nn;
 | ||
| ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v_nn'
 | ||
| SHOW CREATE VIEW  mysqltest2.v_yn;
 | ||
| ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v_yn'
 | ||
| SHOW CREATE TABLE mysqltest2.v_yn;
 | ||
| ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v_yn'
 | ||
| SHOW CREATE TABLE mysqltest2.v_ny;
 | ||
| View	Create View
 | ||
| v_ny	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest2`.`v_ny` AS select `mysqltest2`.`t_nn`.`c1` AS `c1` from `mysqltest2`.`t_nn`
 | ||
| SHOW CREATE VIEW  mysqltest2.v_ny;
 | ||
| View	Create View
 | ||
| v_ny	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest2`.`v_ny` AS select `mysqltest2`.`t_nn`.`c1` AS `c1` from `mysqltest2`.`t_nn`
 | ||
| SHOW CREATE TABLE mysqltest3.t_nn;
 | ||
| ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 't_nn'
 | ||
| SHOW CREATE VIEW  mysqltest3.t_nn;
 | ||
| ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 't_nn'
 | ||
| SHOW CREATE VIEW  mysqltest3.v_nn;
 | ||
| ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'v_nn'
 | ||
| SHOW CREATE TABLE mysqltest3.v_nn;
 | ||
| ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'v_nn'
 | ||
| SHOW CREATE TABLE mysqltest2.t_nn;
 | ||
| Table	Create Table
 | ||
| t_nn	CREATE TABLE `t_nn` (
 | ||
|   `c1` int(11) DEFAULT NULL
 | ||
| ) ENGINE=MyISAM DEFAULT CHARSET=latin1
 | ||
| SHOW CREATE VIEW  mysqltest2.t_nn;
 | ||
| ERROR HY000: 'mysqltest2.t_nn' is not VIEW
 | ||
| SHOW CREATE VIEW mysqltest2.v_yy;
 | ||
| View	Create View
 | ||
| v_yy	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest2`.`v_yy` AS select `mysqltest2`.`t_nn`.`c1` AS `c1` from `mysqltest2`.`t_nn` where (`mysqltest2`.`t_nn`.`c1` = 55)
 | ||
| SHOW CREATE TABLE mysqltest2.v_yy;
 | ||
| View	Create View
 | ||
| v_yy	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest2`.`v_yy` AS select `mysqltest2`.`t_nn`.`c1` AS `c1` from `mysqltest2`.`t_nn` where (`mysqltest2`.`t_nn`.`c1` = 55)
 | ||
| SHOW CREATE TABLE mysqltest2.v_nn;
 | ||
| View	Create View
 | ||
| v_nn	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_nn` AS select `t_nn`.`c1` AS `c1` from `t_nn`
 | ||
| SHOW CREATE VIEW  mysqltest2.v_nn;
 | ||
| View	Create View
 | ||
| v_nn	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_nn` AS select `t_nn`.`c1` AS `c1` from `t_nn`
 | ||
| SHOW CREATE TABLE mysqltest2.t_nn;
 | ||
| Table	Create Table
 | ||
| t_nn	CREATE TABLE `t_nn` (
 | ||
|   `c1` int(11) DEFAULT NULL
 | ||
| ) ENGINE=MyISAM DEFAULT CHARSET=latin1
 | ||
| SHOW CREATE VIEW mysqltest2.t_nn;
 | ||
| ERROR HY000: 'mysqltest2.t_nn' is not VIEW
 | ||
| DROP VIEW  mysqltest2.v_nn;
 | ||
| DROP VIEW  mysqltest2.v_yn;
 | ||
| DROP VIEW  mysqltest2.v_ny;
 | ||
| DROP VIEW  mysqltest2.v_yy;
 | ||
| DROP TABLE mysqltest2.t_nn;
 | ||
| DROP DATABASE mysqltest2;
 | ||
| DROP VIEW  mysqltest3.v_nn;
 | ||
| DROP TABLE mysqltest3.t_nn;
 | ||
| DROP DATABASE mysqltest3;
 | ||
| REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'mysqltest_1'@'localhost';
 | ||
| DROP USER 'mysqltest_1'@'localhost';
 | ||
| use test;
 | ||
| create user mysqltest1_thisisreallytoolong;
 | ||
| ERROR HY000: String 'mysqltest1_thisisreallytoolong' is too long for user name (should be no longer than 16)
 | ||
| CREATE DATABASE mysqltest1;
 | ||
| CREATE TABLE mysqltest1.t1 (
 | ||
| int_field INTEGER UNSIGNED NOT NULL,
 | ||
| char_field CHAR(10),
 | ||
| INDEX(`int_field`)
 | ||
| );
 | ||
| CREATE TABLE mysqltest1.t2 (int_field INT);
 | ||
| "Now check that we require equivalent grants for "
 | ||
| "RENAME TABLE and ALTER TABLE"
 | ||
| CREATE USER mysqltest_1@localhost;
 | ||
| GRANT SELECT ON mysqltest1.t1 TO mysqltest_1@localhost;
 | ||
| SELECT USER();
 | ||
| USER()
 | ||
| mysqltest_1@localhost
 | ||
| SHOW GRANTS;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT SELECT ON `mysqltest1`.`t1` TO 'mysqltest_1'@'localhost'
 | ||
| RENAME TABLE t1 TO t2;
 | ||
| ERROR 42000: ALTER command denied to user 'mysqltest_1'@'localhost' for table 't1'
 | ||
| ALTER TABLE t1 RENAME TO t2;
 | ||
| ERROR 42000: DROP,ALTER command denied to user 'mysqltest_1'@'localhost' for table 't1'
 | ||
| GRANT DROP ON mysqltest1.t1 TO mysqltest_1@localhost;
 | ||
| RENAME TABLE t1 TO t2;
 | ||
| ERROR 42000: ALTER command denied to user 'mysqltest_1'@'localhost' for table 't1'
 | ||
| ALTER TABLE t1 RENAME TO t2;
 | ||
| ERROR 42000: ALTER command denied to user 'mysqltest_1'@'localhost' for table 't1'
 | ||
| GRANT ALTER ON mysqltest1.t1 TO mysqltest_1@localhost;
 | ||
| SHOW GRANTS;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT SELECT, DROP, ALTER ON `mysqltest1`.`t1` TO 'mysqltest_1'@'localhost'
 | ||
| RENAME TABLE t1 TO t2;
 | ||
| ERROR 42000: INSERT,CREATE command denied to user 'mysqltest_1'@'localhost' for table 't2'
 | ||
| ALTER TABLE t1 RENAME TO t2;
 | ||
| ERROR 42000: INSERT,CREATE command denied to user 'mysqltest_1'@'localhost' for table 't2'
 | ||
| GRANT INSERT, CREATE ON mysqltest1.t1 TO mysqltest_1@localhost;
 | ||
| SHOW GRANTS;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT SELECT, INSERT, CREATE, DROP, ALTER ON `mysqltest1`.`t1` TO 'mysqltest_1'@'localhost'
 | ||
| GRANT INSERT, SELECT, CREATE, ALTER, DROP ON mysqltest1.t2 TO mysqltest_1@localhost;
 | ||
| DROP TABLE mysqltest1.t2;
 | ||
| SHOW GRANTS;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT SELECT, INSERT, CREATE, DROP, ALTER ON `mysqltest1`.`t2` TO 'mysqltest_1'@'localhost'
 | ||
| GRANT SELECT, INSERT, CREATE, DROP, ALTER ON `mysqltest1`.`t1` TO 'mysqltest_1'@'localhost'
 | ||
| RENAME TABLE t1 TO t2;
 | ||
| RENAME TABLE t2 TO t1;
 | ||
| ALTER TABLE t1 RENAME TO t2;
 | ||
| ALTER TABLE t2 RENAME TO t1;
 | ||
| REVOKE DROP, INSERT ON mysqltest1.t1 FROM mysqltest_1@localhost;
 | ||
| REVOKE DROP, INSERT ON mysqltest1.t2 FROM mysqltest_1@localhost;
 | ||
| SHOW GRANTS;
 | ||
| Grants for mysqltest_1@localhost
 | ||
| GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
 | ||
| GRANT SELECT, CREATE, ALTER ON `mysqltest1`.`t2` TO 'mysqltest_1'@'localhost'
 | ||
| GRANT SELECT, CREATE, ALTER ON `mysqltest1`.`t1` TO 'mysqltest_1'@'localhost'
 | ||
| RENAME TABLE t1 TO t2;
 | ||
| ERROR 42000: INSERT command denied to user 'mysqltest_1'@'localhost' for table 't2'
 | ||
| ALTER TABLE t1 RENAME TO t2;
 | ||
| ERROR 42000: DROP command denied to user 'mysqltest_1'@'localhost' for table 't1'
 | ||
| DROP USER mysqltest_1@localhost;
 | ||
| DROP DATABASE mysqltest1;
 | ||
| GRANT CREATE ON mysqltest.* TO 1234567890abcdefGHIKL@localhost;
 | ||
| ERROR HY000: String '1234567890abcdefGHIKL' is too long for user name (should be no longer than 16)
 | ||
| GRANT CREATE ON mysqltest.* TO some_user_name@1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY;
 | ||
| ERROR HY000: String '1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY' is too long for host name (should be no longer than 60)
 | ||
| REVOKE CREATE ON mysqltest.* FROM 1234567890abcdefGHIKL@localhost;
 | ||
| ERROR HY000: String '1234567890abcdefGHIKL' is too long for user name (should be no longer than 16)
 | ||
| REVOKE CREATE ON mysqltest.* FROM some_user_name@1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY;
 | ||
| ERROR HY000: String '1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY' is too long for host name (should be no longer than 60)
 | ||
| GRANT CREATE ON t1 TO 1234567890abcdefGHIKL@localhost;
 | ||
| ERROR HY000: String '1234567890abcdefGHIKL' is too long for user name (should be no longer than 16)
 | ||
| GRANT CREATE ON t1 TO some_user_name@1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY;
 | ||
| ERROR HY000: String '1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY' is too long for host name (should be no longer than 60)
 | ||
| REVOKE CREATE ON t1 FROM 1234567890abcdefGHIKL@localhost;
 | ||
| ERROR HY000: String '1234567890abcdefGHIKL' is too long for user name (should be no longer than 16)
 | ||
| REVOKE CREATE ON t1 FROM some_user_name@1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY;
 | ||
| ERROR HY000: String '1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY' is too long for host name (should be no longer than 60)
 | ||
| GRANT EXECUTE ON PROCEDURE p1 TO 1234567890abcdefGHIKL@localhost;
 | ||
| ERROR HY000: String '1234567890abcdefGHIKL' is too long for user name (should be no longer than 16)
 | ||
| GRANT EXECUTE ON PROCEDURE p1 TO some_user_name@1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY;
 | ||
| ERROR HY000: String '1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY' is too long for host name (should be no longer than 60)
 | ||
| REVOKE EXECUTE ON PROCEDURE p1 FROM 1234567890abcdefGHIKL@localhost;
 | ||
| ERROR HY000: String '1234567890abcdefGHIKL' is too long for user name (should be no longer than 16)
 | ||
| REVOKE EXECUTE ON PROCEDURE t1 FROM some_user_name@1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY;
 | ||
| ERROR HY000: String '1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY' is too long for host name (should be no longer than 60)
 | ||
| End of 5.0 tests
 |