mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
66f13d9120
When expanding a * in a USING/NATURAL join the check for table access for both tables in the join was done using the grant information of the first one. Fixed by getting the grant information for the current table while iterating through the columns of the join. mysql-test/r/grant2.result: Bug #30468: test case mysql-test/t/grant2.test: Bug #30468: test case sql/sql_acl.cc: Bug #30468: correctly check column grants sql/sql_acl.h: Bug #30468: correctly check column grants sql/sql_base.cc: Bug #30468: correctly check column grants sql/sql_insert.cc: Bug #30468: correctly check column grants
442 lines
19 KiB
Text
442 lines
19 KiB
Text
SET NAMES binary;
|
|
drop database if exists mysqltest;
|
|
drop database if exists mysqltest_1;
|
|
delete from mysql.user where user like 'mysqltest\_%';
|
|
delete from mysql.db where user like 'mysqltest\_%';
|
|
delete from mysql.tables_priv where user like 'mysqltest\_%';
|
|
delete from mysql.columns_priv where user like 'mysqltest\_%';
|
|
flush privileges;
|
|
grant all privileges on `my\_1`.* to mysqltest_1@localhost with grant option;
|
|
grant create user on *.* to mysqltest_1@localhost;
|
|
create user mysqltest_2@localhost;
|
|
grant select on `my\_1`.* to mysqltest_2@localhost;
|
|
grant select on `my\_1`.* to mysqltest_2@localhost identified by 'pass';
|
|
ERROR 42000: You must have privileges to update tables in the mysql database to be able to change passwords for others
|
|
grant update on mysql.* to mysqltest_1@localhost;
|
|
grant select on `my\_1`.* to mysqltest_2@localhost identified by 'pass';
|
|
grant select on `my\_1`.* to mysqltest_3@localhost;
|
|
grant insert on mysql.* to mysqltest_1@localhost;
|
|
grant select on `my\_1`.* to mysqltest_3@localhost;
|
|
grant select on `my\_1`.* to mysqltest_4@localhost identified by 'pass';
|
|
delete from mysql.user where user like 'mysqltest\_%';
|
|
delete from mysql.db where user like 'mysqltest\_%';
|
|
delete from mysql.tables_priv where user like 'mysqltest\_%';
|
|
delete from mysql.columns_priv where user like 'mysqltest\_%';
|
|
flush privileges;
|
|
grant all privileges on `my\_%`.* to mysqltest_1@localhost with grant option;
|
|
grant create user on *.* to mysqltest_1@localhost;
|
|
select current_user();
|
|
current_user()
|
|
mysqltest_1@localhost
|
|
grant all privileges on `my\_1`.* to mysqltest_2@localhost with grant option;
|
|
grant all privileges on `my_%`.* to mysqltest_3@localhost with grant option;
|
|
ERROR 42000: Access denied for user 'mysqltest_1'@'localhost' to database 'my_%'
|
|
set @@sql_mode='NO_AUTO_CREATE_USER';
|
|
select @@sql_mode;
|
|
@@sql_mode
|
|
NO_AUTO_CREATE_USER
|
|
grant select on `my\_1`.* to mysqltest_4@localhost with grant option;
|
|
ERROR 42000: Can't find any matching row in the user table
|
|
grant select on `my\_1`.* to mysqltest_4@localhost identified by 'mypass'
|
|
with grant option;
|
|
show grants for mysqltest_1@localhost;
|
|
Grants for mysqltest_1@localhost
|
|
GRANT CREATE USER ON *.* TO 'mysqltest_1'@'localhost'
|
|
GRANT ALL PRIVILEGES ON `my\_%`.* TO 'mysqltest_1'@'localhost' WITH GRANT OPTION
|
|
show grants for mysqltest_2@localhost;
|
|
Grants for mysqltest_2@localhost
|
|
GRANT USAGE ON *.* TO 'mysqltest_2'@'localhost'
|
|
GRANT ALL PRIVILEGES ON `my\_1`.* TO 'mysqltest_2'@'localhost' WITH GRANT OPTION
|
|
show grants for mysqltest_3@localhost;
|
|
ERROR 42000: There is no such grant defined for user 'mysqltest_3' on host 'localhost'
|
|
delete from mysql.user where user like 'mysqltest\_%';
|
|
delete from mysql.db where user like 'mysqltest\_%';
|
|
flush privileges;
|
|
create database mysqltest_1;
|
|
grant all privileges on `mysqltest\_1`.* to mysqltest_1@localhost with grant option;
|
|
select current_user();
|
|
current_user()
|
|
mysqltest_1@localhost
|
|
show databases;
|
|
Database
|
|
information_schema
|
|
mysqltest_1
|
|
test
|
|
grant all privileges on `mysqltest_1`.* to mysqltest_1@localhost with grant option;
|
|
ERROR 42000: Access denied for user 'mysqltest_1'@'localhost' to database 'mysqltest_1'
|
|
show grants for mysqltest_1@localhost;
|
|
Grants for mysqltest_1@localhost
|
|
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
|
|
GRANT ALL PRIVILEGES ON `mysqltest\_1`.* TO 'mysqltest_1'@'localhost' WITH GRANT OPTION
|
|
delete from mysql.user where user like 'mysqltest\_%';
|
|
delete from mysql.db where user like 'mysqltest\_%';
|
|
drop database mysqltest_1;
|
|
flush privileges;
|
|
create database mysqltest;
|
|
grant INSERT, SELECT on mysqltest.* to mysqltest_1@localhost;
|
|
flush privileges;
|
|
use mysqltest;
|
|
create table t1 (id int primary key, data varchar(255));
|
|
show grants for current_user();
|
|
Grants for mysqltest_1@localhost
|
|
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
|
|
GRANT SELECT, INSERT ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
|
|
insert into t1 values (1, 'I can''t change it!');
|
|
update t1 set data='I can change it!' where id = 1;
|
|
ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for table 't1'
|
|
insert into t1 values (1, 'XXX') on duplicate key update data= 'I can change it!';
|
|
ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for table 't1'
|
|
select * from t1;
|
|
id data
|
|
1 I can't change it!
|
|
drop table t1;
|
|
delete from mysql.user where user like 'mysqltest\_%';
|
|
delete from mysql.db where user like 'mysqltest\_%';
|
|
flush privileges;
|
|
create table t1 (a int, b int);
|
|
grant select (a) on t1 to mysqltest_1@localhost with grant option;
|
|
grant select (a,b) on t1 to mysqltest_2@localhost;
|
|
ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'b' in table 't1'
|
|
grant select on t1 to mysqltest_3@localhost;
|
|
ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 't1'
|
|
drop table t1;
|
|
delete from mysql.user where user like 'mysqltest\_%';
|
|
delete from mysql.db where user like 'mysqltest\_%';
|
|
delete from mysql.tables_priv where user like 'mysqltest\_%';
|
|
delete from mysql.columns_priv where user like 'mysqltest\_%';
|
|
flush privileges;
|
|
drop database mysqltest;
|
|
use test;
|
|
create user mysqltest_1@host1;
|
|
create user mysqltest_2@host2;
|
|
create user mysqltest_3@host3;
|
|
create user mysqltest_4@host4;
|
|
create user mysqltest_5@host5;
|
|
create user mysqltest_6@host6;
|
|
create user mysqltest_7@host7;
|
|
flush privileges;
|
|
drop user mysqltest_3@host3;
|
|
drop user mysqltest_1@host1, mysqltest_2@host2, mysqltest_4@host4,
|
|
mysqltest_5@host5, mysqltest_6@host6, mysqltest_7@host7;
|
|
create database mysqltest_1;
|
|
grant select, insert, update on `mysqltest\_1`.* to mysqltest_1@localhost;
|
|
set sql_log_off = 1;
|
|
ERROR 42000: Access denied; you need the SUPER privilege for this operation
|
|
set sql_log_bin = 0;
|
|
ERROR 42000: Access denied; you need the SUPER privilege for this operation
|
|
delete from mysql.user where user like 'mysqltest\_1';
|
|
delete from mysql.db where user like 'mysqltest\_1';
|
|
drop database mysqltest_1;
|
|
flush privileges;
|
|
set sql_mode='maxdb';
|
|
drop table if exists t1, t2;
|
|
create table t1(c1 int);
|
|
create table t2(c1 int, c2 int);
|
|
create user 'mysqltest_1';
|
|
create user 'mysqltest_1';
|
|
ERROR HY000: Operation CREATE USER failed for 'mysqltest_1'@'%'
|
|
create user 'mysqltest_2' identified by 'Mysqltest-2';
|
|
create user 'mysqltest_3' identified by password 'fffffffffffffffffffffffffffffffffffffffff';
|
|
grant select on *.* to 'mysqltest_2';
|
|
grant insert on test.* to 'mysqltest_2';
|
|
grant update on test.t1 to 'mysqltest_2';
|
|
grant update (c2) on test.t2 to 'mysqltest_2';
|
|
select host,user,password from mysql.user where user like 'mysqltest_%' order by host,user,password;
|
|
host user password
|
|
% mysqltest_1
|
|
% mysqltest_2 *BD447CBA355AF58578D3AE33BA2E2CD388BA08D1
|
|
% mysqltest_3 fffffffffffffffffffffffffffffffffffffffff
|
|
select host,db,user from mysql.db where user like 'mysqltest_%' order by host,db,user;
|
|
host db user
|
|
% test mysqltest_2
|
|
select host,db,user,table_name from mysql.tables_priv where user like 'mysqltest_%' order by host,db,user,table_name;
|
|
host db user table_name
|
|
% test mysqltest_2 t1
|
|
% test mysqltest_2 t2
|
|
select host,db,user,table_name,column_name from mysql.columns_priv where user like 'mysqltest_%' order by host,db,user,table_name,column_name;
|
|
host db user table_name column_name
|
|
% test mysqltest_2 t2 c2
|
|
show grants for 'mysqltest_1';
|
|
Grants for mysqltest_1@%
|
|
GRANT USAGE ON *.* TO 'mysqltest_1'@'%'
|
|
show grants for 'mysqltest_2';
|
|
Grants for mysqltest_2@%
|
|
GRANT SELECT ON *.* TO 'mysqltest_2'@'%' IDENTIFIED BY PASSWORD '*BD447CBA355AF58578D3AE33BA2E2CD388BA08D1'
|
|
GRANT INSERT ON "test".* TO 'mysqltest_2'@'%'
|
|
GRANT UPDATE (c2) ON "test"."t2" TO 'mysqltest_2'@'%'
|
|
GRANT UPDATE ON "test"."t1" TO 'mysqltest_2'@'%'
|
|
drop user 'mysqltest_1';
|
|
select host,user,password from mysql.user where user like 'mysqltest_%' order by host,user,password;
|
|
host user password
|
|
% mysqltest_2 *BD447CBA355AF58578D3AE33BA2E2CD388BA08D1
|
|
% mysqltest_3 fffffffffffffffffffffffffffffffffffffffff
|
|
select host,db,user from mysql.db where user like 'mysqltest_%' order by host,db,user;
|
|
host db user
|
|
% test mysqltest_2
|
|
select host,db,user,table_name from mysql.tables_priv where user like 'mysqltest_%' order by host,db,user,table_name;
|
|
host db user table_name
|
|
% test mysqltest_2 t1
|
|
% test mysqltest_2 t2
|
|
select host,db,user,table_name,column_name from mysql.columns_priv where user like 'mysqltest_%' order by host,db,user,table_name,column_name;
|
|
host db user table_name column_name
|
|
% test mysqltest_2 t2 c2
|
|
show grants for 'mysqltest_1';
|
|
ERROR 42000: There is no such grant defined for user 'mysqltest_1' on host '%'
|
|
rename user 'mysqltest_2' to 'mysqltest_1';
|
|
select host,user,password from mysql.user where user like 'mysqltest_%' order by host,user,password;
|
|
host user password
|
|
% mysqltest_1 *BD447CBA355AF58578D3AE33BA2E2CD388BA08D1
|
|
% mysqltest_3 fffffffffffffffffffffffffffffffffffffffff
|
|
select host,db,user from mysql.db where user like 'mysqltest_%' order by host,db,user;
|
|
host db user
|
|
% test mysqltest_1
|
|
select host,db,user,table_name from mysql.tables_priv where user like 'mysqltest_%' order by host,db,user,table_name;
|
|
host db user table_name
|
|
% test mysqltest_1 t1
|
|
% test mysqltest_1 t2
|
|
select host,db,user,table_name,column_name from mysql.columns_priv where user like 'mysqltest_%' order by host,db,user,table_name,column_name;
|
|
host db user table_name column_name
|
|
% test mysqltest_1 t2 c2
|
|
show grants for 'mysqltest_1';
|
|
Grants for mysqltest_1@%
|
|
GRANT SELECT ON *.* TO 'mysqltest_1'@'%' IDENTIFIED BY PASSWORD '*BD447CBA355AF58578D3AE33BA2E2CD388BA08D1'
|
|
GRANT INSERT ON "test".* TO 'mysqltest_1'@'%'
|
|
GRANT UPDATE (c2) ON "test"."t2" TO 'mysqltest_1'@'%'
|
|
GRANT UPDATE ON "test"."t1" TO 'mysqltest_1'@'%'
|
|
drop user 'mysqltest_1', 'mysqltest_3';
|
|
drop user 'mysqltest_1';
|
|
ERROR HY000: Operation DROP USER failed for 'mysqltest_1'@'%'
|
|
drop table t1, t2;
|
|
insert into mysql.db set user='mysqltest_1', db='%', host='%';
|
|
flush privileges;
|
|
show grants for 'mysqltest_1';
|
|
ERROR 42000: There is no such grant defined for user 'mysqltest_1' on host '%'
|
|
revoke all privileges, grant option from 'mysqltest_1';
|
|
ERROR HY000: Can't revoke all privileges for one or more of the requested users
|
|
drop user 'mysqltest_1';
|
|
select host,db,user from mysql.db where user = 'mysqltest_1' order by host,db,user;
|
|
host db user
|
|
insert into mysql.tables_priv set host='%', db='test', user='mysqltest_1', table_name='t1';
|
|
flush privileges;
|
|
show grants for 'mysqltest_1';
|
|
ERROR 42000: There is no such grant defined for user 'mysqltest_1' on host '%'
|
|
drop user 'mysqltest_1';
|
|
select host,db,user,table_name from mysql.tables_priv where user = 'mysqltest_1' order by host,db,user,table_name;
|
|
host db user table_name
|
|
insert into mysql.columns_priv set host='%', db='test', user='mysqltest_1', table_name='t1', column_name='c1';
|
|
flush privileges;
|
|
show grants for 'mysqltest_1';
|
|
ERROR 42000: There is no such grant defined for user 'mysqltest_1' on host '%'
|
|
drop user 'mysqltest_1';
|
|
select host,db,user,table_name,column_name from mysql.columns_priv where user = 'mysqltest_1' order by host,db,user,table_name,column_name;
|
|
host db user table_name column_name
|
|
create user 'mysqltest_1', 'mysqltest_2', 'mysqltest_3';
|
|
drop user 'mysqltest_1', 'mysqltest_2', 'mysqltest_3';
|
|
create user 'mysqltest_1', 'mysqltest_2' identified by 'Mysqltest-2', 'mysqltest_3' identified by password 'fffffffffffffffffffffffffffffffffffffffff';
|
|
rename user 'mysqltest_1' to 'mysqltest_1a', 'mysqltest_2' TO 'mysqltest_2a', 'mysqltest_3' TO 'mysqltest_3a';
|
|
drop user 'mysqltest_1', 'mysqltest_2', 'mysqltest_3';
|
|
ERROR HY000: Operation DROP USER failed for 'mysqltest_1'@'%','mysqltest_2'@'%','mysqltest_3'@'%'
|
|
drop user 'mysqltest_1a', 'mysqltest_2a', 'mysqltest_3a';
|
|
create user 'mysqltest_1', 'mysqltest_2', 'mysqltest_3';
|
|
create user 'mysqltest_1a', 'mysqltest_2', 'mysqltest_3a';
|
|
ERROR HY000: Operation CREATE USER failed for 'mysqltest_2'@'%'
|
|
rename user 'mysqltest_1a' to 'mysqltest_1b', 'mysqltest_2a' TO 'mysqltest_2b', 'mysqltest_3a' TO 'mysqltest_3b';
|
|
ERROR HY000: Operation RENAME USER failed for 'mysqltest_2a'@'%'
|
|
drop user 'mysqltest_1', 'mysqltest_2', 'mysqltest_3';
|
|
drop user 'mysqltest_1b', 'mysqltest_2b', 'mysqltest_3b';
|
|
ERROR HY000: Operation DROP USER failed for 'mysqltest_2b'@'%'
|
|
create user 'mysqltest_2' identified by 'Mysqltest-2';
|
|
drop user 'mysqltest_2' identified by 'Mysqltest-2';
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'Mysqltest-2'' at line 1
|
|
drop user 'mysqltest_2';
|
|
create user '%@b'@'b';
|
|
show grants for '%@b'@'b';
|
|
Grants for %@b@b
|
|
GRANT USAGE ON *.* TO '%@b'@'b'
|
|
grant select on mysql.* to '%@b'@'b';
|
|
show grants for '%@b'@'b';
|
|
Grants for %@b@b
|
|
GRANT USAGE ON *.* TO '%@b'@'b'
|
|
GRANT SELECT ON "mysql".* TO '%@b'@'b'
|
|
rename user '%@b'@'b' to '%@a'@'a';
|
|
show grants for '%@b'@'b';
|
|
ERROR 42000: There is no such grant defined for user '%@b' on host 'b'
|
|
show grants for '%@a'@'a';
|
|
Grants for %@a@a
|
|
GRANT USAGE ON *.* TO '%@a'@'a'
|
|
GRANT SELECT ON "mysql".* TO '%@a'@'a'
|
|
drop user '%@a'@'a';
|
|
create user mysqltest_2@localhost;
|
|
grant create user on *.* to mysqltest_2@localhost;
|
|
select host,user,password from mysql.user where user like 'mysqltest_%' order by host,user,password;
|
|
ERROR 42000: SELECT command denied to user 'mysqltest_2'@'localhost' for table 'user'
|
|
create user mysqltest_A@'%';
|
|
rename user mysqltest_A@'%' to mysqltest_B@'%';
|
|
drop user mysqltest_B@'%';
|
|
drop user mysqltest_2@localhost;
|
|
create user mysqltest_3@localhost;
|
|
grant INSERT,DELETE,UPDATE on mysql.* to mysqltest_3@localhost;
|
|
show grants;
|
|
Grants for mysqltest_3@localhost
|
|
GRANT USAGE ON *.* TO 'mysqltest_3'@'localhost'
|
|
GRANT INSERT, UPDATE, DELETE ON `mysql`.* TO 'mysqltest_3'@'localhost'
|
|
select host,user,password from mysql.user where user like 'mysqltest_%' order by host,user,password;
|
|
ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for table 'user'
|
|
insert into mysql.user set host='%', user='mysqltest_B';
|
|
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
|
|
create user mysqltest_A@'%';
|
|
rename user mysqltest_B@'%' to mysqltest_C@'%';
|
|
drop user mysqltest_C@'%';
|
|
drop user mysqltest_A@'%';
|
|
drop user mysqltest_3@localhost;
|
|
set @@sql_mode='';
|
|
create database mysqltest_1;
|
|
create table mysqltest_1.t1 (i int);
|
|
insert into mysqltest_1.t1 values (1),(2),(3);
|
|
GRANT ALL ON mysqltest_1.t1 TO mysqltest_1@'127.0.0.0/255.0.0.0';
|
|
show grants for current_user();
|
|
Grants for mysqltest_1@127.0.0.0/255.0.0.0
|
|
GRANT USAGE ON *.* TO 'mysqltest_1'@'127.0.0.0/255.0.0.0'
|
|
GRANT ALL PRIVILEGES ON `mysqltest_1`.`t1` TO 'mysqltest_1'@'127.0.0.0/255.0.0.0'
|
|
select * from t1;
|
|
i
|
|
1
|
|
2
|
|
3
|
|
REVOKE ALL ON mysqltest_1.t1 FROM mysqltest_1@'127.0.0.0/255.0.0.0';
|
|
delete from mysql.user where user like 'mysqltest\_1';
|
|
flush privileges;
|
|
drop table mysqltest_1.t1;
|
|
grant all on mysqltest_1.* to mysqltest_1@'127.0.0.1';
|
|
select current_user();
|
|
current_user()
|
|
mysqltest_1@127.0.0.1
|
|
set password = password('changed');
|
|
select host, length(password) from mysql.user where user like 'mysqltest\_1';
|
|
host length(password)
|
|
127.0.0.1 41
|
|
revoke all on mysqltest_1.* from mysqltest_1@'127.0.0.1';
|
|
delete from mysql.user where user like 'mysqltest\_1';
|
|
flush privileges;
|
|
grant all on mysqltest_1.* to mysqltest_1@'127.0.0.0/255.0.0.0';
|
|
select current_user();
|
|
current_user()
|
|
mysqltest_1@127.0.0.0/255.0.0.0
|
|
set password = password('changed');
|
|
select host, length(password) from mysql.user where user like 'mysqltest\_1';
|
|
host length(password)
|
|
127.0.0.0/255.0.0.0 41
|
|
revoke all on mysqltest_1.* from mysqltest_1@'127.0.0.0/255.0.0.0';
|
|
delete from mysql.user where user like 'mysqltest\_1';
|
|
flush privileges;
|
|
drop database mysqltest_1;
|
|
set password = password("changed");
|
|
ERROR 42000: Access denied for user ''@'localhost' to database 'mysql'
|
|
lock table mysql.user write;
|
|
flush privileges;
|
|
grant all on *.* to 'mysqltest_1'@'localhost';
|
|
unlock tables;
|
|
lock table mysql.user write;
|
|
set password for 'mysqltest_1'@'localhost' = password('');
|
|
revoke all on *.* from 'mysqltest_1'@'localhost';
|
|
unlock tables;
|
|
drop user 'mysqltest_1'@'localhost';
|
|
create database TESTDB;
|
|
create table t2(a int);
|
|
create temporary table t1 as select * from mysql.user;
|
|
delete from mysql.user where host='localhost';
|
|
INSERT INTO mysql.user VALUES
|
|
('%','mysqltest_1',password('password'),'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',
|
|
'','','','',0,0,0,0);
|
|
INSERT INTO mysql.db VALUES
|
|
('%','TESTDB','mysqltest_1','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','N','Y','Y','Y','
|
|
Y','N');
|
|
Warnings:
|
|
Warning 1265 Data truncated for column 'Alter_routine_priv' at row 1
|
|
FLUSH PRIVILEGES;
|
|
create database TEStdb;
|
|
Got one of the listed errors
|
|
delete from mysql.user;
|
|
delete from mysql.db where host='%' and user='mysqltest_1' and db='TESTDB';
|
|
insert into mysql.user select * from t1;
|
|
drop table t1, t2;
|
|
drop database TESTDB;
|
|
flush privileges;
|
|
grant all privileges on test.* to `a@`@localhost;
|
|
grant execute on * to `a@`@localhost;
|
|
create table t2 (s1 int);
|
|
insert into t2 values (1);
|
|
drop function if exists f2;
|
|
create function f2 () returns int begin declare v int; select s1 from t2
|
|
into v; return v; end//
|
|
select f2();
|
|
f2()
|
|
1
|
|
drop function f2;
|
|
drop table t2;
|
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM `a@`@localhost;
|
|
drop user `a@`@localhost;
|
|
drop database if exists mysqltest_1;
|
|
drop database if exists mysqltest_2;
|
|
drop user mysqltest_u1@localhost;
|
|
create database mysqltest_1;
|
|
create database mysqltest_2;
|
|
grant all on mysqltest_1.* to mysqltest_u1@localhost;
|
|
use mysqltest_2;
|
|
create table t1 (i int);
|
|
show create table mysqltest_2.t1;
|
|
ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 't1'
|
|
create table t1 like mysqltest_2.t1;
|
|
ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for table 't1'
|
|
grant select on mysqltest_2.t1 to mysqltest_u1@localhost;
|
|
show create table mysqltest_2.t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`i` int(11) default NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
create table t1 like mysqltest_2.t1;
|
|
use test;
|
|
drop database mysqltest_1;
|
|
drop database mysqltest_2;
|
|
drop user mysqltest_u1@localhost;
|
|
grant all on `mysqltest\_%`.* to mysqltest_1@localhost with grant option;
|
|
grant usage on *.* to mysqltest_2@localhost;
|
|
create database mysqltest_1;
|
|
use mysqltest_1;
|
|
create table t1 (f1 int);
|
|
grant create on `mysqltest\_1`.* to mysqltest_2@localhost;
|
|
grant select on mysqltest_1.t1 to mysqltest_2@localhost;
|
|
create database mysqltest_3;
|
|
ERROR 42000: Access denied for user 'mysqltest_2'@'localhost' to database 'mysqltest_3'
|
|
use mysqltest_1;
|
|
create table t2(f1 int);
|
|
select * from t1;
|
|
f1
|
|
drop database mysqltest_1;
|
|
revoke all privileges, grant option from mysqltest_1@localhost;
|
|
revoke all privileges, grant option from mysqltest_2@localhost;
|
|
drop user mysqltest_1@localhost;
|
|
drop user mysqltest_2@localhost;
|
|
CREATE DATABASE db1;
|
|
USE db1;
|
|
CREATE TABLE t1 (a INT, b INT);
|
|
INSERT INTO t1 VALUES (1,1),(2,2);
|
|
CREATE TABLE t2 (b INT, c INT);
|
|
INSERT INTO t2 VALUES (1,100),(2,200);
|
|
GRANT SELECT ON t1 TO mysqltest1@localhost;
|
|
GRANT SELECT (b) ON t2 TO mysqltest1@localhost;
|
|
USE db1;
|
|
SELECT c FROM t2;
|
|
ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 't2'
|
|
SELECT * FROM t2;
|
|
ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 't2'
|
|
SELECT * FROM t1 JOIN t2 USING (b);
|
|
ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 't2'
|
|
DROP TABLE db1.t1, db1.t2;
|
|
DROP USER mysqltest1@localhost;
|
|
DROP DATABASE db1;
|
|
End of 5.0 tests
|