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
多分それは拡張であるためかもしれません...しかし、私は自分のストアドプロシージャを作成するために何をすべきかはしません。
まずしないでくださいplpython3uを信頼できる言語にします。これは悪いです。ひどく悪用される可能性のある方法で、データベース、ファイルシステムなどのあらゆる種類のアクセスを許可しています。 再検討してください。
ここで、コメントから、管理者権限を通常のユーザー権限とは別にしたいとします。これを行う方法は、スーパーユーザーがNOINHERITであり、ユーザーに役割が付与されていることを確認することです。あなたはできる:
CREATE ROLE mydba WITH SUPERUSER NOINHERIT;
GRANT mydba TO myuser;
次にmyuser
としてログインすると、次のことができます。
SET ROLE mydba;
そして、スーパーユーザー権限を取得します。これを使用して、* nixシステムのSudoと同様の方法で一時的に許可をエスカレーションできます。