Postgresql

如何根據 IP 地址授予對視圖的選擇…?

  • August 5, 2014

我想知道是否可以允許客戶端 A 在視圖中“查看”某些數據,同時允許任何其他客戶端(即 B 和 C)從同一視圖查看所有數據。

A、B 和 C 之間的區別取決於它們的 IP 地址。

您可以使用會話資訊功能inet_client_addr(),但范圍有限。它報告伺服器正在接收目前連接的 IP。不過,這僅對直接連接到數據庫有用。

作為概念證明:

SELECT CASE WHEN inet_client_addr() << '192.168.1.32/30'::inet
        THEN 'foo'
        ELSE 'bar'
      END AS odd_column

<<..“包含在”運算符中。

正如@Craig 在評論中提到的,考慮這樣security_barrier的視圖選項:

CREATE VIEW my_odd_view WITH (security_barrier) AS ...

此處此處的手冊中的詳細資訊。

不過,整個想法相當可疑。正確的方法是使用不同的角色和不同的視圖,僅授予特權角色。

引用自:https://dba.stackexchange.com/questions/61394