split mysql_function usecase

This commit is contained in:
chenxiaobin19
2023-05-06 17:19:29 +08:00
parent ff67adb323
commit e4989a855b
9 changed files with 783 additions and 768 deletions

View File

@ -1,9 +1,4 @@
--test create function/procedure definer=user
drop database if exists mysqltest;
CREATE DATABASE mysqltest DBCOMPATIBILITY 'B';
create schema mysqlschema;
create user usr1 password '12345@abc';
create user usr2 password '12345@abc';
--grammar test
\c mysqltest
create schema mysqlschema;
@ -69,131 +64,8 @@ select usename from pg_user where usesysid = (select proowner from pg_proc wher
-- dump function
\! @abs_bindir@/gs_dump mysqltest -p @portstring@ -f @abs_bindir@/mysql_function_back.sql
CREATE DATABASE mysqltestbak DBCOMPATIBILITY 'B';
-- restore data
\! @abs_bindir@/gsql -p @portstring@ -d mysqltestbak -f @abs_bindir@/mysql_function_back.sql
\c mysqltestbak
\sf proc_definer1
--test security--general user create definer function
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -f @abs_srcdir@/sql/mysql_function_test.sql
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from public
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from public;revoke EXECUTE on procedure mysqlschema.invoker() from public; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from usr2;revoke EXECUTE on procedure mysqlschema.invoker() from usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--grant execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "grant EXECUTE on procedure mysqlschema.definer() to usr1;grant EXECUTE on procedure mysqlschema.invoker() to usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--grant execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "grant EXECUTE on procedure mysqlschema.definer() to usr2;grant EXECUTE on procedure mysqlschema.invoker() to usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--test security--super user create definer function
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -f @abs_srcdir@/sql/mysql_function_test.sql
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from public
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from public;revoke EXECUTE on procedure mysqlschema.invoker() from public; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from usr2;revoke EXECUTE on procedure mysqlschema.invoker() from usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--grant execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "grant EXECUTE on procedure mysqlschema.definer() to usr1;grant EXECUTE on procedure mysqlschema.invoker() to usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--grant execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "grant EXECUTE on procedure mysqlschema.definer() to usr2;grant EXECUTE on procedure mysqlschema.invoker() to usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
\c regression
drop database IF EXISTS mysqltest;
drop database IF EXISTS mysqltestbak;

View File

@ -0,0 +1,122 @@
\c mysqlfunction
create schema mysqlschema;
grant ALL on SCHEMA mysqlschema to PUBLIC;
create user usr1 password '12345@abc';
create user usr2 password '12345@abc';
--test security--general user create definer function
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -f @abs_srcdir@/sql/mysql_function_test.sql
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from public
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from public;revoke EXECUTE on procedure mysqlschema.invoker() from public; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from usr2;revoke EXECUTE on procedure mysqlschema.invoker() from usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--grant execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "grant EXECUTE on procedure mysqlschema.definer() to usr1;grant EXECUTE on procedure mysqlschema.invoker() to usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--grant execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "grant EXECUTE on procedure mysqlschema.definer() to usr2;grant EXECUTE on procedure mysqlschema.invoker() to usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--test security--super user create definer function
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -f @abs_srcdir@/sql/mysql_function_test.sql
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from public
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from public;revoke EXECUTE on procedure mysqlschema.invoker() from public; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from usr2;revoke EXECUTE on procedure mysqlschema.invoker() from usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--grant execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "grant EXECUTE on procedure mysqlschema.definer() to usr1;grant EXECUTE on procedure mysqlschema.invoker() to usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--grant execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "grant EXECUTE on procedure mysqlschema.definer() to usr2;grant EXECUTE on procedure mysqlschema.invoker() to usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"

View File

@ -0,0 +1,4 @@
-- drop database used in mysql_function\mysql_function_2
drop database if exists mysqltest;
drop database if exists mysqltestbak;
drop database if exists mysqlfunction;

View File

@ -0,0 +1,7 @@
-- create database for mysql_function\mysql_function_2
drop database if exists mysqltest;
drop database if exists mysqltestbak;
drop database if exists mysqlfunction;
CREATE DATABASE mysqltest DBCOMPATIBILITY 'B';
CREATE DATABASE mysqltestbak DBCOMPATIBILITY 'B';
CREATE DATABASE mysqlfunction DBCOMPATIBILITY 'B';

View File

@ -1,9 +1,4 @@
--test create function/procedure definer=user
drop database if exists mysqltest;
CREATE DATABASE mysqltest DBCOMPATIBILITY 'B';
create schema mysqlschema;
create user usr1 password '12345@abc';
create user usr2 password '12345@abc';
--grammar test
\c mysqltest
create schema mysqlschema;
@ -90,7 +85,6 @@ select usename from pg_user where usesysid = (select proowner from pg_proc wher
--? .*
--? .*
--? .*
CREATE DATABASE mysqltestbak DBCOMPATIBILITY 'B';
-- restore data
\! @abs_bindir@/gsql -p @portstring@ -d mysqltestbak -f @abs_bindir@/mysql_function_back.sql
--? .*
@ -126,634 +120,3 @@ AS DECLARE BEGIN
raise info 'create definer procedure.';
END;
/
--test security--general user create definer function
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -f @abs_srcdir@/sql/mysql_function_test.sql
gsql:@abs_srcdir@/sql/mysql_function_test.sql:2: NOTICE: function mysqlschema.definer() does not exist, skipping
DROP PROCEDURE
gsql:@abs_srcdir@/sql/mysql_function_test.sql:3: NOTICE: function mysqlschema.invoker() does not exist, skipping
DROP PROCEDURE
CREATE PROCEDURE
CREATE PROCEDURE
--? .*
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from public
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from public;revoke EXECUTE on procedure mysqlschema.invoker() from public; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from usr2;revoke EXECUTE on procedure mysqlschema.invoker() from usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
--grant execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "grant EXECUTE on procedure mysqlschema.definer() to usr1;grant EXECUTE on procedure mysqlschema.invoker() to usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
GRANT
GRANT
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
--grant execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "grant EXECUTE on procedure mysqlschema.definer() to usr2;grant EXECUTE on procedure mysqlschema.invoker() to usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
GRANT
GRANT
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--test security--super user create definer function
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -f @abs_srcdir@/sql/mysql_function_test.sql
DROP PROCEDURE
DROP PROCEDURE
CREATE PROCEDURE
CREATE PROCEDURE
--? .*
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from public
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from public;revoke EXECUTE on procedure mysqlschema.invoker() from public; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from usr2;revoke EXECUTE on procedure mysqlschema.invoker() from usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
--grant execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "grant EXECUTE on procedure mysqlschema.definer() to usr1;grant EXECUTE on procedure mysqlschema.invoker() to usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
GRANT
GRANT
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
--grant execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "grant EXECUTE on procedure mysqlschema.definer() to usr2;grant EXECUTE on procedure mysqlschema.invoker() to usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
GRANT
GRANT
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqltest -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
\c regression
drop database IF EXISTS mysqltest;
drop database IF EXISTS mysqltestbak;

View File

@ -0,0 +1,633 @@
\c mysqlfunction
create schema mysqlschema;
grant ALL on SCHEMA mysqlschema to PUBLIC;
create user usr1 password '12345@abc';
create user usr2 password '12345@abc';
--test security--general user create definer function
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -f @abs_srcdir@/sql/mysql_function_test.sql
gsql:@abs_srcdir@/sql/mysql_function_test.sql:2: NOTICE: function mysqlschema.definer() does not exist, skipping
DROP PROCEDURE
gsql:@abs_srcdir@/sql/mysql_function_test.sql:3: NOTICE: function mysqlschema.invoker() does not exist, skipping
DROP PROCEDURE
CREATE PROCEDURE
CREATE PROCEDURE
--? .*
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from public
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from public;revoke EXECUTE on procedure mysqlschema.invoker() from public; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from usr2;revoke EXECUTE on procedure mysqlschema.invoker() from usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
--grant execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "grant EXECUTE on procedure mysqlschema.definer() to usr1;grant EXECUTE on procedure mysqlschema.invoker() to usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
GRANT
GRANT
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
--grant execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "grant EXECUTE on procedure mysqlschema.definer() to usr2;grant EXECUTE on procedure mysqlschema.invoker() to usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
GRANT
GRANT
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--test security--super user create definer function
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -f @abs_srcdir@/sql/mysql_function_test.sql
DROP PROCEDURE
DROP PROCEDURE
CREATE PROCEDURE
CREATE PROCEDURE
--? .*
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from public
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from public;revoke EXECUTE on procedure mysqlschema.invoker() from public; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from usr2;revoke EXECUTE on procedure mysqlschema.invoker() from usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
--grant execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "grant EXECUTE on procedure mysqlschema.definer() to usr1;grant EXECUTE on procedure mysqlschema.invoker() to usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
GRANT
GRANT
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
ERROR: permission denied for function definer
DETAIL: N/A
CONTEXT: referenced column: definer
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
--grant execute from usr2
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "grant EXECUTE on procedure mysqlschema.definer() to usr2;grant EXECUTE on procedure mysqlschema.invoker() to usr2; select mysqlschema.definer(); select mysqlschema.invoker()"
GRANT
GRANT
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
--revoke execute from usr1
--super user opengauss execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -c "revoke EXECUTE on procedure mysqlschema.definer() from usr1;revoke EXECUTE on procedure mysqlschema.invoker() from usr1; select mysqlschema.definer(); select mysqlschema.invoker()"
REVOKE
REVOKE
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)
-- usr1 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr1 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
ERROR: permission denied for function invoker
DETAIL: N/A
CONTEXT: referenced column: invoker
-- usr2 execute
\! @abs_bindir@/gsql -r -p @portstring@ -d mysqlfunction -U usr2 -W '12345@abc' -c "select mysqlschema.definer(); select mysqlschema.invoker()"
INFO: create definer procedure.
CONTEXT: referenced column: definer
definer
---------
(1 row)
INFO: create invoker procedure.
CONTEXT: referenced column: invoker
invoker
---------
(1 row)

View File

@ -0,0 +1,4 @@
-- drop database used in mysql_function\mysql_function_2
drop database if exists mysqltest;
drop database if exists mysqltestbak;
drop database if exists mysqlfunction;

View File

@ -0,0 +1,9 @@
-- create database for mysql_function\mysql_function_2
drop database if exists mysqltest;
drop database if exists mysqltestbak;
NOTICE: database "mysqltestbak" does not exist, skipping
drop database if exists mysqlfunction;
NOTICE: database "mysqlfunction" does not exist, skipping
CREATE DATABASE mysqltest DBCOMPATIBILITY 'B';
CREATE DATABASE mysqltestbak DBCOMPATIBILITY 'B';
CREATE DATABASE mysqlfunction DBCOMPATIBILITY 'B';

View File

@ -1022,14 +1022,15 @@ test: subscription
test: fdw_audit
test: gs_global_config_audit
test: detail declare_multiple_variable
test: gs_dump_encrypt substr
test: composite_datum_record mysql_function b_comments mysql_syntax mysql_condition mysql_delimiter mysql_delimiter_fix mysql_indexhint mysql_trigger
# mysql_function_prepare must precede mysql_function/mysql_function_2, and mysql_function_clearup must follow mysql_function/mysql_function_2
test: gs_dump_encrypt substr mysql_function_prepare
test: composite_datum_record mysql_function mysql_function_2 b_comments mysql_syntax mysql_condition mysql_delimiter mysql_delimiter_fix mysql_indexhint mysql_trigger
test: join_test_alias alter_ctable_compress
test: ignore/ignore_type_transform ignore/ignore_not_null_constraints ignore/ignore_unique_constraints ignore/ignore_no_matched_partition ignore/ignore_invalid_input
test: pg_ls_dir
test: cost_model
test: mysql_function_clearup cost_model
test: base_update
test: seqscan_fusion