You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[root@localhost ~]# psql -U kompira test_db -c "CREATE EXTENSION pgcrypto;"
ERROR: permission denied to create extension "pgcrypto"
HINT: Must be superuser to create this extension.
パスワードフィールドの暗号化に必要な pgcrypto について、「拡張モジュール pgcrypto がインストールされていること」という記載があるが、この説明では不十分な場合がある。
正確には、以下の2段階が必要になります。
このうち、後者については、kengine 起動時のデータベース初期化(manage.py migrate)に内部で自動的に試行されますが、この成否が postgresql のバージョン(および拡張モジュールの設定)に依存するようです。
pgsql-13 以降ではエクステンションに trusted マークというのが導入されていて、trusted=true とマークされたエクステンションについては、スーパーユーザでなくてもデータベースの所有者であれば当該エクステンションを読み込むことができます。
https://www.postgresql.jp/document/13/html/sql-createextension.html
postgresql13-contrib-13.16 でインストールされた pgcrypto については tusted=true となっているようです。
pgsql-13 では実際にスーパユーザでなくても、データベースの所有者であれば pgcrypto の読み込みができることを確認しています。
しかし、pgsql-12 には、この trusted という仕組みはまだ導入されていないようで、また、マニュアルには「ほとんどの拡張で、これはスーパーユーザもしくはデータベース所有者の権限が必要であることを意味します。」という記載がありますが、実際に試すとスーパユーザでないとエラーになることが確認されています。
このように pgsql-12 の場合を想定すると、「拡張モジュール pgcrypto がインストールされていること」という表現だけでは pgcrypto の読み込みでエラーになり、kengine の起動失敗に繋がる可能性があります。
すこし冗長ですが、以下のような補足説明が必要かと思われます。
※ pgsql-13 以上であってもインストールされている pgcrypto 拡張モジュールが trusted マークされていない場合は、pgsql-12 と同じ準備が必要になると考えられます。
The text was updated successfully, but these errors were encountered: