学习目标
完成本单元后,您将能够:
- 列举Apex元数据API强制执行安全性的几种方式。
- 解释负责任地使用Apex元数据API的注意事项。
为什么要信任Apex元数据API?
正如您所看到的,Apex元数据API使您能够自动更改组织的配置。但是改变一个组织的结构会对该组织中的数据产生安全影响。如果未经授权的应用修改您的组织,该怎么办?我们不会让你们陷入悬念 – 那不可能发生!信任是Salesforce的头号价值,Apex元数据API的构建是一个值得信赖的接口。
Apex Metadata API的三项功能可以保护您的组织和数据。
- 对可以创建或修改的元数据类型的限制。
- 对可以部署更改的应用程序的限制。
- 跟踪元数据更改的详细审计历史记录。
通过这些功能,您可以“信任但可以验证”。前两个功能让您信任使用Apex Metadata API的应用程序的功能。第三个功能可以让你验证应用程序的行为。让我们看看这些功能是如何工作的。
信任安全的元数据类型
为了确保安全性,Salesforce限制了可以使用Apex Metadata API创建或修改的元数据类型。 Apex元数据API的初始版本允许您使用两种元数据类型:页面布局和自定义元数据类型的记录。尽管我们打算在将来支持更多的元数据类型,但我们不会在Apex中公开整个Metadata API。这种谨慎的支持元数据的方法可以确保已安装的软件包只能使用安全的元数据类型,可以以可预见的方式进行修改。
Salesforce也不允许通过Apex创建Apex类,Visualforce页面或Lightning组件。正如您可以想象的那样,如果托管包可以在订户组织中编写代码,Salesforce将难以强制执行包的安全性。另外,为了确保已安装的应用程序仅以可预测的方式修改元数据类型,Salesforce不支持自动生成代码。
保护您的组织免受未知应用程序的侵害
除了限制可以创建或修改的元数据类型外,Salesforce还限制哪些软件包可以通过Apex部署元数据。 Apex元数据API只能在三种情况下执行部署:
- 从由已知的,已注册的独立软件供应商提供的认证管理软件包。
- 从未经认证的托管软件包,但只有订户组织启用特定的Apex设置时,我们将在稍后讨论。
- 来自非托管包,这意味着代码由执行它的组织拥有。
感觉更好?这些限制可确保部署来自可信实体。
通过启用此设置,ISV可以测试尚未认证的托管软件包,企业可以使用托管软件包来测试或更新其应用程序。但只要您的组织关闭,您可以放心,没有未经认证的软件包可以修改您的组织。
下表显示了此设置如何控制不同软件包类型的部署。
认证 | 未认证 | 非托管 | |
---|---|---|---|
Deploy Metadata Apex设置 on | Yes | Yes | Yes |
Deploy Metadata Apex设置 off | Yes | No | Yes |
Audit包行为
您可以在安装程序审计跟踪日志中验证受管软件包的行为。在日志中跟踪使用Apex元数据API的所有元数据操作。记录执行部署的代码的名称空间,这意味着您始终知道哪个名称空间进行了更改以及何时进行了更改。安装程序审计跟踪日志位于
.负责任地使用你的大力量
我们已经看到Salesforce如何通过以下方式确保Apex元数据API是可信的界面:
- 限制可以修改的元数据的类型。
- 控制有权访问元数据的包的类型。
但是在这些约束条件下运行的托管包可以在其自己的名称空间外修改元数据。所以,作为一名开发人员,还有一些需要了解的事情,以便您可以负责任地修改元数据。
托管Apex以与非托管Apex相同的方式操作订户组织中的元数据,但有两个例外:
- 安装程序审计跟踪日志包括托管包的名称空间,因此您可以跟踪这些更改。
- 托管包中受保护的元数据可以通过相同名称空间中的Apex代码访问,但是对于订户组织或其他名称空间不可见。
由托管包的Apex创建的所有元数据都是在订户名称空间中创建的。您可以将托管包视为在订户组织上创建元数据。下表显示了托管包,订阅者组织或其他托管包的名称空间如何访问元数据。
我的名字空间 | 订阅者命名空间 | 一个不同的托管包 | |
---|---|---|---|
开发者控制的公共元数据 | 读取 | 创建,读取,更新 | 读取 |
开发人员控制的受保护元数 | 读取 | 无权访问 | 无权访问 |
用户控制的公共元数据 | 创建,读取,更新 | 创建,读取,更新 | 创建,读取,更新 |
用户控制的受保护的元数据 | 创建,读取,更新 | 无权访问 | 无权访问 |
在处理Apex中的元数据时请记住以下几点。托管软件包的Apex可以:
- 更新任何公共订户控制的元数据,不管它在同一个包,订户组织还是不同的托管包中。
- 更新受保护的用户控制的元数据在其自己的名称空间。这种访问受保护元数据的功能使得Apex Metadata API成为保护更多应用程序的绝佳工具。您可以将您的应用程序配置隐藏为受保护的元数据,并仍然使用Apex操纵它们。
- 只有在订阅者组织的名称空间中更新开发人员控制的元数据。例如,如果托管包中的Apex创建自定义元数据类型的记录,则该记录位于订户名称空间中。托管软件包中的代码可以更新任何字段。
托管包的Apex无法更新包含在其自己的包中的开发人员控制的记录字段,即使它们位于相同的名称空间中。该元数据只能通过软件包升级进行更新。
还是和我们一起?别担心,不会有测验。哦,等等,这是Trailhead,会有一个测验!
什么是元数据API权限?
元数据API本身增加了一层信任。 Apex元数据API部署始终尊重元数据API权限。虽然您可以编写允许最终用户排入部署的Apex代码,但如果用户没有正确的Metadata API权限,则该部署将失败。
相比之下,从Apex元数据API检索调用可以让您的应用程序已经授权访问的任何用户。随着更多的元数据类型在Apex中公开,检索调用可以方便地提供对请求中不可用信息的读取访问。
对于独立软件供应商:准备您的安全审查
如果您是ISV的开发人员,则在使用Apex元数据API时,请记住以下几点:
- 要通过安全审查,您必须包含通知,让客户知道应用程序可以修改其元数据。
- 测试未经认证的托管软件包时,必须在订户组织中启用“Apex部署元数据”设置。
- 只支持页面布局和自定义元数据类型的记录。
- 删除不受支持。
结论
您现在了解了Apex元数据API如何使您能够为多种类型的元数据更改构建自动化。您可以使用Apex的强大功能创建脚本并设置更新元数据的体验。我们只是抓住了Apex元数据API可以做的事情的表面,我们希望用Apex元数据API来构建伟大的事物。请访问我们的Trailblazer社区的Apex Metadata API Chatter小组。