mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge mysql.com:/home/tomash/src/mysql_ab/mysql-5.0
into mysql.com:/home/tomash/src/mysql_ab/mysql-5.0-bug20570 sql/item_strfunc.cc: Auto merged sql/item_strfunc.h: Auto merged sql/sql_yacc.yy: Auto merged mysql-test/r/view_grant.result: Manual merge. mysql-test/t/view_grant.test: Manual merge.
This commit is contained in:
@ -659,3 +659,56 @@ DROP VIEW test2.t3;
|
||||
DROP TABLE test2.t1, test1.t0;
|
||||
DROP DATABASE test2;
|
||||
DROP DATABASE test1;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP VIEW IF EXISTS v2;
|
||||
DROP VIEW IF EXISTS v3;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
DROP FUNCTION IF EXISTS f2;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
CREATE SQL SECURITY DEFINER VIEW v1 AS SELECT CURRENT_USER() AS cu;
|
||||
CREATE FUNCTION f1() RETURNS VARCHAR(77) SQL SECURITY INVOKER
|
||||
RETURN CURRENT_USER();
|
||||
CREATE SQL SECURITY DEFINER VIEW v2 AS SELECT f1() AS cu;
|
||||
CREATE PROCEDURE p1(OUT cu VARCHAR(77)) SQL SECURITY INVOKER
|
||||
SET cu= CURRENT_USER();
|
||||
CREATE FUNCTION f2() RETURNS VARCHAR(77) SQL SECURITY INVOKER
|
||||
BEGIN
|
||||
DECLARE cu VARCHAR(77);
|
||||
CALL p1(cu);
|
||||
RETURN cu;
|
||||
END|
|
||||
CREATE SQL SECURITY DEFINER VIEW v3 AS SELECT f2() AS cu;
|
||||
CREATE USER mysqltest_u1@localhost;
|
||||
GRANT ALL ON test.* TO mysqltest_u1@localhost;
|
||||
|
||||
The following tests should all return 1.
|
||||
|
||||
SELECT CURRENT_USER() = 'mysqltest_u1@localhost';
|
||||
CURRENT_USER() = 'mysqltest_u1@localhost'
|
||||
1
|
||||
SELECT f1() = 'mysqltest_u1@localhost';
|
||||
f1() = 'mysqltest_u1@localhost'
|
||||
1
|
||||
CALL p1(@cu);
|
||||
SELECT @cu = 'mysqltest_u1@localhost';
|
||||
@cu = 'mysqltest_u1@localhost'
|
||||
1
|
||||
SELECT f2() = 'mysqltest_u1@localhost';
|
||||
f2() = 'mysqltest_u1@localhost'
|
||||
1
|
||||
SELECT cu = 'root@localhost' FROM v1;
|
||||
cu = 'root@localhost'
|
||||
1
|
||||
SELECT cu = 'root@localhost' FROM v2;
|
||||
cu = 'root@localhost'
|
||||
1
|
||||
SELECT cu = 'root@localhost' FROM v3;
|
||||
cu = 'root@localhost'
|
||||
1
|
||||
DROP VIEW v3;
|
||||
DROP FUNCTION f2;
|
||||
DROP PROCEDURE p1;
|
||||
DROP FUNCTION f1;
|
||||
DROP VIEW v2;
|
||||
DROP VIEW v1;
|
||||
DROP USER mysqltest_u1@localhost;
|
||||
|
@ -866,3 +866,65 @@ DROP VIEW test2.t3;
|
||||
DROP TABLE test2.t1, test1.t0;
|
||||
DROP DATABASE test2;
|
||||
DROP DATABASE test1;
|
||||
|
||||
|
||||
#
|
||||
# BUG#20570: CURRENT_USER() in a VIEW with SQL SECURITY DEFINER
|
||||
# returns invoker name
|
||||
#
|
||||
--disable_warnings
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP VIEW IF EXISTS v2;
|
||||
DROP VIEW IF EXISTS v3;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
DROP FUNCTION IF EXISTS f2;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
--enable_warnings
|
||||
|
||||
CREATE SQL SECURITY DEFINER VIEW v1 AS SELECT CURRENT_USER() AS cu;
|
||||
|
||||
CREATE FUNCTION f1() RETURNS VARCHAR(77) SQL SECURITY INVOKER
|
||||
RETURN CURRENT_USER();
|
||||
CREATE SQL SECURITY DEFINER VIEW v2 AS SELECT f1() AS cu;
|
||||
|
||||
CREATE PROCEDURE p1(OUT cu VARCHAR(77)) SQL SECURITY INVOKER
|
||||
SET cu= CURRENT_USER();
|
||||
delimiter |;
|
||||
CREATE FUNCTION f2() RETURNS VARCHAR(77) SQL SECURITY INVOKER
|
||||
BEGIN
|
||||
DECLARE cu VARCHAR(77);
|
||||
CALL p1(cu);
|
||||
RETURN cu;
|
||||
END|
|
||||
delimiter ;|
|
||||
CREATE SQL SECURITY DEFINER VIEW v3 AS SELECT f2() AS cu;
|
||||
|
||||
CREATE USER mysqltest_u1@localhost;
|
||||
GRANT ALL ON test.* TO mysqltest_u1@localhost;
|
||||
|
||||
connect (conn1, localhost, mysqltest_u1,,);
|
||||
|
||||
--echo
|
||||
--echo The following tests should all return 1.
|
||||
--echo
|
||||
SELECT CURRENT_USER() = 'mysqltest_u1@localhost';
|
||||
SELECT f1() = 'mysqltest_u1@localhost';
|
||||
CALL p1(@cu);
|
||||
SELECT @cu = 'mysqltest_u1@localhost';
|
||||
SELECT f2() = 'mysqltest_u1@localhost';
|
||||
SELECT cu = 'root@localhost' FROM v1;
|
||||
SELECT cu = 'root@localhost' FROM v2;
|
||||
SELECT cu = 'root@localhost' FROM v3;
|
||||
|
||||
disconnect conn1;
|
||||
connection default;
|
||||
|
||||
DROP VIEW v3;
|
||||
DROP FUNCTION f2;
|
||||
DROP PROCEDURE p1;
|
||||
DROP FUNCTION f1;
|
||||
DROP VIEW v2;
|
||||
DROP VIEW v1;
|
||||
DROP USER mysqltest_u1@localhost;
|
||||
|
||||
# End of 5.0 tests.
|
||||
|
Reference in New Issue
Block a user