我有一个多租户应用程序。因此,单个数据库包含所有使用该数据库的组织的数据。
有没有办法提供对数据库的访问权限,以便我的客户可以使用任何分析工具(例如 Power BI)连接到它。
有 Org 表 - 我可以在其中指定他们可以获取的该表的 PK。
然后是 Event 表,它有一个到 Org 表的 FK。
然后是注册(到事件)表,其中包含指向事件的 FK 和指向用户的 FK。
最困难的是用户表。如果用户注册了活动,那么该客户就可以获取该用户。这意味着多个客户可以看到该用户表行。
这是专门针对 SQL Server 的。因此,我需要制作一些视图来确定给定用户可以查看哪些用户记录。虽然我可以在 Event 表中复制 Ord PK,但用户记录(因为多个客户可以获得它)无法与添加的 FK 一起使用。
有办法吗?
您应该提供
CREATE
表格的脚本和一些示例数据,以便更轻松地概念化数据库结构。此外,从安全角度来看,为每个租户实现一个单独的数据库通常是更好的做法。但抛开所有这些,您的用例适合SQL Server中行级安全功能的模型:
使用行级安全性,您可以创建一个表值函数来应用基于
Org
表的过滤逻辑(最有可能),然后创建一个安全策略以将该函数应用于所有表。这样可以抽象出安全逻辑,因此您不必手动为每个对象实现它(例如,包装在每个对象的视图中),并将代码折射到一个位置。行级安全性还可用于定义策略,阻止哪些用户可以针对特定表运行哪些数据操作查询。
行级安全性并不能替代安全性方面的最佳实践。它只是增加了一层额外的保护,可以根据您根据最终用户定义的相关标准提供自动数据过滤逻辑。