如何在PostgreSQL中实现ACL

4
我的数据库里有两个模型:Business 和 Brand。每个 Business 都可以访问多个品牌,例如读取、更新和删除等操作。
我不确定实现访问控制的最佳方法是什么。目前,我创建了一个连接表,并添加了一些字段:business_idbrand_idcan_readcan_updatecan_delete,每当执行某些操作时,我都会检查这个表。
但是,我意识到这种方法是在应用程序层面上进行的,而不是在数据库层面上进行的。
我的问题是,是否有一种方法可以在数据库层面上实现这样的访问控制?
我已经在 Google 上搜索了“Postgresql 中的 ACL”,但结果都是关于数据库本身的帐户,而不是它存储的数据。
请帮忙!

1
PG的哪个版本? - Neil McGuigan
当时你想出了什么解决方案? - aggsol
2个回答

0
您可能需要考虑行级安全策略。这是 PostgreSQL v9.5 中的新功能。
更多信息请参见 行安全策略

1
这是针对数据库用户的。OP正在询问如何在SQL级别上建模业务逻辑。 - Lee Benson
1
是的,行级安全策略是在SQL层面上定义的。OP已经有一张表来定义每个用户的规则(can_read, can_update, can_delete),现在他需要一种方式来在数据库内执行这些规则(而不是在应用逻辑中执行规则)。这就是行级安全策略的作用 - 在数据库内执行规则。 - korry
您可以使用行安全策略来实现业务逻辑,只需将用户ID设置为连接参数,安全函数即可使用此参数进行决策。 - Mathieu

-4

你的起点应该是Postgres中的grant命令。
我通常建议允许/授权每个业务只能访问特定视图及其相关数据。
表格应该只能由管理员访问。


也许我没有清楚地表达我的问题。GRANT是将特权授予数据库用户,但我想控制对数据库记录的访问。毕竟,我不能为数据库中存储的10000个业务记录创建10000个数据库用户。 - HanXu
您有一个数据库和一组表格。 每个业务都有一个特定的DB用户,并且将访问其自己的视图集,这些视图是为每个业务过滤的表格。 - weismat
OP正在询问如何在SQL中建模业务逻辑权限,而不是如何限制对任何数据库对象的访问。 - Lee Benson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接