2016-04-05 8 views
1

私はこのようなdeclaredでPostgresの機能gen_random_bytes、呼び出す、projectを持っている:それは限り、私は私のローカルマシン上で使用されるように、うまく働いたHerokuの「言語Cの許可が拒否されました」エラーを回避するにはどうすればよいですか?

CREATE OR REPLACE FUNCTION core.gen_random_bytes(integer) RETURNS bytea AS '$libdir/pgcrypto', 'pg_random_bytes' LANGUAGE c STRICT; 

を。

[WARNING ] CREATE OR REPLACE FUNCTION core.gen_random_bytes(integer) RETURNS bytea AS '$libdir/pgcrypto', 'pg_random_bytes' LANGUAGE c STRICT 
ERROR: permission denied for language c 

私がコマンド

を使用することをお勧めします別の answerを、見つけCで関数を宣言することができる唯一のスーパーのように思える:私は次のエラーを取得する - しかし、私はHerokuの上でその関数を作成することはできませんよ
UPDATE pg_language SET lanpltrusted = true WHERE lanname LIKE 'c'; 

私はどちらか、そのコマンドの権限がありません。

ERROR: permission denied for relation pg_language 
SQL state: 42501 

どのように私はHerokuの上の私のコードの仕事を得ることができますか? Postgresの言語で

  1. 書き換えcore.gen_random_bytes

    は、私は、少なくとも以下のオプションがあります。

  2. core.gen_random_bytesの既存の代替手段を使用します。これには、スーパーユーザー権限は必要ありません。
  3. 今の私にスーパーユーザの権限を与える別のホスティングプロバイダにHerokuのから切り替えて、(例えばデジタルオーシャンなどアマゾンEC2)

、私はこのプロジェクトのプロトタイプを作成しています。私が言及しなかったものを含む、最も簡単なオプションはどれですか?

+0

「pgcrypto」拡張機能を使用できますか:https://devcenter.heroku.com/articles/heroku-postgres-extensions-postgis-full-text-search? 'gen_random_bytes'関数があるようです(使用しているものと同じです) – matt

答えて

4

答えは:裸のインスタンスで私自身がPostgresを実行しない限り(私はHerokuのオプションでさえ確かではない)、あなたはできません。

Postgresのホストサービス(HerokuやAmazon RDSなど)の欠点は、内部的には複数のPostgresデータベースを単一の仮想サーバで実行できる必要があることです。これは、PostgresがOSレベルで何かに影響を与える可能性があることをPostgresに許可することができないことを意味します。信頼できないプロシージャ言語(C、plpythonu、plperluなど)は、Postgresを実行するOSユーザーが実行できるOSレベルで何かを行うことができます。これは、共有環境では受け入れられないセキュリティホールです。 (例として、サーバー上の他のすべての顧客の未処理のPostgresデータを読むのは簡単でしょう)

あなたの唯一のオプションは、PostgreSQLを自分でインストールして管理することです。 Amazonではかなり簡単です。あなたが選んだOSで生のEC2インスタンスをつかみ、その上にPostgresを叩くだけです。あなたはRDSが提供するメンテナンスの容易さのいくつかを失いますが、もしあなたがPostgresを知っていれば、それは本当に大きな問題ではありません。私は自分のクライアントに正確にそれをするように促す傾向があるので、RDSチームが祝福していない拡張機能(共有環境では安全でないもの)を使用する能力があります。

私はHerokuの製品に精通していませんが、裸のEC2インスタンスに匹敵するものがあれば、同じことをすることができます。

+0

' core.gen_random_bytes'をPostgres言語(Cではなく)で再実装するのはどれくらい難しいでしょうか? –

関連する問題