web-dev-qa-db-ja.com

スーパーユーザーなしでPostgresqlを有効にする拡張機能

ユーザーのロールとデータベースを自動的に作成するスクリプトを実行しているPostgreSQL 9.5サーバーがあります。これらのデータベース内では、特定の拡張機能(pgcryptoなど)を有効にすると便利ですが、CREATE EXTENSIONを実行するには、スーパーユーザーである必要があります。スーパーユーザーアカウントで手動でログインせずに、このような拡張機能を有効にする方法はありますか?

13
beldaz

拡張機能の the docs から、

スーパーユーザー(ブール値)このパラメーターがtrue(デフォルト)の場合、スーパーユーザーのみが拡張子を作成したり、新しいバージョンに更新したりできます。 falseに設定されている場合、インストールまたは更新スクリプトでコマンドを実行するために必要な権限のみが必要です。

値は pgcrypto.control に設定されていないため、デフォルトでtrueになり、SuperUserが必要です。

つまり、 CREATE EXTENSION のドキュメントがあなたを信じさせているにもかかわらず、データベースの単なる所有者としてCREATE EXTENSIONを行うことはできません。

私はそれをfalseにハード設定してみましたが、喜びはありませんでした。 Cは信頼できない言語であり、

エラー:言語cの許可が拒否されました

から pg_languageのドキュメント

信頼できない言語で関数を作成できるのはスーパーユーザーだけです。

...もちろん、cUPDATE pg_language set lanpltrusted = true where lanname = 'c';をスーパーユーザーとして信頼することもできます。その後、CREATE EXTENSION pgcryptoは非スーパーユーザーとして正常に動作します。しかし、ユーザーがソースを拡張ディレクトリにアップロードし、それをデータベースにインストールすることを心配する必要がある場合、それは悪い考えのように思えます。つまり、私はそれほど遠くに行きません。この猫の皮を剥ぐ別の方法を見つけます。

10
Evan Carroll