web-dev-qa-db-ja.com

postgresqlサーバーでSETコマンドを禁止する

私のpostgresqlサーバーをいくつかの信頼できないクライアントに公開することを計画しています。

Work_memやサーバーにとって危険なものなど、ランタイム設定を変更してほしくない。一般に、pg_catalogスキーマはパブリックであると想定していますが、pg_settingsの更新をまったく許可したくありません。

出来ますか?

4
avances123

Tometzkyに同意します。いくつか考えを追加したいと思います。

まず、DBサーバーを公開する必要がある場合は、それを自分のサーバー(またはサーバープロセス)から分離します-可能であれば物理的に、またはパブリックDBサーバーをVMに配置します。これにより、リソースの消費が制限されます。同じ物理マシン上の他のプロセスに実際に影響を与えることができない場合の程度。

第2に、リソース関連の構成パラメーターへの変更を制限することは、限られた用途にしか使用できません。たとえば、work_memをかなり高い値に設定して、巨大な並べ替えを行うことができますが、これは、たとえば、それぞれ100万行の4方向デカルト積よりもサーバー全体のパフォーマンスに影響を与えることはありません。どうしても防ぐことはできません...

そして、残念ながら、他のセッションからセッションの設定を変更する方法がわかりません(後者はpostgresユーザーに接続されています)。 (私の知る限り)他のセッションの変更された設定を実際に見ることさえできません。パブリックサーバーの使用を制御する1つの可能性は、OSレベルでリソース消費をチェックし、悪用の兆候を示すプロセスを強制終了することです。もちろん、これはあまり友好的ではありませんが、最後のリソースとして役立つ場合があります。

1
dezso

サーバー上のすべてのpostgresプロセスで使用されるメモリを、サーバーのメモリ全体を使用しないように制限できます。パッチを適用せずに、共有サーバーインスタンス上の単一のPostgresユーザーを制限することが可能かどうかは疑問です。心配なのは、Postgresの複数のインスタンスを、それぞれが異なるポート、IPアドレス、またはソケットで実行でき、それぞれに独自のメモリ制限があることです。

0
Tometzky