Metabase学习教程:系统管理-11 数据沙盒
-
数据沙盒:设置行级别权限
了解如何使用Metabase的数据沙盒功能设置行级别权限。
Metabase商业版本包括数据沙盒,这一功能使您能够精确控制人们可以访问的数据,从整个数据库到特定的数据库列和行。
“沙盒”通常指创建一个用于保护或隔离系统的一部分的隔离环境。Metabase以类似的方式使用术语沙盒,但在本例中,独立环境指的是“数据环境”。当管理员授予组沙盒访问表的权限时,他们只能看到沙盒中包含的行和列。
在本文中,我们将介绍一个包括在Metabase中使用的示例数据库。数据沙盒可以限制对列和行的访问。我们将在本文中介绍行级别的权限;有关列级权限,请参阅高级数据沙盒.
在使用沙盒之前
你应该退后您的Metabase应用程序数据。此外,您还可以查看我们的数据权限指南,收藏权限指南,以及我们的权限概述为了更好地了解沙盒如何与Metabase的权限系统相适应。
我们的设想
我们的目标是确保客户Brown女士只能看到与其帐户相关的表行。
创建客户组
Metabase使用组来组织权限,因此我们首先需要创建组,我们称之为顾客。要执行此操作,请单击齿轮图标在导航侧栏中,选择>管理员设置>用户>组。然后选择创建组.
图1。创建客户组后的“组”页。
创建帐户并添加属性
在为Customers组设置沙盒权限之前,我们需要创建帐户给Brown女士,她的账户加上属性。从管理员设置>人,我们点击邀请某人,填写姓名和电子邮件字段,并将她添加到客户组。
这里是沙盒的重要部分:我们将为我们的新人Brown女士添加一个属性,其键为user_id值20.
图2.将Brown女士添加到客户组,并赋予她一个属性:user_id:20。
没有什么神奇的user_id凯:这只是一个变量。我们可以使用我们选择的任何键值对添加属性。我们想要的是对要沙盒的相关表使用与列对应的键和与行值相对应的值。我们的想法是将这个属性链接到表中的一列,以确定Brown女士可以查看哪些行。
出于本演练的目的,我们手动设置此属性,但我们可以使用单一登录服务(SSO),比如SAML以编程方式向用户分配和同步属性。
授予组沙盒访问权限
现在我们有了我们的小组,而且至少有一个小组成员有一个属性(Brown女士),我们准备前往数据权限页授予客户组沙盒访问示例数据库中表的权限。
在左侧边栏中,我们将单击数据库和示例数据库。授予客户组沙盒访问命令表,我们只需点击命令表,导航到Customers行并选择沙盒从下拉菜单。
图3。正在授予对Orders表的客户组的沙盒访问权限。
这个沙盒模式将询问“您希望如何为该组中的用户筛选此表?”并提供两种选择:
• 过滤器按表中的一列。
• 使用保存的问题为该表创建自定义视图。
现在,我们将设置为按表中的列筛选-使用保存的问题是一个更高级的功能,我们将对此进行讨论在这里.
图4. 沙盒模式.
对于列,我们将选择user_id的列命令表,然后我们将其连接到user_id属性从我们分配给人的属性的下拉菜单。
Metabase将为我们提供所做更改的摘要:“客户中的用户可以查看Orders桌子在哪里user_id字段等于user_id “让我们保存我们的更改并为人表。
• 为的客户组授予沙盒访问权限People表。
• 选择按列筛选选项。
• 选择ID的列人把它连接到user_id属性。
• 查看摘要并单击“保存”。
最后,我们需要单击保存更改按钮确认我们的更改。
检查设置,因为Brown女士看到了世界
现在让我们测试一下我们的设置,以确认我们的客户Brown女士只能看到与她的用户ID相关的订单。我们将在匿名浏览器窗口中打开Metabase实例,并以Brown女士的身份登录。当我们导航到Orders表,Brown女士只能看到她下的订单(用户ID 20)。
图5Brown女士只能看到与她ID20相关的订单。
通过沙盒化表格,我们可以创建一个问题或仪表板,请放心,具有沙盒访问该数据的用户将只能看到与其帐户关联的数据。
如果我们将沙盒与完整应用嵌入,我们可以将这些仪表板嵌入到我们的应用程序中,并使用SSO将属性传递给嵌入的Metabase实例,从而允许我们提供对嵌入在应用程序中的问题和仪表板的沙盒访问。要了解更多信息,请参见如何在应用程序中嵌入Metabase以提供多租户、自助服务分析.
沙盒限制
• 沙盒仅适用于SQL数据库。
• 一个用户每个表只能有一个沙盒,因此只能将用户添加到具有沙盒访问权限的单个组中。
• 如果一个组具有对数据库的SQL查询访问权限,则沙盒无法阻止该组中的人员查看这些表中的数据。
• 通过扩展,如果该组中的人员可以访问用SQL编写的问题,那么这些问题将不知道沙盒访问权限,并将向该组中的人员显示所有结果,而不仅仅是该组沙盒中的结果。
进一步了解数据沙盒的局限性.高级数据沙盒:限制对列的访问
了解如何使用已保存的SQL查询对表进行沙盒处理,并根据用户属性限制用户可以查看的列。
我们的文章行权限涵盖了沙盒(商业版本). 我们将沙盒定义为一种根据用户身份指定用户可以访问哪些数据的方法,并向您展示了如何限制对表行的访问。例如,我们创建了一个用户Brown女士,并让她访问People和Orders和她相配的数据表user_id属性。
在本文中,我们将介绍如何对Products限制表Brown女士可以看的行和列。在这种情况下,我们希望Brown女士:
• 只在Products表。
• 只看到Title, Category, 和 Price列(而不是任何其他列)。
计划
我们要:- 创建只有管理员才能访问的集合。
- 创建新的SQL查询。这个Products表不包含有关用户的信息。所以为了限制Brown女士接触Products我们得查一下Brown女士订了哪些产品。我们会写一个SQL语言从中组合数据的查询Products表中的数据来自Orders表。在组合这些表时,我们将创建一个只包含所需列的新表格结果。
- 沙盒Products表中显示查询结果,而不是Brown女士的原始表。
- 通过验证Brown女士能看到的数据来确认我们的沙盒。
创建仅由管理员访问的集合
我们要创建一个集合存储将用于沙盒此表的SQL查询。就这么说吧沙盒问题并设置此集合的权限,以便只有管理员可以管理其问题。这样,非管理员就无法修改问题和更改沙盒的“维度”,例如通过包含Brown女士不应该看到的列。看到了吗集合权限了解有关设置权限的详细信息。
创建SQL查询
在顶部栏中,单击+新的>SQL查询到询问SQL问题。选择示例数据库包括在元数据库中。
下面是要粘贴到编辑器中的查询:
SELECT DISTINCT PRODUCTS.TITLE,
PRODUCTS.CATEGORY,
PRODUCTS.PRICE
FROM PRODUCTS
LEFT JOIN ORDERS ON ORDERS.PRODUCT_ID=PRODUCTS.ID
[[WHERE ORDERS.USER_ID IN ({{sandbox}})]]
查询的作用如下:
• 返回包含来自的列的结果Products表格:Title,Category, 和 Price.
• 检查产品是否不同,即每个产品只有一行。
• 可选过滤器此列表仅显示沙盒用户订购的产品。
双方括号[[…]]周围WHERE子句使子句成为可选的。双大括号{{sandbox}}定义变量。我们用这个{{sandbox}}在沙盒中处理此问题时变量。
让我们运行查询,结果如下:
图1.SQL查询以创建新表。
现在我们把这个问题另存为订单中的产品,存储在沙盒问题我们创建的集合,并选择不将问题添加到仪表板.
这里需要重申一点:我们只从Products表,因为我们的查询应该只返回要沙盒的表中的列。
使用我们保存的问题对Products表进行沙盒处理
现在我们已经创建了订单中的产品问题,是时候把Products表。我们将设置沙盒,以便元数据库插入user_id我们在关于行权限进入{{sandbox}}我们保存的SQL问题中的变量,订单中的产品.
我们点击齿轮图标,选择管理员设置,然后单击权限标签。在左边,下面数据库,我们将单击示例数据库和Products因为Brown女士是客户组的成员,而且是元数据库的成员向组授予数据权限,而不是个人,我们将授予客户沙盒访问Products表。
图2。授予客户组沙盒访问Products表。
当Metabase弹出沙盒模式,在“您希望如何筛选此表以供此组使用?”节中,我们将选择第二个过滤器选项:“使用保存的问题创建此表的自定义视图。”
我们将只导航到管理员沙盒问题收集并选择我们的问题,订单中的产品.为参数或变量,我们将选择SQL查询中包含的变量,{{sandbox}}.为了用户属性,我们将选择user_id.
图3. 沙盒模式总结了我们选择的效果。
我们的总结是:
• 客户群中的人员
• 可以查看订单中的产品问题
• 在哪里沙盒变量的值等于user_id
让我们点击保存在模态中,然后单击保存更改在公告栏里。
以沙盒用户身份检查设置
让我们看看我们的沙盒Products从Brown女士的角度看,这张桌子很像。打开一个私人浏览器窗口,导航到我们的元数据库,然后以Brown女士的身份登录。
当我们打开Products使用数据浏览器,我们可以确认,Brown女士只能看到她订购的产品的列表,并且只有我们保存的三列订单中的产品问题:Title,Category, 和 Price.
图4. ProductsMetabase主页上的表格只显示了Brown女士订购的产品。
如果Brown女士问的问题Products表,她仍然只能看到基于她订购的产品的结果。如果她可以访问包含沙盒外部列的问题,她将看到一个错误。
在对表进行沙盒处理时,更喜欢使用SQL问题
当我们可以使用GUI问题为了沙盒化一个表,我们建议改用SQL问题。在后台,自定义问题基于过滤器,摘要,和加入在我们的定制问题中。当我们基于一个定制问题进行沙盒测试时,我们可能没有意识到我们提供给人们访问的信息的全部范围。
或者,我们可以使用查询编辑器创建一个自定义问题,然后在引擎盖下查看SQL代码元数据库将运行。在笔记本编辑器中,我们可以单击查看SQL按钮,以确认元数据库包含正确的表和列,而不包含其他内容。
扼要重述
当用沙盒回答问题时:
• 更喜欢SQL查询.
• 确保保存的问题只返回要沙盒的表中的列。
• 将沙盒问题保存在非管理员无法访问的集合中,最好是专门用于沙盒问题的集合。