Права и безопасность скриптов
От чьего имени работает скрипт
Скрипт всегда выполняется с правами владельца скрипта — того, кто его создал. Это не зависит от того, кто запустил скрипт: вы, коллега кнопкой из меню «Макросы», триггер по расписанию или внешний сервис через вебхук.
Скрипт может то же, что владелец скрипта в этой таблице. Секреты и другие таблицы на вкладке «Таблицы» тоже принадлежат владельцу скрипта.
Если код меняет другой участник
Редакторы таблицы могут менять код чужих скриптов. Чтобы участник не мог через чужой скрипт получить доступ, которого у него нет, после его правок действуют ограничения:
- Права сужаются до общих. Скрипт работает с правами обоих: всё, что закрыто для участника (защищённые диапазоны, скрытые значения листов), закрыто и для скрипта. Менять защиту такой скрипт не может.
- Секреты не передаются.
Secrets.getвозвращаетnull, первая строка журнала объясняет причину. - Другие таблицы недоступны. Доступ к таблицам с вкладки «Таблицы» приостанавливается.
Ограничения снимаются, когда владелец скрипта проверит код и подтвердит его: сохранит код сам или нажмёт «Подтвердить код». Правило действует и для библиотек: если версию подключённой библиотеки написал не владелец скрипта, это считается чужой правкой кода.

Если участника, который менял код, удалили из таблицы или он больше не может её редактировать, скрипт не запускается, пока владелец не подтвердит код. В журнале будет ошибка «код скрипта менял участник, который больше не может редактировать эту таблицу», а после трёх таких ошибок подряд при запусках по триггерам владельцу придёт письмо.
Защищённые листы и диапазоны
- Скрипт владельца таблицы записывает и в защищённые ячейки.
- Скрипт другого участника действует с правами своего автора: на защищённом листе меняет только открытые ячейки, а защищённый диапазон трогает, только если автор есть в списке этого диапазона. Это касается записи значений, копирования, сортировки, объединения, флажков и списков, оформления, примечаний, подсветки, размеров и видимости строк и столбцов.
- Структура листа. На листе с защищёнными диапазонами ни один скрипт не вставляет, не удаляет и не переносит строки и столбцы. Фильтр на таком листе включает, меняет и снимает только скрипт владельца таблицы, удалить такой лист может только он же.
- Изменение защиты доступно только скрипту владельца таблицы.
Как настраивать защиту вручную: Защита данных в листах и диапазонах. Те же правила действуют для токенов API, см. Защита листов в API.
Скрытые значения листов
Если значения листа скрыты от автора скрипта, скрипт их не читает. Это не относится к листам, которые просто скрыты из списка вкладок: их данные скрипту доступны. Изменения на таких листах не попадают в событие триггера «При изменении таблицы»: если менялись только они, триггер не срабатывает.
Триггеры и удалённые участники
- Если создатель триггера больше не может редактировать таблицу, триггер выключается с причиной «создатель триггера больше не может редактировать таблицу». Включить его снова может любой участник с правом редактирования, в том числе владелец: тогда он становится создателем триггера, а у вебхука появляется новый адрес.
- Если владелец скрипта потерял право редактировать таблицу, его триггеры выключаются.
- Секрет адреса вебхука видят только создатель триггера и владелец скрипта.
Изоляция запусков
- Каждый запуск выполняется в отдельной изолированной среде с ограничением памяти и времени. Скрипт не видит другие запуски, файловую систему сервера и внутренние сети.
- Доступ к таблице скрипт получает через временный ключ, который действует только на время запуска и только для своей таблицы и таблиц с вкладки «Таблицы». Код скрипта этот ключ не видит.
- Исходящие запросы к внутренним адресам блокируются, при перенаправлениях адрес проверяется заново.
- Секреты маскируются в журнале запусков.
Кто видит журнал
Журнал запусков скрипта видят все участники с правом редактирования таблицы. Не выводите в console.log данные, которые не должны видеть коллеги.
Права участников
| Действие | Владелец скрипта | Редактор таблицы | Читатель |
|---|---|---|---|
| Видеть и менять код, запускать | да | да | нет |
| Настраивать триггеры и макросы | да | да | нет |
| Добавлять секреты | да | да, но такой секрет не передаётся в запуск, пока владелец не сохранит его заново | нет |
| Менять список других таблиц | да | нет | нет |
| Подтверждать код после чужих правок | да | нет | нет |