无法在 plpython3u 中“创建函数”,权限被拒绝

Ste*_*and 4 postgresql stored-procedures postgresql-9.1 plpython

作为 postgres 用户,create extension plpython3u;我的数据库中有

然后我已将其设置plpython3u为受信任:select lanpltrusted from pg_language where lanname like 'plpython3u';返回 true

但是当我的 db_user 尝试

  create function check_data_valid(id bigint)
    returns boolean
    as $$
    -- ...
    return true
    $$ language plpython3u;
Run Code Online (Sandbox Code Playgroud)

我得到了错误: permission denied for the language plpython3u

所以,我的Postgres的用户,然后我曾尝试:grant usage on plpython3u to db_usergrant execute on plpython3u to db_user,但都返回错误:

relation python doesn't exist

也许是因为它是一个扩展......但是,我不知道该怎么做才能创建我的存储过程。

Chr*_*ers 7

首先不要把 plpython3u 变成可信赖的语言。这很糟糕。 您正在以可能被严重滥用的方式访问数据库、文件系统等中的各种内容。 请重新考虑。

现在,根据您的评论,您希望将管理员权限与普通用户权限分开。这样做的方法是确保超级用户是 NOINHERIT 并且用户被授予角色。你可以:

 CREATE ROLE mydba WITH SUPERUSER NOINHERIT;

 GRANT mydba TO myuser;
Run Code Online (Sandbox Code Playgroud)

然后登录,myuser然后您可以:

 SET ROLE mydba;
Run Code Online (Sandbox Code Playgroud)

您将获得超级用户权限。然后,您可以使用它以类似于 *nix 系统上的 sudo 的方式临时升级您的权限。