Перейти к основному содержимому

Права и безопасность скриптов

От чьего имени работает скрипт​

Скрипт всегда выполняется с правами владельца скрипта — того, кто его создал. Это не зависит от того, кто запустил скрипт: вы, коллега кнопкой из меню «Макросы», триггер по расписанию или внешний сервис через вебхук.

Скрипт может то же, что владелец скрипта в этой таблице. Секреты и другие таблицы на вкладке «Таблицы» тоже принадлежат владельцу скрипта.

Если код меняет другой участник​

Редакторы таблицы могут менять код чужих скриптов. Чтобы участник не мог через чужой скрипт получить доступ, которого у него нет, после его правок действуют ограничения:

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

Ограничения снимаются, когда владелец скрипта проверит код и подтвердит его: сохранит код сам или нажмёт «Подтвердить код». Правило действует и для библиотек: если версию подключённой библиотеки написал не владелец скрипта, это считается чужой правкой кода.

Плашка «Код скрипта изменен другим участником» с кнопкой «Подтвердить код»

Если участника, который менял код, удалили из таблицы или он больше не может её редактировать, скрипт не запускается, пока владелец не подтвердит код. В журнале будет ошибка «код скрипта менял участник, который больше не может редактировать эту таблицу», а после трёх таких ошибок подряд при запусках по триггерам владельцу придёт письмо.

Защищённые листы и диапазоны​

  • Скрипт владельца таблицы записывает и в защищённые ячейки.
  • Скрипт другого участника действует с правами своего автора: на защищённом листе меняет только открытые ячейки, а защищённый диапазон трогает, только если автор есть в списке этого диапазона. Это касается записи значений, копирования, сортировки, объединения, флажков и списков, оформления, примечаний, подсветки, размеров и видимости строк и столбцов.
  • Структура листа. На листе с защищёнными диапазонами ни один скрипт не вставляет, не удаляет и не переносит строки и столбцы. Фильтр на таком листе включает, меняет и снимает только скрипт владельца таблицы, удалить такой лист может только он же.
  • Изменение защиты доступно только скрипту владельца таблицы.

Как настраивать защиту вручную: Защита данных в листах и диапазонах. Те же правила действуют для токенов API, см. Защита листов в API.

Скрытые значения листов​

Если значения листа скрыты от автора скрипта, скрипт их не читает. Это не относится к листам, которые просто скрыты из списка вкладок: их данные скрипту доступны. Изменения на таких листах не попадают в событие триггера «При изменении таблицы»: если менялись только они, триггер не срабатывает.

Триггеры и удалённые участники​

  • Если создатель триггера больше не может редактировать таблицу, триггер выключается с причиной «создатель триггера больше не может редактировать таблицу». Включить его снова может любой участник с правом редактирования, в том числе владелец: тогда он становится создателем триггера, а у вебхука появляется новый адрес.
  • Если владелец скрипта потерял право редактировать таблицу, его триггеры выключаются.
  • Секрет адреса вебхука видят только создатель триггера и владелец скрипта.

Изоляция запусков​

  • Каждый запуск выполняется в отдельной изолированной среде с ограничением памяти и времени. Скрипт не видит другие запуски, файловую систему сервера и внутренние сети.
  • Доступ к таблице скрипт получает через временный ключ, который действует только на время запуска и только для своей таблицы и таблиц с вкладки «Таблицы». Код скрипта этот ключ не видит.
  • Исходящие запросы к внутренним адресам блокируются, при перенаправлениях адрес проверяется заново.
  • Секреты маскируются в журнале запусков.

Кто видит журнал​

Журнал запусков скрипта видят все участники с правом редактирования таблицы. Не выводите в console.log данные, которые не должны видеть коллеги.

Права участников​

ДействиеВладелец скриптаРедактор таблицыЧитатель
Видеть и менять код, запускатьдаданет
Настраивать триггеры и макросыдаданет
Добавлять секретыдада, но такой секрет не передаётся в запуск, пока владелец не сохранит его зановонет
Менять список других таблицданетнет
Подтверждать код после чужих правокданетнет

Что дальше​