跳转到内容

管理安全组和分配

PlaidCloud 的安全与访问管理简单明了。成员能否获得访问权限,取决于该成员所关联的分组。添加或更改成员的安全关联非常灵活。

可以添加、更新或删除安全组。

管理安全组:

  1. 打开 Identity
  2. 选择“Security”选项卡
  3. 在下拉菜单中点击“安全组”(这将显示包含现有分组的表单)
  4. 要添加分组,点击“Create Security Group”
  5. 要编辑分组的权限,点击最左侧的图标

管理分组成员:

  1. 打开 Identity
  2. 选择“Security”选项卡
  3. 在下拉菜单中点击“安全组”
  4. 点击成员图标
  5. 将所需成员从“Unassigned Members”列拖到“Assigned Members”列,反向拖动则移除成员

行访问根据某一列的值,限制安全组可以看到表中的哪些行。例如,可以用 region 列限制访问,被授予 East 和 Central 的分组只能看到带有这些值的行。针对某个项目和某一列的所有操作 — 选择列、选择其值的来源,以及决定哪个分组可以看到什么 — 都在同一个屏幕中完成,保存后立即生效。

设置和更改行访问需要项目架构师或租户管理员。其他任何人打开项目的 Security 选项卡时,都会被告知行访问仅限架构师使用,并且下面的入口不会向他们显示。

所有入口打开的都是同一个行访问屏幕:

  • 表资源管理器的工具栏 有一个 行访问 按钮,当表已限制行时会显示徽标。它会打开到表的第一个受限列(如果有),您可以切换到该表的任何其他列。
  • 列的分面菜单 有 按此列限制行…,用于在该列上打开行访问。在已限制行的列上,该项显示为 按此列限制的行 — 编辑…。
  • 项目的 Security 选项卡 列出项目上每个受限列,以及它适用的表、持有授权的分组及其 同步 状态。选择一列即可编辑,或点击 限制某一列… 开始新的限制:先选择表,再选择列。已限制行的列会带有锁形标记。
  • Identity → Member 中成员的 行访问 选项卡,以及 Identity → Security → 安全组 中分组的行访问摘要。打开行访问(或 编辑)会打开所选的列;添加 会在该行所属项目中限制另一列。

在某一列上打开时,屏幕会停留在该列。通过 限制某一列… 或 添加 打开时,则可以自行选择列。

按某一列限制一个表的步骤:

  1. 从上述任一入口打开行访问;如果打开时未指定列,请选择列 — 选择器提供的是表的真实列,而不是自由文本。
  2. 选择 值来源 — 列(表中某列的不同值)、维度(维度的节点)或 列表(您输入的值)。值的类型取决于该列的数据类型。
  3. 针对每个安全组,勾选该分组可以看到的值。网格列出有权访问该项目的分组,以及已对该列持有授权的所有分组。
  4. 将 Everyone else 设置为 sees all rows 或 sees no rows — 这适用于网格中没有任何勾选的所有分组。
  5. 点击 保存。

保存即时生效。PlaidCloud 自身的查询会立即遵循该更改,Superset 仪表板则在大约一分钟内遵循 — 无需单独的应用步骤,也没有审批对话框。屏幕的同步状态会显示更改已推进到哪一步;请参阅保持仪表板同步。

网格还会为您处理这些细节:

  • 大量取值。 值会排序。当某列的值多到无法全部显示时,网格会提示“More values than fit here — type to search.”,筛选框会搜索整列,同时保留分组已持有的每个值。
  • 空值。 一个 空值 — 对每个拥有授权的组可见 复选框决定该列中没有值的行如何处理。勾选后,对该列持有任何授权的每个分组都能看到这些行。
  • 尚未构建的表 会显示 请先构建此表(运行创建它的工作流),而不是一个空列表。
  • 保存会等待屏幕上的值加载完成。 在值加载期间 — 切换值来源、维度或表之后,或应用模板之后 — 保存 处于禁用状态,并显示提示“Save is available once this source’s values load.”如果加载失败,网格会说明情况并要求您重新选择来源;在加载成功之前不会保存任何内容。

限制属于项目上的某个列 名称,而不是某一个表。一旦 region 限制了行,项目中每个带有名为 region 的列的表都会受其过滤,无论是在 PlaidCloud 自身的查询中还是在仪表板中。网格的 Applies to 列表显示这些表。它是只读的,因为由列名决定,而且之后新增的、带有相同列的表在发布后立即受到覆盖。

当项目中没有任何表含有该名称的列时,窗口除了显示 Applies to 0 tables 外,还会警告在有表含有该列之前,该限制不会过滤任何仪表板。向某个表添加该列,或更正列名,警告就会消失。

网格上的 停止限制 会在内联确认后移除限制 — “Stop restricting rows by ‘region’? Every group’s grant on it is removed and everyone sees its rows.”随后行访问会确认“Rows in ‘region’ are no longer restricted.”该列的 Superset 数据集也会随之移除,除非仍有图表在使用它;在这种情况下,行访问会说明数据集会保留,以及有多少个图表在使用它。

列在限制行期间无法被重命名或删除。架构师会被告知先在行访问中停止对它的限制;其他人则会被告知去询问项目架构师。

项目的工作流、步骤和用户定义函数以项目自身的服务身份运行,该身份可以读取每一行。能够更改它们的人,可能会让某个步骤把自己无权访问的行复制到自己可以读取的表中,因此限制项目的行也会限制谁可以更改该项目的行为。项目一旦至少限制了一列:

  • 自动化仅限架构师。 只有项目架构师和租户管理员可以更改工作流、步骤、用户定义函数、计划、工作流变量和项目变量以及通知电子邮件模板 — 并且出于同样的原因,只有他们可以向项目导入工作流包、转换 Alteryx 工作流,或导入、复制、还原到项目中,或更改其连接环境、默认文档账户或 ERP 过账模式。其他所有人仍然可以运行该项目的工作流:开始、停止、恢复 和 运行所选步骤 保持可用。步骤编辑器、工作流的创作控件、UDF 编辑器和计划表单对他们以只读方式打开,并显示一条横幅,指明应联系哪些架构师:“This project restricts rows, so only its Architects can change workflows, steps, UDFs, schedules, variables and notify templates. You can still run them.”
  • 受限列所读取的维度仅限架构师。 决定谁能看到哪些行的维度 — 即受限列的值来源 — 只能由项目架构师或租户管理员以及项目自身的工作流更改。这涵盖添加、移动、重命名、复制、清除、加载和还原其节点,以及维度本身。其他任何人会看到提示“This dimension decides who sees which rows of ‘region’, so only a project Architect can change it.”没有任何限制读取的维度不受影响。
  • 授权来源表仅限架构师。 被绑定为某一列的授权来源的表,其行只能由项目架构师、租户管理员或项目的工作流更改或删除 — 无论是通过数据编辑器、导入、连接器加载还是 API。
  • 复制项目仅限架构师,并且副本会显示“This copy is not row-restricted.” — 在您设置限制之前,新项目不带有任何限制。
  • 还原早期版本与其他更改一样。 还原项目自身的设置或上面列出的维度,需要项目架构师。还原始终作用于该版本所属的项目,因此无法将其指向另一个项目来绕过这一限制 — 请参阅版本历史。
  • 编辑受限表中的数据 需要架构师,详见行访问与数据编辑器。

在项目上限制第一列之前,行访问会告诉您这会影响谁:“Restricting rows here means only Architects can change this project’s workflows, steps, UDFs, schedules and notify templates. N members can change them today; they will still be able to run them.”

运行与之前完全一样地继续工作,包括计划运行,因为它们以项目的服务身份运行。运行产生的内容遵循架构师赋予它的设计:不含受限列的输出表、导出文件、通知电子邮件或日志行,不会针对读取它的人进行过滤。

在运行开始时提供的值。 任何可以运行工作流的人,都可以用自己提供的变量值来启动它 — 应用运行器就是用其表单中的答案来做到这一点的,API 和 AI 工具也可以。这些值仅对该次运行有效:它们不会保存在工作流中,其他任何运行、导出或读取者都看不到它们。由于运行以服务身份执行,这些值可以改变该次运行读取和写入的内容,因此请只把运行工作流的权限授予您信任的人。

不限制行的项目。 这些规则仅在项目限制了某一列之后才生效。在没有任何限制的项目上,任何可以更改项目自动化的人,都可以编写一个步骤或用户定义函数,让它以项目的服务身份运行并更改项目的访问权限,使自己成为项目的架构师之一。这是有意为之:这样的项目并不承诺行隔离。请把那里的创作权限仅限于您会信任为架构师的人,或者限制某一列。

行访问会显示更改在传递到仪表板的路上进行到了哪一步,显示位置在网格中,以及项目 Security 选项卡的 同步 列中:

状态 含义
等待中 更改已保存,正在传递到仪表板。通常在大约一分钟内完成。
正在重试 一次发送失败,正在重试。失败原因显示在状态旁边,并提供 重试 以立即再次发送。
尚未应用 项目的限制尚未发送到仪表板。
已应用 最近一次将限制发送到仪表板的尝试已成功。
与仪表板同步 行访问将仪表板所执行的内容与其将要写入的内容进行了比较,二者一致。
仪表板不一致 仪表板执行的内容与行访问将要写入的不同 — 规则在 Superset 中被更改或删除,或者无法检查某个表的已发布视图。
错误 发送限制失败。原因显示在状态旁边。

更改一旦达到 已应用,网格就会将其与仪表板进行核对,并转为 与仪表板同步 或 仪表板不一致。仪表板不一致 和 错误 都提供 重试,它会再次发送项目的限制。如果完全无法读取状态,网格会显示“Couldn’t check sync status.”

由某个表引起的 错误 会指明该表并说明该怎么做 — 例如,某个表在发布时没有包含其受限列(“Republish or unpublish it.”),或者某个带有受限列的表没有发布,在其发布之前仪表板无法对其进行筛选。状态会一直停留在 错误 并指明未发布的表,直到您发布它,或改为在已发布的表上限制该列。这样的表不会阻碍项目中的其余部分:其他每个表都会保持同步。

仪表板遵循与 PlaidCloud 自身查询相同的授权:

  • 每个带有该列的已发布表都会被筛选,而不仅仅是您设置限制时查看的那个表。
  • 即使其他所有人都能看到所有行,只被授予部分值的分组也会被筛选,适用于每个仪表板数据集已存在的表。
  • 安全组成员变更会自行同步到仪表板。 在 PlaidCloud 中将某人加入或移出分组、停用或删除成员、删除分组,或添加加入您默认安全组的新成员,都会在大约一分钟内更新他们在仪表板中看到的内容,涉及每个向该分组授予值的项目,无需任何人重新打开行访问。在 PlaidCloud 之外做出的成员变更 — 直接在 Keycloak 中,或由单点登录在登录时将某人放入分组 — 会在大约 15 分钟内同步到仪表板,无需保存或重试任何内容。

当 维度 作为值来源时,勾选一个节点即可授予其下的所有内容。授权会跟随维度:添加到已勾选节点下的成员,会在维度保存后的下一次同步时授予该分组;从其下移出或被移除的成员则不再被授予 — 无需任何人重新打开网格。重新打开时,您勾选过的节点会再次显示为已勾选。

取消勾选已勾选节点下的任何内容,会同时取消勾选该节点,此时分组只保留仍被勾选的成员。再次勾选该成员不会重新勾选节点 — 请点击节点自身的复选框。粘贴、全选 和 反选 勾选的是成员,绝不会勾选节点。

名称无法用作行访问值的维度成员,会在保存时被拒绝,并指明该成员。如果这样的成员稍后才出现,其行不会授予任何人,同步状态会指明该成员:“Dimension ‘…’ member ‘…’ cannot be used as a row access value, so its rows are not granted. Rename it in the dimension.”

除了手动勾选值,您还可以让受限列指向一个已经包含答案的源表 — 每行对应一个分组及其可以看到的值。先在网格中限制该列,然后添加一个 设置行访问权限工作流步骤,指定列、源表,以及源表的分组列和值列。该步骤首次运行时会将该列绑定到该表:该列手动设置的授权会被清除,授权改为根据该表的行来设置。

一旦绑定,该列即为 源所有:行访问网格会将其显示为锁定状态,并带有指明源表的徽标,在您点击 移除绑定 之前,手动编辑其授权会被拒绝。

该步骤之后的每次运行都会重新读取源表并重新应用授权 — 请将其计划在加载或刷新该表的工作流之后,在源数据中添加、移除或重新分配的分组,会在下一次运行时同步到行访问,无需任何人手动编辑网格。

由于源表决定了谁能看到什么,只有项目架构师、租户管理员或项目自身的工作流可以更改其行或删除它。其他任何人会看到提示“This table supplies the row access grants for ‘region’, so only a project Architect can change its rows or delete it.”

如果您构建了一种希望重复使用的限制形态 — 相同的值来源、值类型和空值设置 — 只需保存一次,即可在需要的地方应用,而不必逐列重新构建。

  • 在已打开的行访问屏幕中,另存为模板… 会将当前列的形态保存为具名的租户级模板。它只保存形态 — 不会附带任何授权。
  • 在另一个项目的列上使用 应用模板,会以模板的形态作为该列的起点,每个分组的授权均为空,等待您填写。

任何项目架构师都可以保存和应用模板。重命名(重命名…)和删除(删除)模板需要租户管理员,因为模板在整个租户内共享。删除模板不会影响已应用该模板的列,它们仍保持原有的限制。

列也可以从您的身份提供商而不是 PlaidCloud 获取授权。项目架构师通过在行访问中启用 Accept row-access grants from SSO group attributes,让某一列选择采用这种方式。

启用后,安全组的 Keycloak 属性 row_access.<column> 会设置该分组通过该列可以看到的值 — 在 Keycloak 中为分组设置该属性,PlaidCloud 就会为任何已有项目访问权限的分组自动采用它。无需在行访问本身中再做任何配置,并且授权会在 PlaidCloud 自身的查询和 Superset 仪表板中保持同步。

行访问会在您提交之前告诉您更改的含义:

  • 预览身份… 页脚会显示某个分组能看到该表总行数中的多少行,并附带这些行的示例 — 在网格中选择任意分组即可预览。保存后预览会刷新。
  • 保存之前,行访问会就任何值得再看一眼的情况发出警告:没有勾选任何内容的分组,以及根据您的 Everyone else 设置,这意味着它能看到所有行还是看不到任何行;拥有项目访问权限但未被任何分组的授权覆盖的成员;或者该列值为空 (NULL) 且未授予任何分组的行。

只要受限成员按名称读取表,他们就只能得到自己的行 — 表资源管理器的网格、列分面和下载、表下载对话框、以查看者身份读取的应用和工具,以及仪表板。当您正在查看的网格已按您的授权过滤时,表资源管理器会在其工具栏中显示 行数受您的访问权限限制,开始一次将被过滤的下载时会提示“Rows limited by your access.”读取所有行的架构师则看不到这两种提示。

行访问通过过滤其所针对的表,来限制分组可以看到哪些行。而自己编写的查询没有可附加该过滤的单个表 — 查询可以联接、合并或嵌套任意多个表 — 因此在限制行的项目上,PlaidCloud 会拒绝运行由调用方提供的查询,而不是返回未经审核的行。

这适用于通过您自己的 SQL 读取、将您自己的 SQL 的结果导出到文件或另一个数据库,以及在展开步骤的“Test row 1”预览中输入行条件。它 不 适用于按名称读取表,这是应用和工具读取数据的常规方式 — 它们会应用授权,并返回查看者有权看到的行。写成单个表的普通查询的列分面也是按名称读取的,因此它返回的是成员自己的值,而不会被拒绝。

被拒绝的人会被告知是哪个项目,并被引导使用按名称读取的方式。项目架构师可以按原样运行该查询,并以任何格式导出其结果,因为架构师本来就可以授予自己每个受限列的所有值。

导入电子表格本身并不算您自己编写的查询 — 普通的文件导入根本不读取任何受限数据,它只是根据您上传的文件创建项目自己的新表,因此不受行访问影响。例外是数据投影由调用方提供的导入:逐列表达式或动态 Excel 映射。在交互式导入屏幕上,这些会与上述自由格式 SQL 的场景一样被拒绝,需要项目架构师,因为调用方提供的投影可能读取另一个表。从工作流运行的导入则两种情况都不受影响,因为它以项目自身的服务身份运行。

数据编辑器直接读取和写入表,因此行访问在两侧都适用。

在数据编辑器中打开受限表时,只显示您的安全组被授予的行 — 与在仪表板中跟随您的过滤相同,即使受限列不是网格中显示的列之一,它也同样适用。

保存您的编辑需要项目的 架构师 权限。保存会整体替换表的行,而不是读取它们,并且不会逐行过滤,因此在受限表上编辑数据被视为创作操作而不是读取:没有架构师权限的人会被告知需要该权限。不含受限列的表照常编辑,不限制行的项目也是如此。

表的行数和存储大小描述的是整个表,而不是您可以看到的行,因此它们会告诉受限读取者在其授权之外还存在多少行。在限制行的项目上,凡是读取被过滤的人,都看不到该项目任何表的行数或大小 — 无论是在表列表、搜索、表详细信息和快照中,还是通过 AI 助手以及经由 MCP 连接的 AI 工具。这涵盖项目中的每个表,包括没有受限列的表。项目自身的总计也对他们隐藏 — 主页、项目列表和搜索以及项目详细信息中的总行数和大小。

工作流运行历史也同样如此。每次运行和每个步骤所记录的读取和写入行数,同样描述的是整个表,因此对于相同的读取者,这些数字会留空 — 在工作流和步骤的运行历史中,以及通过 AI 助手和经由 MCP 连接的 AI 工具。对他们而言,Weave 不会检查步骤的行数或空值是否与之前的运行不同,因为这样的发现项本身就会告诉他们整个表的数量已发生变化。

项目架构师照常看到这些数字,不限制行的项目上的所有人也一样。

要检查某个具体的人能看到什么,而不是某个分组被授予了什么:打开 Identity → Member,选择该成员,并打开其 行访问 选项卡。其 有效访问权限 列针对每个受限项目和列,列出该成员通过其所有分组合并后看到的值 — 包括来自 SSO 分组属性的授权,以及分组授权包含的空值 (NULL) 行。项目架构师显示为 可查看所有行(架构师),因为架构师读取每一行。这与 PlaidCloud 自身的查询所应用的结果相同,因此有助于支持工作,也有助于在有人报告问题之前确认某项更改达到了您的预期。

当行访问阻止某项操作时 — 例如在限制行的项目上执行您自己编写的查询、未获架构师权限的编辑、对自动化、维度或授权来源表的更改,以及上述其他情形 — 消息会指明受到了什么限制以及下一步该怎么做(例如应联系哪些架构师),而不是笼统的失败提示。

限制或取消限制某一列,以及编辑分组的授权,都会在该项目的项目日志中写入一条记录 — 包括谁做了更改以及何时更改。在项目上打开 Analyze → Projects → Log 即可查看。无需启用行访问的任何功能即可获得此记录;它的记录方式与项目上其他所有被跟踪的更改相同。

为了减少添加新成员所需的时间,可以指定一组默认安全组。这为新成员提供了一组基线安全组,而无需手动逐个分配。添加新安全组时,如果勾选安全组窗口底部写着“Assign to New Users by Default”的复选框,即可使用该设置。

安全审计功能可以查看所有成员和分组之间的分组成员关系。

执行安全审计:

  1. 打开 Identity
  2. 选择“Security”选项卡
  3. 在下拉菜单中点击“Security Group Audit”

由于 PlaidCloud 中的所有表都可以导出为 CSV 文件格式,因此分组与成员的关联可以在 PlaidCloud 之外查看,既可用于留存历史记录,也可以只是离线随便看看。

从“Security Group Audit”表单导出:

  1. 打开 Identity
  2. 选择“Security”选项卡
  3. 在下拉菜单中点击“Security Group Audit”
  4. 点击表中“Username”最右侧的小图标
  5. 根据您的偏好,点击“Export CSV”或“Export XLXS”

工作区中使用的每个应用程序都有其特定的可用权限。安全组权限基于这些应用程序权限。

每个应用程序的完整可用权限列表可从 Security Bin 中查看。

访问 Security Bin:

  1. 打开 Identity
  2. 选择“Security”
  3. 在下拉菜单中点击“Security Bins”

要查看每个应用程序的详细安全设置,请选择最左侧的标签图标。

这些可用安全设置信息仅供参考。有关管理权限的详细信息,请参阅上文的“管理安全组”部分。