首页 > 解决方案 > 如何确保函数仅从一个特定模式中选择?

问题描述

我需要做些什么来确保sandbox.execute_any_query()只有SELECTs 来自 schema 中的表sandbox

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;

标签: postgresqldatabase-permissions

解决方案


将函数标记为SECURITY DEFINER并确保函数所有者对除sandbox.

然后该函数将在所有者的用户上下文中运行,任何访问其他模式的尝试都会导致错误。


推荐阅读