web-dev-qa-db-ja.com

plpython3uで「関数を作成」できません、権限が拒否されました

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;

エラーが発生しました:permission denied for the language plpython3u

それで、私のpostgresユーザーと私は試してみました:grant usage on plpython3u to db_userおよびgrant execute on plpython3u to db_userですが、どちらもエラーを返します。

relation python doesn't exist

多分それは拡張であるためかもしれません...しかし、私は自分のストアドプロシージャを作成するために何をすべきかはしません。

4

まずしないでくださいplpython3uを信頼できる言語にします。これは悪いです。ひどく悪用される可能性のある方法で、データベース、ファイルシステムなどのあらゆる種類のアクセスを許可しています。 再検討してください。

ここで、コメントから、管理者権限を通常のユーザー権限とは別にしたいとします。これを行う方法は、スーパーユーザーがNOINHERITであり、ユーザーに役割が付与されていることを確認することです。あなたはできる:

 CREATE ROLE mydba WITH SUPERUSER NOINHERIT;

 GRANT mydba TO myuser;

次にmyuserとしてログインすると、次のことができます。

 SET ROLE mydba;

そして、スーパーユーザー権限を取得します。これを使用して、* nixシステムのSudoと同様の方法で一時的に許可をエスカレーションできます。

7
Chris Travers