質問

ランタイムで作成されているデータベースにUUID拡張機能をロードする必要があります。 DBを作成したユーザーはスーパーユーザーではなく、「createdB」権限しかありません。

これを行う方法はありますか?ありがとう。

役に立ちましたか?

解決

私は2つの可能性を見ます:

1.

拡張機能をaにインストールします テンプレートデータベース (通常のデータベース)とそれをテンプレートとして使用します CREATE DATABASE:

CREATE DATABASE new_db TEMPLATE my_template_db;

これにより、すべてのインストールされている拡張機能が新しいデータベースにコピーされます。あなたのユーザーは明らかにできます それ.

また、彼女の場合 作成した 彼女が実行するために必要な特権を持っている必要があるデータベース CREATE EXTENSION とりあえず。 マニュアルを引用します:

ほとんどの拡張機能では、これはスーパーユーザーまたはデータベースの所有者の特権が必要であることを意味します。

2.

aを作成します SECURITY DEFINER スーパーユーザーが所有する必要なすべてのDMLステートメントを実行する関数。すべての特権を取り消します public と付与 EXECUTE ユーザーの役割へ:

CREATE FUNCTION foo() ... SECURITY DEFINER;
REVOKE ALL ON FUNCTION foo() FROM public;
GRANT EXECUTE ON FUNCTION foo() to my_user;

章を読んでください 「セキュリティの定義者を安全に書く」 マニュアルで。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top