Все сценарии должны выполняться под чьей-либо властью. Под чьими полномочиями запускается скрипт, определяется, чьи данные доступны для скрипта и могут ли такие полномочия запускать скрипт.
Концепции авторизации:
Скрипты, запускаемые из редактора скриптов, запускаются с авторизацией user at the keyboard
¹ . Пользовательские функции выполняются анонимно. Устанавливаемые триггеры запускаются под созданным пользователем триггером. Веб-приложения работают в соответствии с параметрами, выбранными во время развертывания.
Простые триггеры срабатывают автоматически и анонимно при этих ограничениях ² :
Сценарий должен быть привязан к файлу Google Sheets, Slides, Docs или Forms или быть надстройкой, расширяющей одно из этих приложений. Они не запускаются, если файл открыт только для чтения (просмотр или комментарий). Они не могут получить доступ к сервисам, требующим авторизации.
Устанавливаемые триггеры должны быть настроены и запущены под пользователем, который настроил триггер ³ .
Они не запускаются, если файл открывается в режиме только для чтения (просмотр или комментарий). Устанавливаемые триггеры всегда запускаются под учетной записью пользователя, который их создал. Данная учетная запись не может видеть триггеры, установленные из второй учетной записи, даже хотя первая учетная запись все еще может активировать эти триггеры.
Вы можете ограничить доступ к электронной таблице, листам или диапазонам ⁴ , ⁵ .
Отчисления:
Mr.A (Владелец) имеет электронную таблицу. Электронная таблица состоит из двух листов 1. Основной лист и 2. Секретный лист (лист защищен и скрыт для редактирования только г-ном А). Он также имеет следующие скрипты: 1. Простой триггерный скрипт (onEdit
) для установки метки времени в качестве заметки в каждой редактируемой ячейке. 2. Установленный триггер (AonEdit()
) для отправки электронной почты с электронной почты MrA при каждом редактировании. 3. Функция (summary()
) для создания сводки основного листа и отправки электронной почты из учетной записи пользователя на себя (для запуска вручную из редактора сценариев). 4. Функция защиты секретного листа (protect()
) 5. Простой onOpen()
триггер регистрации Someone opened your sheet
. И он дает доступ к редактированию г-ну Б. (редактор). Что может сделать мистер Б.?
Mr.B редактирует ячейку A1 в основном листе:
- Простой триггер
onEdit
срабатывает анонимно, а отметка времени устанавливается на A1 в качестве примечания.
- Устанавливаемый триггер
AonEdit
запускается с разрешения г-на А. и электронное письмо от г-на А. отправляется по электронной почте. Это неизвестно г-ну Б., хотя он может видеть сам скрипт.
Мистер Б., будучи хитрым человеком, успешно скрывает секретный лист и пытается его изменить:
- Mr.B не может изменить секретный лист, даже если он может полностью показать / просмотреть его
Mr.B находит редактор скриптов и пытается запустить функцию summary()
. Эта функция требует разрешения Gmail. Г-н Б. получает разрешение [for] для учетной записи г-на Б. в gmail, чтобы эта функция могла работать. Mr.B разрешает авторизацию, и сводка отправляется с аккаунта Mr.Bmail.
Mr.B хитро модифицирует функцию protect()
, чтобы предоставить себе доступ к редактированию секретного листа. Пользователь на клавиатуре - мистер Б. Авторитета г-на Б. недостаточно. Он встречает следующую ошибку:
Вы пытаетесь редактировать / удалить защищенную ячейку или объект. Пожалуйста, свяжитесь с владельцем таблицы, чтобы снять защиту, если вам нужно изменить.
Mr.A (Владелец) знает об этой попытке несанкционированного доступа от Mr.B, он ограничивает доступ для редактирования ко всем листам. Теперь, несмотря на то, что г-н Б. имеет разрешение на редактирование электронной таблицы, он не может редактировать любой лист в электронной таблице. Всякий раз, когда он открывает лист, запускается простая onOpen()
регистрация Someone opened your sheet
. Однако Mr.B может запустить функцию summary()
даже сейчас (если у него есть ссылка на редактор сценариев), чтобы получить сводку листа.
Решения:
поскольку это позволяет им повторно запустить сценарий и взять «власть» на листе.
Пользователь с правами на запись может ввести сценарий и изменить разрешения.
Как объяснено выше, это невозможно. Разрешение на редактирование листа / диапазона сохраняется даже на уровне сценария. Однако потенциальная лазейка - это функция AonEdit()
. Если Mr.B узнает, что Mr.A установил устанавливаемый триггер для функции AonEdit (), он может изменить функцию AonEdit()
, указав protection.remove()
, которая будет выполняться с разрешения Mr.A (устанавливаемые триггеры работают под человек, который его создал) и таким образом защита снимается.
Жаль, что люди не видят сценарий.
Вы можете использовать автономный скрипт ⁶ . Вы также можете использовать устанавливаемые триггеры [³] с автономными сценариями, на которые распространяются ограничения этих триггеров (например, он будет работать только с вашего разрешения). Поскольку сценарий не привязан к электронной таблице, редакторы электронной таблицы не имеют прав на редактирование / просмотр сценария. Кроме того, вы можете опубликовать дополнение ⁷ / webapp ⁸ .