2013-12-21 17 views
31

私は私のデータベースにhstoreのを有効にしよう:なぜスーパーユーザーだけがCREATE EXTENSION hstoreを使用できますが、Herokuでは使用できませんか?

=> CREATE EXTENSION IF NOT EXISTS hstore; 
ERROR: permission denied to create extension "hstore" 
HINT: Must be superuser to create this extension. 

は、私のユーザーはスーパーではありませんが、データベースの所有者です。 the CREATE EXTENSION docsによると

拡張をロードするには、そのコンポーネント・オブジェクトを作成するために必要とされるであろうと同じ権限が必要です。ほとんどの拡張機能では、スーパーユーザー権限またはデータベース所有者権限が必要です。 CREATE EXTENSIONを実行するユーザーは、拡張機能の所有者となり、拡張機能のスクリプトによって作成されたオブジェクトの所有者と同様に、後で権限チェックを行うことができます。

スーパーユーザー権限が必要なhstoreとは何ですか?私はそれを追加するデータベースの外のクラスタの部分に影響を与えますか?


さらにconfundity:

The DB user Heroku Postgres provides is not a superuser

HerokuのPostgresのユーザーが自分のデータベース上のすべての非スーパーユーザ権限が付与されています。これらはSELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERCREATECONNECTTEMPORARYEXECUTE、およびUSAGEが含まれます。

しかし、that user is able to CREATE EXTENSION hstore

は、サポートされている任意の拡張機能を作成するには、HerokuののPGとのセッションを開きます。psqlをし、適切なコマンドを実行します。

コンテキストの場合
$ heroku pg:psql 
Pager usage is off. 
psql (9.2.4) 
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) 
Type "help" for help. 

ad27m1eao6kqb1=> CREATE EXTENSION hstore; 
CREATE EXTENSION 
ad27m1eao6kqb1=> 

(、I Dokkuのデプロイメントをセットアップしようとしているので、Herokuとの比較が特に重要です。

+0

スーパーユーザーだけが許可するネイティブライブラリ(dll/so)をロード/バインドする必要があるからです。 –

+0

私は@a_horse_with_no_nameと一緒にいるので、サーバプロセスを変更する必要があるので、SUを必要とすると思うので、通常はSUを使用してブートストラップの一部として読み込み、DB所有者に切り替える前にサポートするドキュメントは見つかりません – Doon

+0

Hmm 。それは理にかなっていますが、Herokuについての私の追加を見てください。非スーパーユーザのために 'CREATE EXTENSION hstore'を可能にするDBをセットアップしている間に、Herokuが事前に何かしていますか? – Peeja

答えて

34

hstore拡張機能は、スーパーユーザ特権​​を必要とする外部の動的オブジェクトからコードを呼び出す関数を作成します。そのため、hstore拡張を作成するには、スーパーユーザー権限が必要です。

Herokuは、特別な拡張ホワイトリストモジュールを使用していることを理解しています。スーパーモジュールではなくても、特定の拡張機能を作成できるようになっています。私はそれがこのコードに基づいていると信じています:https://github.com/dimitri/pgextwlist。データベースに同じ機能が必要な場合は、自分でコードをインストールしてみてください。

+0

どの外部オブジェクト拡張が使用するかを教えてください。私はこのオブジェクトがデータベースインフラストラクチャの内部にあると考えています。 –

関連する問題