Функция SECURITY DEFINER в PostgreSQL может быть опасной по нескольким причинам:
- Некорректный доступ к объектам базы данных. 1 Доступ к объектам без явного указания схемы может повлиять на другие объекты, чем предполагал автор функции. 1 Это связано с тем, что в сессии с базой данных можно изменить параметр конфигурации search_path, который определяет, какие схемы искать для нахождения объекта базы данных. 1
- Возможность злоумышленника выполнить произвольные SQL-команды. 3 Если не принять меры по защите структуры запроса SQL, эксплуатация уязвимости функции SECURITY DEFINER может позволить нарушителю, действующему удалённо, выполнить произвольные SQL-команды. 3
Чтобы обезопасить функцию SECURITY DEFINER, рекомендуется исключить из пути search_path любые схемы, доступные на запись недоверенным пользователям. 2 Это не позволит злонамеренным пользователям создать свои объекты (например, таблицы, функции и операторы), которые замаскируют объекты, используемые функцией. 2