对字段/表进行Postgresql访问限制以供选择

时间:2011-04-10 17:50:45

标签: sql postgresql

我正在考虑使用postgresql / postgis进行空间研究。我有一个包含数据的表和一个包含坐标的表。仅“数据”并不敏感。但由于最终用户很容易确定案件的身份,一旦与坐标相结合,“数据”就非常敏感。

我目前使用postgis函数进行空间查询,并将结果返回给R进行统计分析。

使用postgresql可以限制对特定字段的访问,以便最终用户可以使用字段(坐标)并从空间查询中获取结果。但是无法通过select语句直接返回/导出字段(坐标)。

4 个答案:

答案 0 :(得分:3)

从8.4开始,您可以使用列级权限来“锁定”用户,使其无法像使用视图或存储函数那样选择特定列。

http://andreas.scherbaum.la/blog/archives/577-PostgreSQL-8.4-Column-Permissions.html

答案 1 :(得分:1)

您可以通过创建仅包含允许用户查看的列的视图来隐藏最终用户的列,然后从基础表中撤消SELECT权限。

但是没有办法阻止用户通过运行SELECT语句来本地保存(导出)他/她获得的数据。

答案 2 :(得分:0)

可以使用SECURITY DEFINER功能。

撤消所有用户的表格选择权限。创建一个SECURITY DEFINER函数,该函数由表所有者拥有,并且只返回session_user兴趣的数据。

但请记住write SECURITY DEFINER Functions Safely

答案 3 :(得分:0)

尽管上述解决方案各有千秋,但我要强调creating a view的优势。

您可以在视图上授予特定的用户或角色权限,但不能在视图所基于的表上授予特定的用户或角色权限,从而使您可以准确确定他们可以访问哪些表的列以及可以执行哪些操作。

您的视图可以在用户看到数据之前对其进行汇总和合并。您还可以定义“计算列”,以已知(且希望不可逆)的方式转换数据,以保留敏感数据的完整性,并仍然为用户提供所需信息的访问权限。

注意事项:由于不了解PostgreSQL的GIS功能,由于我不了解,因此该解决方案可能会被排除在外。

我不知道有什么会阻止用户使用他们想要的从关系数据库中获取的数据,因此您无法在数据库内部限制继续使用所传递的数据。