Postgresql
如何根據 IP 地址授予對視圖的選擇…?
我想知道是否可以允許客戶端 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 ...
不過,整個想法相當可疑。正確的方法是使用不同的角色和不同的視圖,僅授予特權角色。