1

postgreSQLデータベースバックエンドを使用するアプリケーションを開発しています。ユーザーがdbオブジェクトの一部(特にストアドプロシージャの実装など)を表示しないようにしたい。

「明らかな」(しかしおそらく間違った)方法は、暗号化されたuname /pwdを持つ特定のユーザーにデータベースへのCRUDアクセスを許可することです。

これを行う別の方法はありますか?

注:私のターゲットオーディエンスは主にプログラマーではないので、「壊れない」ものは必要ありません(そのようなものが存在すると仮定します)。

4

1 に答える 1

1

PostgreSQLは、プロシージャのソースコード、ユーザーまたはデータベースリストなどの可視性の制限を実際にはサポートしていません。最善の方法は、それを受け入れるか、かなりの犠牲を払って調べるのがやや難しいCまたはPL/Javaでプロシージャを実装することです。実装がより複雑になります。

一般に、データベース/テーブルの所有者をDBの日常の運用ユーザーにすることはできません。新しいユーザーを作成し、GRANT必要な権限のみを作成します。

ほとんどのシステムカタログにはデフォルトのSELECT権限が付与されているため、アクセスを明示的に制限してから、データベースの所有者とそれを持っている必要のある他のユーザーにアクセスpublicを明示的に制限する必要があります。たとえば、プロシージャソースへのアクセスを制限する場合は、へのアクセスを制限することをお勧めします。このようなアプローチは制限されており、脆弱です(rootは常にPostgreSQLスーパーユーザーアクセスを取得でき、そこから何でも実行できます)が、おそらくそれはあなたの目的には問題ないとおっしゃっています。REVOKEGRANTpg_proc

システムカタログの操作は実際にはサポートされておらず、JDBC、psqlなどのメタデータアクセスで問題が発生する可能性があります。この関連する回答を参照してください。カタログをいじって何かが壊れた場合、あなたはその断片を保持することができます。

ところで、カタログを変更する場合は、ここで手動で変更されたカタログを使用してデータベースについて質問しないようにしてください。少なくとも、システムカタログを台無しにしたことと、正確に何をしたかを非常に明確に指定してください。可能であれば、最初に変更されていないデータベースで問題を再現してください。

于 2012-10-30T11:52:33.390 に答える