Commit f4060b4b authored by ramil/ram@mysql.com/ramil.myoffice.izhnet.ru's avatar ramil/ram@mysql.com/ramil.myoffice.izhnet.ru
Browse files

Fix for bug #27515: DROP previlege is not required anymore for RENAME TABLE

Added missed DROP privilege check on the original table for RENAME TABLE command.
parent 8d0755ba
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -492,3 +492,14 @@ delete from mysql.db where user='mysqltest1';
delete from mysql.tables_priv where user='mysqltest1';
flush privileges;
drop database mysqltest;
create database db27515;
use db27515;
create table t1 (a int);
grant alter on db27515.t1 to user27515@localhost;
grant insert, create on db27515.t2 to user27515@localhost;
rename table t1 to t2;
ERROR 42000: DROP command denied to user 'user27515'@'localhost' for table 't1'
revoke all privileges, grant option from user27515@localhost;
drop user user27515@localhost;
drop database db27515;
End of 4.1 tests
+22 −1
Original line number Diff line number Diff line
@@ -451,4 +451,25 @@ delete from mysql.tables_priv where user='mysqltest1';
flush privileges;
drop database mysqltest;

# End of 4.1 tests
#
# Bug #27515: DROP previlege is not required for RENAME TABLE
#
connection master;
create database db27515;
use db27515;
create table t1 (a int);
grant alter on db27515.t1 to user27515@localhost;
grant insert, create on db27515.t2 to user27515@localhost;

connect (conn27515, localhost, user27515, , db27515);
connection conn27515;
--error 1142
rename table t1 to t2;
disconnect conn27515;

connection master;
revoke all privileges, grant option from user27515@localhost;
drop user user27515@localhost;
drop database db27515;

--echo End of 4.1 tests
+1 −1
Original line number Diff line number Diff line
@@ -2818,7 +2818,7 @@ mysql_execute_command(THD *thd)
	old_list=table[0];
	new_list=table->next[0];
	old_list.next=new_list.next=0;
	if (check_grant(thd, ALTER_ACL, &old_list, 0, UINT_MAX, 0) ||
	if (check_grant(thd, ALTER_ACL | DROP_ACL, &old_list, 0, UINT_MAX, 0) ||
	    (!test_all_bits(table->next->grant.privilege,
			    INSERT_ACL | CREATE_ACL) &&
	     check_grant(thd, INSERT_ACL | CREATE_ACL, &new_list, 0,