但我想知道 Apps 脚本是否可以允许他们这样做(浏览我的主文件以了解我如何命名工作表、范围等),
在我的简短测试中,应用程序脚本授权/权限似乎与导入范围授权是分开的。因此,如果从属电子表格(导入数据的电子表格)上的编辑者无法访问主电子表格,则他/她无法通过 Apps 脚本访问主电子表格上的数据。然而,从站上的编辑器能够通过 importrange 公式访问主站。
来自support https://support.google.com/docs/answer/3093340,
必须明确授予电子表格使用 IMPORTRANGE 从其他电子表格中提取数据的权限。目标工作表第一次从新的源工作表提取数据时,系统将提示用户授予权限。一旦授予访问权限,目标电子表格上的任何编辑者都可以使用 IMPORTRANGE 从源电子表格的任何部分提取数据。访问权限将一直有效,直到从源中删除授予访问权限的用户为止。
对所有要导出/导入的内容使用范围名称或特定工作表会阻止他们浏览所需的内容(他们基本上需要电子表格的 ID 和包含工作表名称或命名范围的范围)。
本质上,您想使用工作表名称/范围名称作为密码。在我的简短测试中,遇到了以下问题:
-
暴力破解是一种可能性。 SheetName/RangeName 应具有 >30 位的熵,即随机工作表名称/特殊字符/大写/小写字母,且字符数 >8。
-
关于 importrange 的运作方式并没有透露太多。这意味着,谷歌将来可以轻松允许应用程序脚本访问,而您可能不知道。
-
最后,也是最重要的,工作表名称/范围名称是完全可选的。
range_string 的sheet_name 部分是可选的;默认情况下,IMPORTRANGE 将从第一个工作表的给定范围导入。
换句话说,任何编辑者都可以不受限制地访问第一张工作表。例如,以下导入是完全有效的:
=IMPORTRANGE("SPREADSHEETURL", "A1:Z")
此外,如果您不小心将主电子表格中的敏感工作表移至左侧,使其成为第一个工作表,则所有编辑人员都可以在移动后轻松访问该工作表。为了最大限度地减少这种风险,您可以创建一个电子表格系统:主控>从属1(仅导入一张工作表。没有编辑器)>从属1的从属(1个编辑器;从从属1导入)。在这种情况下,即使slave1工作表名称被猜测,Master工作表也是安全的。
Verdict:
使用它是一个坏主意importrange()
为了任何敏感数据的安全。此外,对多个工作表使用 importrange 充其量也是不可靠的。出于所有目的,最好完全避免 importrange。虽然比公式有点繁琐,但对于电子表格同步,最好使用“独立” https://developers.google.com/apps-script/guides/standalone从性能和安全角度来看脚本。