非スーパー特権ユーザーとしてUUID拡張機能を作成します
-
22-10-2019 - |
質問
ランタイムで作成されているデータベースに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;
章を読んでください 「セキュリティの定義者を安全に書く」 マニュアルで。
所属していません dba.stackexchange