Stephan Asked: 2014-03-21 13:30:47 +0800 CST2014-03-21 13:30:47 +0800 CST 2014-03-21 13:30:47 +0800 CST 如何授予对视图的选择...基于 IP 地址? 772 我想知道是否有可能允许客户端 A 在视图中“查看”某些数据,同时允许任何其他客户端(即 B 和 C)从同一视图查看所有数据。 A、B 和 C 之间的区别将取决于它们的 IP 地址。 postgresql view 1 个回答 Voted Best Answer Erwin Brandstetter 2014-03-21T16:35:23+08:002014-03-21T16:35:23+08:00 您可以使用会话信息功能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 ... 此处和此处手册中的详细信息。 不过,整个想法相当可疑。正确的方法是使用不同的角色和不同的视图,只为特权角色授予权限。
您可以使用会话信息功能
inet_client_addr()
,但范围有限。它报告服务器从中接收当前连接的 IP。不过,这仅对直接连接到数据库有用。作为概念证明:
<<
..“包含在”运算符中。正如@Craig 在评论中提到的那样,考虑这样
security_barrier
一个视图的选项:此处和此处手册中的详细信息。
不过,整个想法相当可疑。正确的方法是使用不同的角色和不同的视图,只为特权角色授予权限。