|
|
|
@@ -341,3 +341,67 @@ 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;
|
|
|
|
|
show grants for mysqltest_3@localhost;
|
|
|
|
|
Grants for mysqltest_3@localhost
|
|
|
|
|
GRANT USAGE ON *.* 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 (a) ON `mysqltest_1`.`t1` TO 'mysqltest_3'@'localhost'
|
|
|
|
|
GRANT UPDATE (d) ON `mysqltest_2`.`t2` TO 'mysqltest_3'@'localhost'
|
|
|
|
|
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.t1, 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_2.t1, mysqltest_1.t2 set c=20 where b=1;
|
|
|
|
|
ERROR 42000: UPDATE command denied to user 'mysqltest_3'@'localhost' for column 'c' in 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;
|
|
|
|
|
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 column 'a' in table 't1'
|
|
|
|
|
use mysqltest_2;
|
|
|
|
|
update mysqltest_1.t1, mysqltest_1.t2 set a=100,b=200;
|
|
|
|
|
ERROR 42000: Access denied for user 'mysqltest_3'@'localhost' to database 'mysqltest_1'
|
|
|
|
|
update mysqltest_2.t1, mysqltest_1.t2 set c=100,b=200;
|
|
|
|
|
ERROR 42000: Access denied for user 'mysqltest_3'@'localhost' to database 'mysqltest_1'
|
|
|
|
|
update mysqltest_1.t1, mysqltest_2.t2 set a=100,d=200;
|
|
|
|
|
ERROR 42000: Access denied for user 'mysqltest_3'@'localhost' to database 'mysqltest_1'
|
|
|
|
|
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;
|
|
|
|
|