私はPostgresデータの読み書きを厳密に制御する必要があります。更新可能なビューは、常にデータの読み取りを非常に良く厳密に制御し、貴重な計算カラムを追加することができます。 Postgres 9.5では、行レベルのセキュリティにより、データを制御するための新しく強力な方法が導入されました。しかし、テクノロジービューと行レベルのセキュリティを併用することはできません。どうして?Postgresビューで行レベルのセキュリティが有効になっていないのはなぜですか?
答えて
基本的に、ビューの動作を遡及的に変更できなかったためです。ビューのためにSECURITY INVOKER
(または同等のもの)をサポートできるようにしたいと思いますが、私が知っている限り、そのような機能は現在存在しません。
ビューへのアクセスを、通常はセルフローのセキュリティでフィルタリングできます。
ビューによってアクセスされる表には、行セキュリティー・ルールも適用されます。ただし、current_user
はビュー作成者と表示されます。ビューは、ビューを作成または所有するユーザーの権限でテーブルおよびその他のビューにアクセスするためです。
必要な機能やpgsql-generalの開発に踏み込んで助けてくれるのであれば、これをpgsql-hackersで行う価値はあるでしょうか?
ビューは作成中のユーザーとしてテーブルにアクセスし、それに応じてcurrent_user
を変更しますが、行セキュリティポリシーでカスタムGUC、session_user
、またはその他のコンテキスト情報を使用することはできません。行セキュリティをビューで使用することはできますが、current_user
に基づいてフィルタリングする(有益には)わけではありません。
ビューの仕組みはどのように変化しますか?基本的にRLSではいくつかの「WHERE」条項が追加されただけではありませんか?そして基本的にSQLステートメントだけのビューではありませんか? – Calebmer
@Calebmerビューは、ビューを作成したユーザーのアクセス権でビューが使用するテーブルにアクセスします。ビューにアクセスした "トップレベル"のユーザに基づくビューを介してアクセスされるテーブルへのアクセスを、行セキュリティがビューにアクセスする方法を変更する必要があるようにするには、 'current_user'が設定されていないようにします。 'session_user'ですが、これは' SET SESSION AUTHORIZATION'時に変更されないので、pgbouncerなどでプールされた接続を使用している場合は役に立ちません。 –
うわー..これは本当にポリシーのドキュメントページに言及する必要があります。私は、すべてのテーブルがプライベート・スキーマ内にあり、別のスキーマのビューを介して外部APIで使用できるようになっているアプリケーションでこの問題を発見しました。このビューはスーパーユーザーによって作成されたため、RLSはテストされていても実際のテーブルに対して正常に動作していても完全に破損していました。 – deinspanjer
- 1. APIでCORSが有効になっていないのはなぜですか?
- 2. ボタンが有効になっていないのはなぜですか?
- 3. ボタンが有効で無効になっていないのはなぜですか?
- 4. なぜw3バリデーターはonClickが有効でないと言っていますか?
- 5. ルートノードの値が有効でないのはなぜですか?
- 6. なぜ有効に移行しないのですか?
- 7. SPARKでKryoSerializerがデフォルトで有効になっていないのはなぜですか?
- 8. PHPでバッファリングがデフォルトで有効になっていないのはなぜですか?
- 9. なぜこれが有効にならないのですか?
- 10. Visual Studio 2008でデバッグが有効になっていると、デバッグが有効になっているのはなぜですか?
- 11. 私のアプリにSSLが有効になっていないと、Azureの私のPostgresサーバへの接続が失敗するのはなぜですか?
- 12. デフォルトで物理Webが有効になっていないのはなぜですか?
- 13. Xcode 7で「アドレスサニタイザを有効にする」が無効になっているのはなぜですか?
- 14. asp.netチェックボックスが無効になっていないのはなぜですか?
- 15. スクロールアニメーションが無効になっていないのはなぜですか?
- 16. App Makerドライブピッカーの選択ボタンが有効になっていないのはなぜですか?
- 17. なぜCで&(&i)が有効でないのですか?
- 18. デフォルトで行レベルのセキュリティを有効にする方法は?
- 19. Javaですべての暗号スイートがデフォルトで有効になっているのはなぜですか?
- 20. CNMeMが有効になっているのはなぜですか?Theanoでは 'cuDNN not available'ですか?
- 21. メディアクエリで幅が有効にならないのはなぜですか?
- 22. NaNがInt32エラーの有効な値ではないのはなぜですか?
- 23. 私のサイトは有効なSSL証明書を持っていますなぜ私のブラウザはセキュリティで保護されていないと言いますか?
- 24. .gitignoreが有効になっていないようです
- 25. mod_rewriteが有効になっていてもなぜ動作しないのですか?
- 26. ビューではユーザーインタラクションは無効になっていますが、サブビュー(UIButtons)で有効にされています
- 27. このCSSが有効にならないのはなぜですか?
- 28. ハイパージャーコンポーザーのaclファイルが有効にならないのはなぜですか?
- 29. レール4で有効なレールが有効になっています:それは正しいですか?
- 30. gccのオプション "-Wstrict-prototypes"がC++に有効でないのはなぜですか?
テーブルで行レベルのセキュリティを有効にしてから、テーブルの更新可能なビューを使用すると、セキュリティは機能しませんか? – mehmet
いいえ、問合せは現在のロールではなく、ビュー定義のロールを通過するためです。 – Calebmer
次に、ビュー定義ロールで行レベルのセキュリティを設定する方法はありますか。 – mehmet