PostgreSQL で、誰か(スーパーユーザーを含む) が特定のテーブルを削除できないようにするにはどうすればよいですか?
編集:おっと、ここで誤解がありましたか。大規模な共有 QA データベースがあるとします。ときどき、休止状態で生成されたスキーマのような破壊的なものを間違って実行することがあります。私はそのような間違いを防ぐ方法を探しています。
PostgreSQL で、誰か(スーパーユーザーを含む) が特定のテーブルを削除できないようにするにはどうすればよいですか?
編集:おっと、ここで誤解がありましたか。大規模な共有 QA データベースがあるとします。ときどき、休止状態で生成されたスキーマのような破壊的なものを間違って実行することがあります。私はそのような間違いを防ぐ方法を探しています。
に接続する C コードを書くことで、これを行うことができますProcessUtility_hook
。そのようなことをしたことがない場合、それはまったく些細なことではありませんが、可能です。
別のオプションは sepgsql を調べることかもしれませんが、私はその経験がありません。
誰か (スーパーユーザーを含む) が特定のテーブルを削除することはありませんか?
仲間を信頼してください。
スーパーユーザーはまさにそれです。彼らが物を落とせないようにしたい場合は、彼らをスーパーユーザーにしないでください。
ユーザーをスーパーユーザーとして実行させる必要はほとんどありません。確かに、スキーマ移行のような自動化ツールではありません。
アプリケーションは、最低限必要なユーザー権限を持つユーザーとして接続する必要があります。操作対象のテーブルを所有してはならないため、スキーマを変更したり削除したりできません。
スキーマを変更する場合は、対象のテーブルの所有権はあるがスーパーユーザーではないユーザーでアプリケーションを実行します。テーブルの所有者は、テーブルを削除および変更できますが、所有しているテーブルのみです。
本当に、本当に標準のアクセス許可モデルを超えて何かをする必要がある場合は、ProcessUtility_hook
. その詳細については、この関連する回答を参照してください。それでも、スーパーユーザーは、フックをスキップする拡張機能をロードすることで回避できる場合があります。それらを少し遅くするだけです。
本番環境でスーパーユーザーとしてアプリケーションを実行しないでください。これまで。
アクセス許可モデルの使用に関する詳細なガイダンスについては、アクセス許可に関する PostgreSQL のドキュメントを参照してください。
私はあなたがそれを行うことができるとは思わない. おそらく、最初にすべてのドロップを管理するスーパー スーパー ユーザーを持つことができます。または、常にバックアップを保持しているため、階層の上位メンバーが常にテーブルを取得できる可能性があります。