保护应用模型数据

作为应用安全的核心部分,您可以通过访问权限控制来保护应用收集和使用的数据。即使应用未包含个人身份信息 (PII) 等敏感或机密数据,如果用户的帐号被盗用,联系信息或其他组织数据也可能会受到威胁。

保护模型数据:

  • 设置访问权限控制,指定谁可以创建、加载、保存和删除记录。默认情况下,只有具有 Admin 角色的成员才能访问模型数据。您必须为所有其他的应用用户明确授予对模型数据的访问权限。
  • 将访问权限控制写入用于修改数据记录的服务器脚本。应用制作工具不会检查服务器脚本操作的模型权限。
  • 使用您为关系设置的访问权限控制来保护关联记录。
  • 请不要依赖界面访问权限控制或客户端脚本来保护您的应用数据。客户端脚本本身并不安全。
  • 限制谁拥有应用项目文件的修改权限,因为这些用户可以修改脚本和页面中的权限。

这些访问权限控制限制了用户可以在应用界面上执行的操作,但并不限制服务器脚本。

控制谁可以处理记录

针对应用中需要数据安全的模型,请指定哪些用户可以创建、加载、保存和删除记录。您可以为模型的所有操作或单独的每项操作设置访问权限(Admins Only、Everyone、Roles、Script 或 Owner)。

例如,您为自己的组织开发了一个人力资源 (HR) 应用。您可以允许以下操作:

  • 所有员工都可以搜索其他员工的联系信息。
  • 只有员工本人或人力资源管理员才能查看和修改该员工的个人信息。
  • 只有人力资源部门的经理可以创建、修改和删除员工记录。

访问权限可以限制用户通过绑定和客户端脚本对记录的访问,但无法限制通过服务器脚本对记录的访问。

即使安全设置不允许任何人访问,应用管理员也始终可以访问所有记录。

为所有记录操作设置相同的访问权限

当相同权限适用于所有记录操作时,您可以设置一个权限。

  1. 依次打开应用制作工具和您的应用。
  2. 在左侧边栏中,点击要为其设置权限的模型。
  3. 转到 Security 标签页。
  4. 清除 Advanced 复选框。
  5. Model Permissions 下,选择访问权限。
  6. 为角色、脚本和所有者提供更多信息:

    • 角色 - 针对每个角色点击 Add Role,然后从列表中选择一个现有角色。如果需要创建新角色,您也可以点击 Manage Roles
    • 脚本 - 在脚本编辑器中,输入或粘贴服务器授权脚本。
    • 所有者或角色 - 从绑定选择器中选择与记录所有者的电子邮件对应的字段。此选项要求模型中的某个字段包含所有者的电子邮件地址。详细了解 Owner 角色。您可以根据需要添加一个或多个角色。
  7. 点击 Save

为创建、加载、保存和删除操作分别设置访问权限

  1. 依次打开应用制作工具和您的应用。
  2. 在左侧边栏中,点击要为其设置权限的模型。
  3. 转到 Security 标签页。
  4. 选择 Advanced 复选框。
  5. Create、Load、Save 或 Delete 下,选择要应用的访问权限。
  6. 为角色、脚本和所有者提供更多信息:

    • 角色 - 针对每个角色点击 Add Role,然后从列表中选择角色。如果需要创建新角色,您也可以点击 Manage Roles
    • 脚本 - 在脚本编辑器中,输入或粘贴服务器授权脚本。
    • 所有者或角色 - 从绑定选择器中选择与记录所有者的电子邮件对应的字段。此选项要求模型中的某个字段包含所有者的电子邮件地址。详细了解 Owner 角色。您可以根据需要添加一个或多个角色。
  7. 点击 Save

  8. 对模型中的其他类型的操作重复此过程。

控制谁可以访问模型之间的关系

当模型包含机密数据时,您必须确保它们之间的关系是受访问权限控制的。如果关系未被保护,用户可能会获得访问权限并修改不应修改的记录。

非管理员用户每次请求具有关系的记录时,应用制作工具都针对记录检查加载权限。如果用户无权访问所有模型,则查询会被拒绝。此外,如果非管理员用户更改了关系中的关联,应用制作工具会在允许更改前验证该用户的关系权限。

关系访问权限与模型访问权限略有不同。您可以像模型一样,使用 Admins OnlyEveryoneRolesScript 权限。不过,您可以使用继承权限,而非所有者权限。

例如,在人力资源 (HR) 应用中,您可以仅允许人力资源经理向部门添加员工。如需设置此权限,请创建 HRAdmins 角色以及员工模型和部门模型之间的关系。在关系权限部分,为关系添加该角色。部署应用时,您可以将成员添加到 HRAdmins 角色(如果已部署了应用,则可以对其进行修改)。HRAdmins 角色的成员可以将 Employee 模型中的记录与 Department 模型中的记录相关联。其他用户无权关联这些记录。

为关系设置访问权限

  1. 依次打开应用制作工具和您的应用。
  2. 如果您想使用基于角色的访问权限控制,请添加角色
  3. 在左侧边栏中,点击要为其设置权限的模型。
  4. 转到 Security 标签页。
  5. Relation Permissions 下,找到要保护的关系。
  6. 选择访问权限。
  7. 如果您选择角色或脚本,请输入其他信息:

    • 角色 - 针对每个角色点击 Add Role,然后从列表中选择一个现有角色。如需添加角色,请点击 Manage Roles
    • 脚本 - 在脚本编辑器中,输入或粘贴服务器授权脚本。
  8. 点击 Save 以确认您的更改。

根据记录所有权保护数据

应用制作工具会自动获取已登录应用的用户的电子邮件地址。您可以使用此电子邮件地址限制对模型中记录的访问。模型必须有一个包含用户电子邮件地址的字段。如果您选择所有者和角色访问权限,则需要将该所有者权限绑定到该字段。通过此设置,只有当应用用户的电子邮件与绑定字段中的电子邮件匹配时,应用制作工具才允许该用户访问记录。

论坛示例是根据记录所有权保护数据的应用示例。通过该应用,用户可以创建论坛并向论坛发布消息。创建论坛的用户即为该论坛的所有者。在论坛模型中,数据安全性设置为仅具有所有者访问权限的用户可以执行保存和删除操作。此应用使用 onBeforeCreate 事件的脚本,在用户创建记录时自动为其分配记录所有者的角色。

如需使用所有者访问权限,请执行以下操作:

  1. 在模型中,在记录所有者的电子邮件地址中添加字符串字段。
  2. 转到 Security 标签页。
  3. 为仅应由记录所有者执行的记录操作(创建、保存、加载和删除)选择所有者或角色访问权限。
  4. 在模型中选择包含记录所有者电子邮件的字段。

每个记录都必须包含用于设置记录所有者的字段的值。如需在用户创建记录时自动将用户设置为所有者,您可以在模型的 onBeforeCreate 事件中进行设置。例如,如果模型中的所有者字段被设置为电子邮件,转到模型的 Events 标签页,点击 onBeforeCreate,并输入以下脚本:

record.Email = Session.getActiveUser().getEmail();
    

控制谁可以导入和导出数据

无论您在应用中的模型上设置何种访问权限控制,应用所有者都可以在部署中导入和导出数据。拥有应用项目文件查看权限的用户还可以导出数据。此数据访问可能存在安全风险。例如,数据可能包含敏感或机密数据,例如个人身份信息 (PII)。

  • 导入数据 - 当应用所有者将数据从 Google 电子表格导入到部署的模型中,应用制作工具就会将所有数据导入该部署中。如果 Google 电子表格包含敏感或机密数据,则该应用的部署也包含该信息。
  • 导出数据 - 当应用所有者或具有查看权限的用户导出数据时,应用制作工具会将所有数据导出到 Google 电子表格。如果该模型包含敏感或机密数据,则该电子表格也包含该信息。

应用数据安全的最佳做法

  • 仅授予用户在应用中完成其任务所需的最低权限以访问记录操作和关系。
  • 请勿依赖界面安全性(当您显示或隐藏页面和微件时)以确保数据安全。
  • 请勿使用客户端脚本或应用启动脚本来确保数据安全。这些脚本并不安全。使用服务器脚本实现基于脚本的安全性,并在脚本中写入访问权限控制。
  • 请确保拥有应用项目文件且拥有修改或查看权限的用户了解导入和导出数据时存在的数据安全风险。