2003-12-13 16:40:52 +01:00
|
|
|
use test;
|
2004-03-02 11:52:19 +01:00
|
|
|
grant usage on *.* to user1@localhost;
|
|
|
|
flush privileges;
|
2003-12-13 16:40:52 +01:00
|
|
|
drop database if exists db1_secret;
|
|
|
|
create database db1_secret;
|
2004-06-15 15:42:28 +02:00
|
|
|
create procedure db1_secret.dummy() begin end;
|
|
|
|
drop procedure db1_secret.dummy;
|
2003-12-13 16:40:52 +01:00
|
|
|
use db1_secret;
|
|
|
|
create table t1 ( u varchar(64), i int );
|
|
|
|
create procedure stamp(i int)
|
|
|
|
insert into db1_secret.t1 values (user(), i);
|
|
|
|
show procedure status like 'stamp';
|
2004-03-11 17:18:59 +01:00
|
|
|
Db Name Type Definer Modified Created Security_type Comment
|
|
|
|
db1_secret stamp PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER
|
2004-03-19 19:01:54 +01:00
|
|
|
create function db() returns varchar(64) return database();
|
|
|
|
show function status like 'db';
|
|
|
|
Db Name Type Definer Modified Created Security_type Comment
|
|
|
|
db1_secret db FUNCTION root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER
|
2003-12-13 16:40:52 +01:00
|
|
|
call stamp(1);
|
|
|
|
select * from t1;
|
|
|
|
u i
|
|
|
|
root@localhost 1
|
2004-03-19 19:01:54 +01:00
|
|
|
select db();
|
|
|
|
db()
|
|
|
|
db1_secret
|
2004-12-23 11:46:24 +01:00
|
|
|
grant execute on db1_secret.stamp to user1@'%';
|
|
|
|
grant execute on db1_secret.db to user1@'%';
|
|
|
|
grant execute on db1_secret.stamp to ''@'%';
|
|
|
|
grant execute on db1_secret.db to ''@'%';
|
2004-03-11 17:18:59 +01:00
|
|
|
call db1_secret.stamp(2);
|
2004-03-19 19:01:54 +01:00
|
|
|
select db1_secret.db();
|
|
|
|
db1_secret.db()
|
|
|
|
db1_secret
|
2003-12-13 16:40:52 +01:00
|
|
|
select * from db1_secret.t1;
|
2004-12-23 11:46:24 +01:00
|
|
|
ERROR 42000: select command denied to user 'user1'@'localhost' for table 't1'
|
2004-06-15 15:42:28 +02:00
|
|
|
create procedure db1_secret.dummy() begin end;
|
2004-10-20 03:04:37 +02:00
|
|
|
ERROR 42000: Access denied for user 'user1'@'localhost' to database 'db1_secret'
|
2004-06-15 15:42:28 +02:00
|
|
|
drop procedure db1_secret.dummy;
|
|
|
|
ERROR 42000: PROCEDURE db1_secret.dummy does not exist
|
2004-03-11 17:18:59 +01:00
|
|
|
call db1_secret.stamp(3);
|
2004-03-19 19:01:54 +01:00
|
|
|
select db1_secret.db();
|
|
|
|
db1_secret.db()
|
|
|
|
db1_secret
|
2003-12-13 16:40:52 +01:00
|
|
|
select * from db1_secret.t1;
|
2004-12-23 11:46:24 +01:00
|
|
|
ERROR 42000: select command denied to user ''@'localhost' for table 't1'
|
2004-06-15 15:42:28 +02:00
|
|
|
create procedure db1_secret.dummy() begin end;
|
2004-10-20 03:04:37 +02:00
|
|
|
ERROR 42000: Access denied for user ''@'localhost' to database 'db1_secret'
|
2004-06-15 15:42:28 +02:00
|
|
|
drop procedure db1_secret.dummy;
|
|
|
|
ERROR 42000: PROCEDURE db1_secret.dummy does not exist
|
2003-12-13 16:40:52 +01:00
|
|
|
select * from t1;
|
|
|
|
u i
|
|
|
|
root@localhost 1
|
2004-03-02 11:52:19 +01:00
|
|
|
user1@localhost 2
|
2003-12-13 16:40:52 +01:00
|
|
|
anon@localhost 3
|
|
|
|
alter procedure stamp sql security invoker;
|
|
|
|
show procedure status like 'stamp';
|
2004-03-11 17:18:59 +01:00
|
|
|
Db Name Type Definer Modified Created Security_type Comment
|
|
|
|
db1_secret stamp PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 INVOKER
|
2004-03-19 19:01:54 +01:00
|
|
|
alter function db sql security invoker;
|
|
|
|
show function status like 'db';
|
|
|
|
Db Name Type Definer Modified Created Security_type Comment
|
|
|
|
db1_secret db FUNCTION root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 INVOKER
|
2003-12-13 16:40:52 +01:00
|
|
|
call stamp(4);
|
|
|
|
select * from t1;
|
|
|
|
u i
|
|
|
|
root@localhost 1
|
2004-03-02 11:52:19 +01:00
|
|
|
user1@localhost 2
|
2003-12-13 16:40:52 +01:00
|
|
|
anon@localhost 3
|
|
|
|
root@localhost 4
|
2004-03-19 19:01:54 +01:00
|
|
|
select db();
|
|
|
|
db()
|
|
|
|
db1_secret
|
2004-03-11 17:18:59 +01:00
|
|
|
call db1_secret.stamp(5);
|
2004-07-15 03:19:07 +02:00
|
|
|
ERROR 42000: Access denied for user 'user1'@'localhost' to database 'db1_secret'
|
2004-03-19 19:01:54 +01:00
|
|
|
select db1_secret.db();
|
2004-07-15 03:19:07 +02:00
|
|
|
ERROR 42000: Access denied for user 'user1'@'localhost' to database 'db1_secret'
|
2004-03-11 17:18:59 +01:00
|
|
|
call db1_secret.stamp(6);
|
2004-07-15 03:19:07 +02:00
|
|
|
ERROR 42000: Access denied for user ''@'localhost' to database 'db1_secret'
|
2004-03-19 19:01:54 +01:00
|
|
|
select db1_secret.db();
|
2004-07-15 03:19:07 +02:00
|
|
|
ERROR 42000: Access denied for user ''@'localhost' to database 'db1_secret'
|
2004-03-02 11:52:19 +01:00
|
|
|
drop database if exists db2;
|
|
|
|
create database db2;
|
|
|
|
use db2;
|
|
|
|
create table t2 (s1 int);
|
|
|
|
insert into t2 values (0);
|
|
|
|
grant usage on db2.* to user1@localhost;
|
|
|
|
grant select on db2.* to user1@localhost;
|
|
|
|
grant usage on db2.* to user2@localhost;
|
2004-12-23 11:46:24 +01:00
|
|
|
grant select,insert,update,delete,create routine on db2.* to user2@localhost;
|
|
|
|
grant create routine on db2.* to user1@localhost;
|
2004-03-02 11:52:19 +01:00
|
|
|
flush privileges;
|
|
|
|
use db2;
|
|
|
|
create procedure p () insert into t2 values (1);
|
|
|
|
call p();
|
2004-12-23 11:46:24 +01:00
|
|
|
ERROR 42000: insert command denied to user 'user1'@'localhost' for table 't2'
|
2004-03-02 11:52:19 +01:00
|
|
|
use db2;
|
|
|
|
call p();
|
2004-12-23 11:46:24 +01:00
|
|
|
ERROR 42000: execute command denied to user 'user2'@'localhost' for routine 'db2.p'
|
2004-03-02 11:52:19 +01:00
|
|
|
select * from t2;
|
|
|
|
s1
|
|
|
|
0
|
|
|
|
create procedure q () insert into t2 values (2);
|
|
|
|
call q();
|
|
|
|
select * from t2;
|
|
|
|
s1
|
|
|
|
0
|
|
|
|
2
|
2004-12-23 11:46:24 +01:00
|
|
|
grant usage on db2.q to user2@localhost with grant option;
|
|
|
|
grant execute on db2.q to user1@localhost;
|
2004-03-02 11:52:19 +01:00
|
|
|
use db2;
|
|
|
|
call q();
|
|
|
|
select * from t2;
|
|
|
|
s1
|
|
|
|
0
|
|
|
|
2
|
|
|
|
2
|
2004-10-22 20:29:06 +02:00
|
|
|
alter procedure p modifies sql data;
|
|
|
|
drop procedure p;
|
|
|
|
alter procedure q modifies sql data;
|
2004-12-23 11:46:24 +01:00
|
|
|
ERROR 42000: alter procedure command denied to user 'user1'@'localhost' for routine 'db2.q'
|
2004-10-22 20:29:06 +02:00
|
|
|
drop procedure q;
|
2004-12-23 11:46:24 +01:00
|
|
|
ERROR 42000: alter procedure command denied to user 'user1'@'localhost' for routine 'db2.q'
|
2004-10-22 20:29:06 +02:00
|
|
|
use db2;
|
|
|
|
alter procedure q modifies sql data;
|
|
|
|
drop procedure q;
|
2003-12-13 16:40:52 +01:00
|
|
|
use test;
|
2004-03-22 14:44:41 +01:00
|
|
|
select type,db,name from mysql.proc;
|
|
|
|
type db name
|
|
|
|
FUNCTION db1_secret db
|
|
|
|
PROCEDURE db1_secret stamp
|
2003-12-13 16:40:52 +01:00
|
|
|
drop database db1_secret;
|
2004-03-02 11:52:19 +01:00
|
|
|
drop database db2;
|
2004-03-22 14:44:41 +01:00
|
|
|
select type,db,name from mysql.proc;
|
|
|
|
type db name
|
2004-03-02 11:52:19 +01:00
|
|
|
delete from mysql.user where user='user1' or user='user2';
|
2004-12-23 11:46:24 +01:00
|
|
|
delete from mysql.procs_priv where user='user1' or user='user2';
|
|
|
|
grant usage on *.* to usera@localhost;
|
|
|
|
grant usage on *.* to userb@localhost;
|
|
|
|
grant usage on *.* to userc@localhost;
|
|
|
|
create database sptest;
|
|
|
|
create table t1 ( u varchar(64), i int );
|
|
|
|
create procedure sptest.p1(i int) insert into test.t1 values (user(), i);
|
|
|
|
grant insert on t1 to usera@localhost;
|
|
|
|
grant execute on sptest.p1 to usera@localhost;
|
|
|
|
show grants for usera@localhost;
|
|
|
|
Grants for usera@localhost
|
|
|
|
GRANT USAGE ON *.* TO 'usera'@'localhost'
|
|
|
|
GRANT INSERT ON `test`.`t1` TO 'usera'@'localhost'
|
|
|
|
GRANT EXECUTE ON `sptest`.`p1` TO 'usera'@'localhost'
|
|
|
|
grant execute on sptest.p1 to userc@localhost with grant option;
|
|
|
|
show grants for userc@localhost;
|
|
|
|
Grants for userc@localhost
|
|
|
|
GRANT USAGE ON *.* TO 'userc'@'localhost'
|
|
|
|
GRANT EXECUTE ON `sptest`.`p1` TO 'userc'@'localhost' WITH GRANT OPTION
|
|
|
|
call sptest.p1(1);
|
|
|
|
grant execute on sptest.p1 to userb@localhost;
|
|
|
|
ERROR 42000: grant command denied to user 'usera'@'localhost' for routine 'sptest.p1'
|
|
|
|
drop procedure sptest.p1;
|
|
|
|
ERROR 42000: alter procedure command denied to user 'usera'@'localhost' for routine 'sptest.p1'
|
|
|
|
call sptest.p1(2);
|
|
|
|
ERROR 42000: execute command denied to user 'userb'@'localhost' for routine 'sptest.p1'
|
|
|
|
grant execute on sptest.p1 to userb@localhost;
|
|
|
|
ERROR 42000: execute command denied to user 'userb'@'localhost' for routine 'sptest.p1'
|
|
|
|
drop procedure sptest.p1;
|
|
|
|
ERROR 42000: alter procedure command denied to user 'userb'@'localhost' for routine 'sptest.p1'
|
|
|
|
call sptest.p1(3);
|
|
|
|
grant execute on sptest.p1 to userb@localhost;
|
|
|
|
drop procedure sptest.p1;
|
|
|
|
ERROR 42000: alter procedure command denied to user 'userc'@'localhost' for routine 'sptest.p1'
|
|
|
|
call sptest.p1(4);
|
|
|
|
grant execute on sptest.p1 to userb@localhost;
|
|
|
|
ERROR 42000: grant command denied to user 'userb'@'localhost' for routine 'sptest.p1'
|
|
|
|
drop procedure sptest.p1;
|
|
|
|
ERROR 42000: alter procedure command denied to user 'userb'@'localhost' for routine 'sptest.p1'
|
|
|
|
select * from t1;
|
|
|
|
u i
|
|
|
|
usera@localhost 1
|
|
|
|
userc@localhost 3
|
|
|
|
userb@localhost 4
|
|
|
|
grant all privileges on sptest.p1 to userc@localhost;
|
|
|
|
show grants for userc@localhost;
|
|
|
|
Grants for userc@localhost
|
|
|
|
GRANT USAGE ON *.* TO 'userc'@'localhost'
|
|
|
|
GRANT EXECUTE, ALTER ROUTINE ON `sptest`.`p1` TO 'userc'@'localhost' WITH GRANT OPTION
|
|
|
|
show grants for userb@localhost;
|
|
|
|
Grants for userb@localhost
|
|
|
|
GRANT USAGE ON *.* TO 'userb'@'localhost'
|
|
|
|
GRANT EXECUTE ON `sptest`.`p1` TO 'userb'@'localhost'
|
|
|
|
revoke all privileges on sptest.p1 from userb@localhost;
|
|
|
|
show grants for userb@localhost;
|
|
|
|
Grants for userb@localhost
|
|
|
|
GRANT USAGE ON *.* TO 'userb'@'localhost'
|
|
|
|
use test;
|
|
|
|
drop database sptest;
|
|
|
|
delete from mysql.user where user='usera' or user='userb' or user='userc';
|
|
|
|
delete from mysql.procs_priv where user='usera' or user='userb' or user='userc';
|