我需要做些什么来确保sandbox.execute_any_query()
只来自模式sandbox
中的表SELECT
?
create function sandbox.execute_any_query(_query text) returns json as
$$
declare
_result json;
begin
execute format('select row_to_json(t) from (%s) t', _query) into _result;
return _result;
end
$$
language plpgsql;
将函数标记为SECURITY DEFINER
,并确保函数所有者对sandbox
以外的任何架构都没有权限。
然后,该函数将在所有者的用户上下文中运行,任何访问其他模式的尝试都将导致错误。