如何确保某个功能仅从一个特定模式中进行选择?

时间:2018-12-07 08:15:02

标签: postgresql database-permissions

我该怎么做才能确保sandbox.execute_any_query()模式中的表中只有SELECTsandbox

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;

1 个答案:

答案 0 :(得分:0)

将函数标记为SECURITY DEFINER,并确保函数所有者对sandbox以外的任何模式都没有权限。

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